Parse npm-like "repository" data from a package manifest // Resolve #3637

This commit is contained in:
Ivan Kravets
2020-08-26 15:40:03 +03:00
parent 8625fdc571
commit d59416431d
3 changed files with 28 additions and 2 deletions

View File

@ -662,6 +662,7 @@ class PackageJsonManifestParser(BaseManifestParser):
data["keywords"] = self.str_to_list(data["keywords"], sep=",")
data = self._parse_system(data)
data = self._parse_homepage(data)
data = self._parse_repository(data)
return data
@staticmethod
@ -682,3 +683,14 @@ class PackageJsonManifestParser(BaseManifestParser):
data["homepage"] = data["url"]
del data["url"]
return data
@staticmethod
def _parse_repository(data):
if isinstance(data.get("repository", {}), dict):
return data
data["repository"] = dict(type="git", url=str(data["repository"]))
if data["repository"]["url"].startswith(("github:", "gitlab:", "bitbucket:")):
data["repository"]["url"] = "https://{0}.com/{1}".format(
*(data["repository"]["url"].split(":", 1))
)
return data

View File

@ -28,8 +28,8 @@ import click
from platformio import __version__, exception, proc
from platformio.compat import PY2, WINDOWS
from platformio.fs import cd # pylint: disable=unused-import
from platformio.fs import load_json # pylint: disable=unused-import
from platformio.fs import cd, load_json # pylint: disable=unused-import
from platformio.package.version import pepver_to_semver # pylint: disable=unused-import
from platformio.proc import exec_command # pylint: disable=unused-import

View File

@ -672,6 +672,20 @@ def test_package_json_schema():
)
assert mp.as_dict()["system"] == ["darwin_x86_64"]
# shortcut repository syntax (npm-style)
contents = """
{
"name": "tool-github",
"version": "1.2.0",
"repository": "github:user/repo"
}
"""
raw_data = parser.ManifestParserFactory.new(
contents, parser.ManifestFileType.PACKAGE_JSON
).as_dict()
data = ManifestSchema().load_manifest(raw_data)
assert data["repository"]["url"] == "https://github.com/user/repo.git"
def test_parser_from_dir(tmpdir_factory):
pkg_dir = tmpdir_factory.mktemp("package")