Parcourir la source

Automatically guess Gerrit change number in "repo upload --replace"

This feature only works if you have one commit to replace right now
(the common case).
Ficus Kirkpatrick il y a 17 ans
Parent
commit
bc7ef67d9b
2 fichiers modifiés avec 33 ajouts et 2 suppressions
  1. 13 0
      project.py
  2. 20 2
      subcmds/upload.py

+ 13 - 0
project.py

@@ -155,6 +155,19 @@ class ReviewableBranch(object):
                                  self.replace_changes,
                                  people)
 
+  def GetPublishedRefs(self):
+    refs = {}
+    output = self.project.bare_git.ls_remote(
+      self.branch.remote.SshReviewUrl(self.project.UserEmail),
+      'refs/changes/*')
+    for line in output.split('\n'):
+      try:
+        (sha, ref) = line.split()
+        refs[sha] = ref
+      except ValueError:
+        pass
+
+    return refs
 
 class StatusColoring(Coloring):
   def __init__(self, config):

+ 20 - 2
subcmds/upload.py

@@ -194,6 +194,18 @@ Gerrit Code Review:  http://code.google.com/p/gerrit/
       _die("nothing uncommented for upload")
     self._UploadAndReport(todo, people)
 
+  def _FindGerritChange(self, branch):
+    last_pub = branch.project.WasPublished(branch.name)
+    if last_pub is None:
+      return ""
+
+    refs = branch.GetPublishedRefs()
+    try:
+      # refs/changes/XYZ/N --> XYZ
+      return refs.get(last_pub).split('/')[-2]
+    except:
+      return ""
+
   def _ReplaceBranch(self, project, people):
     branch = project.CurrentBranch
     if not branch:
@@ -206,8 +218,14 @@ Gerrit Code Review:  http://code.google.com/p/gerrit/
 
     script = []
     script.append('# Replacing from branch %s' % branch.name)
-    for commit in branch.commits:
-      script.append('[      ] %s' % commit)
+
+    if len(branch.commits) == 1:
+      change = self._FindGerritChange(branch)
+      script.append('[%-6s] %s' % (change, branch.commits[0]))
+    else:
+      for commit in branch.commits:
+        script.append('[      ] %s' % commit)
+
     script.append('')
     script.append('# Insert change numbers in the brackets to add a new patch set.')
     script.append('# To create a new change record, leave the brackets empty.')