From bc7ef67d9bfcebe17c89eb57cb465d0d6d1d999d Mon Sep 17 00:00:00 2001 From: Ficus Kirkpatrick Date: Mon, 4 May 2009 12:45:11 -0700 Subject: [PATCH] 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). --- project.py | 13 +++++++++++++ subcmds/upload.py | 22 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/project.py b/project.py index a698b31..1d908e7 100644 --- a/project.py +++ b/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): 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 @@ 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.')