git cl issue 0 should really clear issue.

It used to clear just issue number and patchset, but that's not
all state that associates a given branch with codereview site.

R=andybons@chromium.org
BUG=609295

Review-Url: https://codereview.chromium.org/2032433003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@300683 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index 241e203..9c3059a 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -1255,11 +1255,15 @@
       if codereview_server:
         RunGit(['config', codereview_setting, codereview_server])
     else:
-      current_issue = self.GetIssue()
-      if current_issue:
-        RunGit(['config', '--unset', issue_setting])
+      # Reset it regardless. It doesn't hurt.
+      config_settings = [issue_setting, self._codereview_impl.PatchsetSetting()]
+      for prop in (['last-upload-hash'] +
+                    self._codereview_impl._PostUnsetIssueProperties()):
+        config_settings.append('branch.%s.%s' % (self.GetBranch(), prop))
+      for setting in config_settings:
+        RunGit(['config', '--unset', setting], error_ok=True)
       self.issue = None
-      self.SetPatchset(None)
+      self.patchset = None
 
   def GetChange(self, upstream_branch, author):
     if not self.GitSanityChecks(upstream_branch):
@@ -1497,6 +1501,10 @@
     """Returns name of git config setting which stores issue number."""
     raise NotImplementedError()
 
+  def _PostUnsetIssueProperties(self):
+    """Which branch-specific properties to erase when unsettin issue."""
+    raise NotImplementedError()
+
   def GetRieveldObjForPresubmit(self):
     # This is an unfortunate Rietveld-embeddedness in presubmit.
     # For non-Rietveld codereviews, this probably should return a dummy object.
@@ -1738,6 +1746,10 @@
       return 'branch.%s.rietveldserver' % branch
     return None
 
+  def _PostUnsetIssueProperties(self):
+    """Which branch-specific properties to erase when unsetting issue."""
+    return ['rietveldserver']
+
   def GetRieveldObjForPresubmit(self):
     return self.RpcServer()
 
@@ -2094,6 +2106,13 @@
       return 'branch.%s.gerritserver' % branch
     return None
 
+  def _PostUnsetIssueProperties(self):
+    """Which branch-specific properties to erase when unsetting issue."""
+    return [
+        'gerritserver',
+        'gerritsquashhash',
+    ]
+
   def GetRieveldObjForPresubmit(self):
     class ThisIsNotRietveldIssue(object):
       def __nonzero__(self):