diff --git a/git_cl.py b/git_cl.py index 60230cb19..1034d2da1 100755 --- a/git_cl.py +++ b/git_cl.py @@ -129,6 +129,12 @@ settings = None _IS_BEING_TESTED = False +_KNOWN_GERRIT_TO_SHORT_URLS = { + 'https://chrome-internal-review.googlesource.com': 'https://crrev.com/i', + 'https://chromium-review.googlesource.com': 'https://crrev.com/c', +} + + def DieWithError(message, change_desc=None): if change_desc: SaveDescriptionBackup(change_desc) @@ -1257,12 +1263,15 @@ class Changelist(object): self.lookedup_issue = True return self.issue - def GetIssueURL(self): + def GetIssueURL(self, short=False): """Get the URL for a particular issue.""" issue = self.GetIssue() if not issue: return None - return '%s/%s' % (self.GetCodereviewServer(), issue) + server = self.GetCodereviewServer() + if short: + server = _KNOWN_GERRIT_TO_SHORT_URLS.get(server, server) + return '%s/%s' % (server, issue) def FetchDescription(self, pretty=False): assert self.GetIssue(), 'issue is required to query Gerrit' @@ -3783,7 +3792,7 @@ def CMDstatus(parser, args): c, status = next(output) branch_statuses[c.GetBranch()] = status status = branch_statuses.pop(branch) - url = cl.GetIssueURL() + url = cl.GetIssueURL(short=True) if url and (not status or status == 'error'): # The issue probably doesn't exist anymore. url += ' (broken)' diff --git a/git_map_branches.py b/git_map_branches.py index 3016bbaae..eac29fb04 100755 --- a/git_map_branches.py +++ b/git_map_branches.py @@ -140,9 +140,8 @@ class BranchMapper(object): # This is a blocking get which waits for the remote CL status to be # retrieved. for cl, status in status_info: - self.__status_info[cl.GetBranch()] = (cl.GetIssueURL(), - color_for_status(status), - status) + self.__status_info[cl.GetBranch()] = (cl.GetIssueURL(short=True), + color_for_status(status), status) roots = set() diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index 85ab7243b..0aa29d987 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -249,6 +249,18 @@ class TestGitClBasic(unittest.TestCase): self.assertEqual( set([(changes[0], 'waiting'), (changes[1], 'error')]), actual) + def test_get_issue_url(self): + cl = git_cl.Changelist(issue=123) + cl._gerrit_server = 'https://example.com' + self.assertEqual(cl.GetIssueURL(), 'https://example.com/123') + self.assertEqual(cl.GetIssueURL(short=True), 'https://example.com/123') + + cl = git_cl.Changelist(issue=123) + cl._gerrit_server = 'https://chromium-review.googlesource.com' + self.assertEqual(cl.GetIssueURL(), + 'https://chromium-review.googlesource.com/123') + self.assertEqual(cl.GetIssueURL(short=True), 'https://crrev.com/c/123') + def test_set_preserve_tryjobs(self): d = git_cl.ChangeDescription('Simple.') d.set_preserve_tryjobs()