Chromium Code Reviews| Index: git_cl.py |
| diff --git a/git_cl.py b/git_cl.py |
| index 98a2f01b44485b746fb82c3ad290d5f379e3eab7..15f44a99d5859f791c6ba451d4f554b335731ccf 100755 |
| --- a/git_cl.py |
| +++ b/git_cl.py |
| @@ -894,27 +894,22 @@ class Changelist(object): |
| assert codereview in ('rietveld', 'gerrit') |
| return |
| - # Automatic selection. |
| + # Automatic selection based on issue number set for a current branch. |
| + # Rietveld takes precedence over Gerrit. |
| assert not self.issue |
| - # Check if this branch is associated with Rietveld => Rieveld. |
| - self._codereview_impl = _RietveldChangelistImpl(self, **kwargs) |
| - if self.GetIssue(force_lookup=True): |
| - return |
| - |
| - tmp_rietveld = self._codereview_impl # Save Rietveld object. |
| - |
| - # Check if this branch has Gerrit issue associated => Gerrit. |
| - self._codereview_impl = _GerritChangelistImpl(self, **kwargs) |
| - if self.GetIssue(force_lookup=True): |
| - return |
| - |
| - # OK, no issue is set for this branch. |
| - # If Gerrit is set repo-wide => Gerrit. |
| - if settings.GetIsGerrit(): |
| - return |
| + # Whether we find issue or not, we are doing the lookup. |
| + self.lookedup_issue = True |
| + for cls in [_RietveldChangelistImpl, _GerritChangelistImpl]: |
| + setting = cls.IssueSetting(self.GetBranch()) |
| + issue = RunGit(['config', setting], error_ok=True).strip() |
| + if issue: |
| + self._codereview_impl = cls(self, **kwargs) |
| + self.issue = int(issue) |
| + return |
| - self._codereview_impl = tmp_rietveld |
| - return |
| + # No issue is set for this branch, so decide based on repo-wide settings. |
| + return self._load_codereview_impl( |
|
Michael Achenbach
2016/03/24 12:44:54
nit: indentation
tandrii(chromium)
2016/03/24 12:48:48
fix: https://codereview.chromium.org/1830703004
|
| + codereview='gerrit' if settings.GetIsGerrit() else 'rietveld') |
| def GetCCList(self): |
| @@ -1131,10 +1126,11 @@ class Changelist(object): |
| cwd=url).strip() |
| return url |
| - def GetIssue(self, force_lookup=False): |
| + def GetIssue(self): |
| """Returns the issue number as a int or None if not set.""" |
| - if force_lookup or (self.issue is None and not self.lookedup_issue): |
| - issue = RunGit(['config', self._codereview_impl.IssueSetting()], |
| + if self.issue is None and not self.lookedup_issue: |
| + issue = RunGit(['config', |
| + self._codereview_impl.IssueSetting(self.GetBranch())], |
| error_ok=True).strip() |
| self.issue = int(issue) or None if issue else None |
| self.lookedup_issue = True |
| @@ -1180,7 +1176,7 @@ class Changelist(object): |
| def SetIssue(self, issue=None): |
| """Set this branch's issue. If issue isn't given, clears the issue.""" |
| - issue_setting = self._codereview_impl.IssueSetting() |
| + issue_setting = self._codereview_impl.IssueSetting(self.GetBranch()) |
| codereview_setting = self._codereview_impl.GetCodereviewServerSetting() |
| if issue: |
| self.issue = issue |
| @@ -1312,8 +1308,10 @@ class _ChangelistCodereviewBase(object): |
| """Returns git config setting for the codereview server.""" |
| raise NotImplementedError() |
| - def IssueSetting(self): |
| - """Returns name of git config setting which stores issue number.""" |
| + @staticmethod |
| + def IssueSetting(branch): |
| + """Returns name of git config setting which stores issue number for a given |
| + branch.""" |
| raise NotImplementedError() |
| def PatchsetSetting(self): |
| @@ -1498,9 +1496,9 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase): |
| self._auth_config or auth.make_auth_config()) |
| return self._rpc_server |
| - def IssueSetting(self): |
| - """Return the git setting that stores this change's issue.""" |
| - return 'branch.%s.rietveldissue' % self.GetBranch() |
| + @staticmethod |
| + def IssueSetting(branch): |
| + return 'branch.%s.rietveldissue' % branch |
| def PatchsetSetting(self): |
| """Return the git setting that stores this change's most recent patchset.""" |
| @@ -1550,9 +1548,9 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase): |
| self._gerrit_server = 'https://%s' % self._gerrit_host |
| return self._gerrit_server |
| - def IssueSetting(self): |
| - """Return the git setting that stores this change's issue.""" |
| - return 'branch.%s.gerritissue' % self.GetBranch() |
| + @staticmethod |
| + def IssueSetting(branch): |
| + return 'branch.%s.gerritissue' % branch |
| def PatchsetSetting(self): |
| """Return the git setting that stores this change's most recent patchset.""" |