Add support for Git scp-like syntax

This commit is contained in:
Ivan Kravets
2017-11-27 21:04:51 +02:00
parent 79b7974f35
commit f5f3cd85d8
6 changed files with 23 additions and 21 deletions

2
docs

Submodule docs updated: b7dfe7b6fa...832bf5d8a6

View File

@ -91,7 +91,6 @@ class LibBuilderBase(object):
PARSE_SRC_BY_H_NAME = True
_INC_DIRS_CACHE = None
def __init__(self, env, path, manifest=None, verbose=False):
self.env = env.Clone()
self.envorigin = env.Clone()

View File

@ -497,7 +497,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
# Parse requirements
req_conditions = [
"@" in text, not requirements, "://" not in text
"@" in text, not requirements, ":" not in text
or text.rfind("/") < text.rfind("@")
]
if all(req_conditions):
@ -519,9 +519,8 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
# Handle GitHub URL (https://github.com/user/package)
text.startswith("https://github.com/") and not text.endswith(
(".zip", ".tar.gz")),
text.startswith("http")
and (text.split("#", 1)[0]
if "#" in text else text).endswith(".git")
(text.split("#", 1)[0]
if "#" in text else text).endswith(".git")
]
hg_conditions = [
# Handle Developer Mbed URL
@ -536,9 +535,8 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
url = "file://" + text
elif "://" in text:
url = text
# Handle short version of GitHub URL
if text.count("/") == 1:
elif text.count("/") == 1:
url = "git+https://github.com/" + text
# Parse name from URL

View File

@ -261,7 +261,7 @@ class PlatformPackagesMixin(object):
continue
elif (name in with_packages or
not (skip_default_package or opts.get("optional", False))):
if "://" in version:
if ":" in version:
self.pm.install("%s=%s" % (name, version), silent=silent)
else:
self.pm.install(name, version, silent=silent)
@ -288,7 +288,7 @@ class PlatformPackagesMixin(object):
def update_packages(self, only_check=False):
for name, manifest in self.get_installed_packages().items():
requirements = self.packages[name].get("version", "")
if "://" in requirements:
if ":" in requirements:
_, requirements, __ = self.pm.parse_pkg_uri(requirements)
self.pm.update(manifest['__pkg_dir'], requirements, only_check)
@ -303,7 +303,7 @@ class PlatformPackagesMixin(object):
def are_outdated_packages(self):
for name, manifest in self.get_installed_packages().items():
requirements = self.packages[name].get("version", "")
if "://" in requirements:
if ":" in requirements:
_, requirements, __ = self.pm.parse_pkg_uri(requirements)
if self.pm.outdated(manifest['__pkg_dir'], requirements):
return True
@ -311,7 +311,7 @@ class PlatformPackagesMixin(object):
def get_package_dir(self, name):
version = self.packages[name].get("version", "")
if "://" in version:
if ":" in version:
return self.pm.get_package_dir(*self.pm.parse_pkg_uri(
"%s=%s" % (name, version)))
return self.pm.get_package_dir(name, version)

View File

@ -29,8 +29,9 @@ class VCSClientFactory(object):
result = urlparse(remote_url)
type_ = result.scheme
tag = None
if not type_ and remote_url.startswith("git@"):
if not type_ and remote_url.startswith("git+"):
type_ = "git"
remote_url = remote_url[4:]
elif "+" in result.scheme:
type_, _ = result.scheme.split("+", 1)
remote_url = remote_url[len(type_) + 1:]

View File

@ -115,14 +115,18 @@ def test_pkg_input_parser():
"hg+https://example.com/user/package",
("package", None, "hg+https://example.com/user/package")
],
# [
# "git@github.com:user/package.git",
# ("package", None, "git@github.com:user/package.git")
# ],
# [
# "git@github.com:user/package.git#v1.2.0",
# ("package", None, "git@github.com:user/package.git#v1.2.0")
# ],
[
"git@github.com:user/package.git",
("package", None, "git+git@github.com:user/package.git")
],
[
"git@github.com:user/package.git#v1.2.0",
("package", None, "git+git@github.com:user/package.git#v1.2.0")
],
[
"LocalName=git@github.com:user/package.git#v1.2.0@~1.2.0",
("LocalName", "~1.2.0", "git+git@github.com:user/package.git#v1.2.0")
],
[
"git+ssh://git@gitlab.private-server.com/user/package#1.2.0",
("package", None,