diff --git a/HISTORY.rst b/HISTORY.rst index 53db423c..a883ae57 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -11,6 +11,7 @@ PlatformIO Core 5 5.0.1 (2020-??-??) ~~~~~~~~~~~~~~~~~~ +- Added support for "owner" requirement when declaring ``dependencies`` using `library.json `__ - Fixed an issue when using a custom git/ssh package with `platform_packages `__ option (`issue #3624 `_) - Fixed an issue with "ImportError: cannot import name '_get_backend' from 'cryptography.hazmat.backends'" when using `Remote Development `__ on RaspberryPi device (`issue #3652 `_) - Fixed an issue when `pio package unpublish `__ command crashes (`issue #3660 `_) diff --git a/docs b/docs index 30ff70a4..d1043ec0 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 30ff70a4cef16890868cd95e4a68f75cae1b861d +Subproject commit d1043ec065e5bc4765800123dd8c2d54ce69d605 diff --git a/platformio/package/manager/library.py b/platformio/package/manager/library.py index a0d1407f..a6656f4e 100644 --- a/platformio/package/manager/library.py +++ b/platformio/package/manager/library.py @@ -80,7 +80,9 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc def _install_dependency(self, dependency, silent=False): spec = PackageSpec( - name=dependency.get("name"), requirements=dependency.get("version") + owner=dependency.get("owner"), + name=dependency.get("name"), + requirements=dependency.get("version"), ) search_filters = { key: value diff --git a/platformio/package/manifest/parser.py b/platformio/package/manifest/parser.py index 8949f43e..b492bb79 100644 --- a/platformio/package/manifest/parser.py +++ b/platformio/package/manifest/parser.py @@ -388,7 +388,15 @@ class LibraryJsonManifestParser(BaseManifestParser): raw = [raw] if isinstance(raw, dict): - return [dict(name=name, version=version) for name, version in raw.items()] + result = [] + for name, version in raw.items(): + if "/" in name: + owner, name = name.split("/", 1) + result.append(dict(owner=owner, name=name, version=version)) + else: + result.append(dict(name=name, version=version)) + return result + if isinstance(raw, list): for i, dependency in enumerate(raw): if isinstance(dependency, dict): diff --git a/platformio/package/manifest/schema.py b/platformio/package/manifest/schema.py index a86f1fda..f293ba5a 100644 --- a/platformio/package/manifest/schema.py +++ b/platformio/package/manifest/schema.py @@ -106,6 +106,7 @@ class RepositorySchema(StrictSchema): class DependencySchema(StrictSchema): + owner = fields.Str(validate=validate.Length(min=1, max=100)) name = fields.Str(required=True, validate=validate.Length(min=1, max=100)) version = fields.Str(validate=validate.Length(min=1, max=100)) authors = StrictListField(fields.Str(validate=validate.Length(min=1, max=50))) diff --git a/tests/package/test_manifest.py b/tests/package/test_manifest.py index 426cbdf1..4a0afc76 100644 --- a/tests/package/test_manifest.py +++ b/tests/package/test_manifest.py @@ -44,7 +44,7 @@ def test_library_json_parser(): "dependencies": { "deps1": "1.2.0", "deps2": "https://github.com/username/package.git", - "@owner/deps3": "^2.1.3" + "owner/deps3": "^2.1.3" }, "customField": "Custom Value" } @@ -65,9 +65,9 @@ def test_library_json_parser(): "homepage": "http://old.url.format", "build": {"flags": ["-DHELLO"]}, "dependencies": [ - {"name": "@owner/deps3", "version": "^2.1.3"}, {"name": "deps1", "version": "1.2.0"}, {"name": "deps2", "version": "https://github.com/username/package.git"}, + {"owner": "owner", "name": "deps3", "version": "^2.1.3"}, ], "customField": "Custom Value", }, @@ -83,7 +83,7 @@ def test_library_json_parser(): }, "dependencies": [ {"name": "deps1", "version": "1.0.0"}, - {"name": "@owner/deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"}, + {"owner": "owner", "name": "deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"}, {"name": "deps3", "version": "1.0.0", "platforms": ["ststm32", "sifive"]} ] } @@ -98,13 +98,14 @@ def test_library_json_parser(): "export": {"exclude": ["audio_samples"]}, "platforms": ["atmelavr"], "dependencies": [ + {"name": "deps1", "version": "1.0.0"}, { - "name": "@owner/deps2", + "owner": "owner", + "name": "deps2", "version": "1.0.0", "platforms": ["*"], "frameworks": ["arduino", "espidf"], }, - {"name": "deps1", "version": "1.0.0"}, { "name": "deps3", "version": "1.0.0", @@ -115,16 +116,16 @@ def test_library_json_parser(): ) raw_data = parser.LibraryJsonManifestParser( - '{"dependencies": ["dep1", "dep2", "@owner/dep3"]}' + '{"dependencies": ["dep1", "dep2", "owner/dep3@1.2.3"]}' ).as_dict() raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"]) assert not jsondiff.diff( raw_data, { "dependencies": [ - {"name": "@owner/dep3"}, {"name": "dep1"}, {"name": "dep2"}, + {"name": "owner/dep3@1.2.3"}, ], }, )