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["keywords"] = self.str_to_list(data["keywords"], sep=",")
|
||||||
data = self._parse_system(data)
|
data = self._parse_system(data)
|
||||||
data = self._parse_homepage(data)
|
data = self._parse_homepage(data)
|
||||||
|
data = self._parse_repository(data)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -682,3 +683,14 @@ class PackageJsonManifestParser(BaseManifestParser):
|
|||||||
data["homepage"] = data["url"]
|
data["homepage"] = data["url"]
|
||||||
del data["url"]
|
del data["url"]
|
||||||
return data
|
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 import __version__, exception, proc
|
||||||
from platformio.compat import PY2, WINDOWS
|
from platformio.compat import PY2, WINDOWS
|
||||||
from platformio.fs import cd # pylint: disable=unused-import
|
from platformio.fs import cd, load_json # pylint: disable=unused-import
|
||||||
from platformio.fs import 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
|
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"]
|
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):
|
def test_parser_from_dir(tmpdir_factory):
|
||||||
pkg_dir = tmpdir_factory.mktemp("package")
|
pkg_dir = tmpdir_factory.mktemp("package")
|
||||||
|
Reference in New Issue
Block a user