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).
diff --git a/project.py b/project.py
index a698b31..1d908e7 100644
--- a/project.py
+++ b/project.py
@@ -155,6 +155,19 @@
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):
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 01ba4ad..aea399b 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -194,6 +194,18 @@
_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 @@
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.')