Support usernames that contain '@' and ssh Git URLs
Our company-internal Gerrit uses federated logins (Shibboleth/SAML), and the login names happen to include the at-signs. This needed a patch to Gerrit ([1], released in 2.13.10) to allow them. Cloning using regular git tools as well as through the gertty work, but `git-review --list` complained because it couldn't parse these URLs. [1] https://gerrit-review.googlesource.com/c/94914/ Change-Id: I6c1c75a585184ee3fb2847c1e6d30802e53f8b4c
This commit is contained in:
parent
514958d3f3
commit
9b68a44f38
@ -525,7 +525,7 @@ def parse_gerrit_ssh_params_from_git_url(git_url):
|
|||||||
hostname = parsed_url.path[2:].split("/")[0]
|
hostname = parsed_url.path[2:].split("/")[0]
|
||||||
|
|
||||||
if "@" in hostname:
|
if "@" in hostname:
|
||||||
(username, hostname) = hostname.split("@")
|
(username, _, hostname) = hostname.rpartition("@")
|
||||||
if ":" in hostname:
|
if ":" in hostname:
|
||||||
(hostname, port) = hostname.split(":")
|
(hostname, port) = hostname.split(":")
|
||||||
|
|
||||||
|
@ -423,3 +423,42 @@ class DownloadFlagUnitTest(testtools.TestCase):
|
|||||||
'https://review.openstack.org/c/org/project/+/12345']
|
'https://review.openstack.org/c/org/project/+/12345']
|
||||||
)
|
)
|
||||||
self.assertEqual('12345', args.cid)
|
self.assertEqual('12345', args.cid)
|
||||||
|
|
||||||
|
|
||||||
|
class RepoUrlParsingTest(testtools.TestCase):
|
||||||
|
"""Test Git URL parsing"""
|
||||||
|
|
||||||
|
def test_ssh_openstack(self):
|
||||||
|
self.assertEqual(
|
||||||
|
cmd.parse_gerrit_ssh_params_from_git_url(
|
||||||
|
'ssh://someone@review.openstack.org:29418/x/y'),
|
||||||
|
('review.openstack.org', 'someone', '29418',
|
||||||
|
'x/y'))
|
||||||
|
|
||||||
|
def test_ssh_no_user_no_port(self):
|
||||||
|
self.assertEqual(
|
||||||
|
cmd.parse_gerrit_ssh_params_from_git_url(
|
||||||
|
'ssh://review.openstack.org/openstack-infra/git-review'),
|
||||||
|
('review.openstack.org', None, None,
|
||||||
|
'openstack-infra/git-review'))
|
||||||
|
|
||||||
|
def test_ssh_at_sign(self):
|
||||||
|
self.assertEqual(
|
||||||
|
cmd.parse_gerrit_ssh_params_from_git_url(
|
||||||
|
'ssh://someone@example.org@review.openstack.org:29418/x/y'),
|
||||||
|
('review.openstack.org', 'someone@example.org', '29418',
|
||||||
|
'x/y'))
|
||||||
|
|
||||||
|
def test_ssh_at_signs_excessive(self):
|
||||||
|
self.assertEqual(
|
||||||
|
cmd.parse_gerrit_ssh_params_from_git_url(
|
||||||
|
'ssh://x@y@example.org@review.openstack.org:29418/x/y'),
|
||||||
|
('review.openstack.org', 'x@y@example.org', '29418',
|
||||||
|
'x/y'))
|
||||||
|
|
||||||
|
def test_ssh_at_sign_escaped(self):
|
||||||
|
self.assertEqual(
|
||||||
|
cmd.parse_gerrit_ssh_params_from_git_url(
|
||||||
|
r'ssh://someone%40example.org@review.openstack.org:29418/x/y'),
|
||||||
|
('review.openstack.org', r'someone%40example.org', '29418',
|
||||||
|
'x/y'))
|
||||||
|
Loading…
Reference in New Issue
Block a user