diff --git a/git_cl.py b/git_cl.py index ac6756bed..fadf1c93f 100755 --- a/git_cl.py +++ b/git_cl.py @@ -138,6 +138,8 @@ _KNOWN_GERRIT_TO_SHORT_URLS = { 'https://chrome-internal-review.googlesource.com': 'https://crrev.com/i', 'https://chromium-review.googlesource.com': 'https://crrev.com/c', } +assert len(_KNOWN_GERRIT_TO_SHORT_URLS) == len( + set(_KNOWN_GERRIT_TO_SHORT_URLS.values())), 'must have unique values' def DieWithError(message, change_desc=None): @@ -858,6 +860,11 @@ def ParseIssueNumberArgument(arg): return fail_result url = gclient_utils.UpgradeToHttps(arg) + for gerrit_url, short_url in _KNOWN_GERRIT_TO_SHORT_URLS.items(): + if url.startswith(short_url): + url = gerrit_url + url[len(short_url):] + break + try: parsed_url = urllib.parse.urlparse(url) except ValueError: diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index a91c07f59..0ddc5a999 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -337,8 +337,8 @@ class TestGitClBasic(unittest.TestCase): class TestParseIssueURL(unittest.TestCase): - def _validate(self, parsed, issue=None, patchset=None, hostname=None, - fail=False): + def _test(self, arg, issue=None, patchset=None, hostname=None, fail=False): + parsed = git_cl.ParseIssueNumberArgument(arg) self.assertIsNotNone(parsed) if fail: self.assertFalse(parsed.valid) @@ -348,39 +348,40 @@ class TestParseIssueURL(unittest.TestCase): self.assertEqual(parsed.patchset, patchset) self.assertEqual(parsed.hostname, hostname) - def test_ParseIssueNumberArgument(self): - def test(arg, *args, **kwargs): - self._validate(git_cl.ParseIssueNumberArgument(arg), *args, **kwargs) - - test('123', 123) - test('', fail=True) - test('abc', fail=True) - test('123/1', fail=True) - test('123a', fail=True) - test('ssh://chrome-review.source.com/#/c/123/4/', fail=True) - - test('https://codereview.source.com/123', - 123, None, 'codereview.source.com') - test('http://chrome-review.source.com/c/123', - 123, None, 'chrome-review.source.com') - test('https://chrome-review.source.com/c/123/', - 123, None, 'chrome-review.source.com') - test('https://chrome-review.source.com/c/123/4', - 123, 4, 'chrome-review.source.com') - test('https://chrome-review.source.com/#/c/123/4', - 123, 4, 'chrome-review.source.com') - test('https://chrome-review.source.com/c/123/4', - 123, 4, 'chrome-review.source.com') - test('https://chrome-review.source.com/123', - 123, None, 'chrome-review.source.com') - test('https://chrome-review.source.com/123/4', - 123, 4, 'chrome-review.source.com') - - test('https://chrome-review.source.com/bad/123/4', fail=True) - test('https://chrome-review.source.com/c/123/1/whatisthis', fail=True) - test('https://chrome-review.source.com/c/abc/', fail=True) - test('ssh://chrome-review.source.com/c/123/1/', fail=True) - + def test_basic(self): + self._test('123', 123) + self._test('', fail=True) + self._test('abc', fail=True) + self._test('123/1', fail=True) + self._test('123a', fail=True) + self._test('ssh://chrome-review.source.com/#/c/123/4/', fail=True) + self._test('ssh://chrome-review.source.com/c/123/1/', fail=True) + + def test_gerrit_url(self): + self._test('https://codereview.source.com/123', 123, None, + 'codereview.source.com') + self._test('http://chrome-review.source.com/c/123', 123, None, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/c/123/', 123, None, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/c/123/4', 123, 4, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/#/c/123/4', 123, 4, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/c/123/4', 123, 4, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/123', 123, None, + 'chrome-review.source.com') + self._test('https://chrome-review.source.com/123/4', 123, 4, + 'chrome-review.source.com') + + self._test('https://chrome-review.source.com/bad/123/4', fail=True) + self._test('https://chrome-review.source.com/c/123/1/whatisthis', fail=True) + self._test('https://chrome-review.source.com/c/abc/', fail=True) + + def test_short_urls(self): + self._test('https://crrev.com/c/2151934', 2151934, None, + 'chromium-review.googlesource.com') class GitCookiesCheckerTest(unittest.TestCase):