Commit 8aebb60a authored by Andrii Shyshkalov's avatar Andrii Shyshkalov Committed by LUCI CQ

git cl patch: support short CL URLs.

Change-Id: I71ae8e94ec0cc5d880c002c7187351ac6ee2c2b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2152218
Auto-Submit: Andrii Shyshkalov <tandrii@google.com>
Reviewed-by: 's avatarEdward Lesmes <ehmaldonado@chromium.org>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
parent b8265f10
......@@ -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:
......
......@@ -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):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment