forked from platformio/platformio-core
Parse npm-like "repository" data from a package manifest // Resolve #3637
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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")
|
||||
|
Reference in New Issue
Block a user