mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
manifest_xml: fix url normalization for inits and remotes
Before the change, repo normalizes the urls with a following format only: git@github.com:foo/bar It doesn't cover the following case: <remote name="org" fetch="git@github.com:org/" /> <project name="somerepo" remote="org" /> Results to: error: Cannot fetch somerepo from ssh://git@github.com/org/git@github.com:org/somerepo Current change fixes it by normalizing this format: git@github.com:foo Test: ./run_tests tests/test_manifest_xml.py Change-Id: I1ad0f5df0d52c0b7229ba4c9a4db4eecb5c1a003 Signed-off-by: Vitalii Dmitriev <vitalii.dmitriev@unikie.com> Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/398337 Commit-Queue: Vitalii Dmitriev <dmit.vitalii@gmail.com> Tested-by: Vitalii Dmitriev <dmit.vitalii@gmail.com> Reviewed-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
parent
e5fb6e585f
commit
449b23b698
@ -133,8 +133,8 @@ def normalize_url(url: str) -> str:
|
|||||||
url = url.rstrip("/")
|
url = url.rstrip("/")
|
||||||
parsed_url = urllib.parse.urlparse(url)
|
parsed_url = urllib.parse.urlparse(url)
|
||||||
|
|
||||||
# This matches patterns like "git@github.com:foo/bar".
|
# This matches patterns like "git@github.com:foo".
|
||||||
scp_like_url_re = r"^[^/:]+@[^/:]+:[^/]+/"
|
scp_like_url_re = r"^[^/:]+@[^/:]+:[^/]+"
|
||||||
|
|
||||||
# If our URL is missing a schema and matches git's
|
# If our URL is missing a schema and matches git's
|
||||||
# SCP-like syntax we should convert it to a proper
|
# SCP-like syntax we should convert it to a proper
|
||||||
|
@ -1139,6 +1139,9 @@ class NormalizeUrlTests(ManifestParseTestCase):
|
|||||||
"http://foo.com/bar/baz", manifest_xml.normalize_url(url)
|
"http://foo.com/bar/baz", manifest_xml.normalize_url(url)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
url = "http://foo.com/bar/"
|
||||||
|
self.assertEqual("http://foo.com/bar", manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
def test_has_leading_slash(self):
|
def test_has_leading_slash(self):
|
||||||
"""SCP-like syntax except a / comes before the : which git disallows."""
|
"""SCP-like syntax except a / comes before the : which git disallows."""
|
||||||
url = "/git@foo.com:bar/baf"
|
url = "/git@foo.com:bar/baf"
|
||||||
@ -1157,9 +1160,15 @@ class NormalizeUrlTests(ManifestParseTestCase):
|
|||||||
url = "foo.com/baf/bat"
|
url = "foo.com/baf/bat"
|
||||||
self.assertEqual(url, manifest_xml.normalize_url(url))
|
self.assertEqual(url, manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
|
url = "foo.com/baf"
|
||||||
|
self.assertEqual(url, manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
url = "git@foo.com/baf/bat"
|
url = "git@foo.com/baf/bat"
|
||||||
self.assertEqual(url, manifest_xml.normalize_url(url))
|
self.assertEqual(url, manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
|
url = "git@foo.com/baf"
|
||||||
|
self.assertEqual(url, manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
url = "/file/path/here"
|
url = "/file/path/here"
|
||||||
self.assertEqual(url, manifest_xml.normalize_url(url))
|
self.assertEqual(url, manifest_xml.normalize_url(url))
|
||||||
|
|
||||||
@ -1168,3 +1177,30 @@ class NormalizeUrlTests(ManifestParseTestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"ssh://git@foo.com/bar/baf", manifest_xml.normalize_url(url)
|
"ssh://git@foo.com/bar/baf", manifest_xml.normalize_url(url)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
url = "git@foo.com:bar/"
|
||||||
|
self.assertEqual(
|
||||||
|
"ssh://git@foo.com/bar", manifest_xml.normalize_url(url)
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_remote_url_resolution(self):
|
||||||
|
remote = manifest_xml._XmlRemote(
|
||||||
|
name="foo",
|
||||||
|
fetch="git@github.com:org2/",
|
||||||
|
manifestUrl="git@github.com:org2/custom_manifest.git",
|
||||||
|
)
|
||||||
|
self.assertEqual("ssh://git@github.com/org2", remote.resolvedFetchUrl)
|
||||||
|
|
||||||
|
remote = manifest_xml._XmlRemote(
|
||||||
|
name="foo",
|
||||||
|
fetch="ssh://git@github.com/org2/",
|
||||||
|
manifestUrl="git@github.com:org2/custom_manifest.git",
|
||||||
|
)
|
||||||
|
self.assertEqual("ssh://git@github.com/org2", remote.resolvedFetchUrl)
|
||||||
|
|
||||||
|
remote = manifest_xml._XmlRemote(
|
||||||
|
name="foo",
|
||||||
|
fetch="git@github.com:org2/",
|
||||||
|
manifestUrl="ssh://git@github.com/org2/custom_manifest.git",
|
||||||
|
)
|
||||||
|
self.assertEqual("ssh://git@github.com/org2", remote.resolvedFetchUrl)
|
||||||
|
Loading…
Reference in New Issue
Block a user