فهرست منبع

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 17 سال پیش
والد
کامیت
bc7ef67d9b
2فایلهای تغییر یافته به همراه33 افزوده شده و 2 حذف شده
  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.')