From a94f162b9fe85389f3e1c9555628d9229105e15d Mon Sep 17 00:00:00 2001 From: Erwan Mahe Date: Fri, 19 Aug 2011 13:56:09 +0200 Subject: [PATCH] repo download: add --revert option BZ: 4779 Allows to revert a gerrit patch This patch is necessary for the on-demand creation of engineering builds using buildbot You can now use: repo download [--revert|-r project changeid/patchnumber This is useful to automate reverting of a patch in the context of build automation, and regression bisection Change-Id: I3985e80e4b2a230f83526191ea1379765a54bdcf Signed-off-by: Erwan Mahe Signed-off-by: Pierre Tardy --- project.py | 9 +++++++++ subcmds/download.py | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/project.py b/project.py index 49da34a8..1b0769a6 100644 --- a/project.py +++ b/project.py @@ -1645,6 +1645,15 @@ class Project(object): if self._allrefs: raise GitError('%s cherry-pick %s ' % (self.name, rev)) + def _Revert(self, rev, quiet=False): + cmd = ['revert'] + cmd.append('--no-edit') + cmd.append(rev) + cmd.append('--') + if GitCommand(self, cmd).Wait() != 0: + if self._allrefs: + raise GitError('%s revert %s ' % (self.name, rev)) + def _ResetHard(self, rev, quiet=True): cmd = ['reset', '--hard'] if quiet: diff --git a/subcmds/download.py b/subcmds/download.py index 79d0192d..f79f485b 100644 --- a/subcmds/download.py +++ b/subcmds/download.py @@ -36,6 +36,9 @@ makes it available in your project's local working directory. p.add_option('-c','--cherry-pick', dest='cherrypick', action='store_true', help="cherry-pick instead of checkout") + p.add_option('-r','--revert', + dest='revert', action='store_true', + help="revert instead of checkout") def _ParseChangeIds(self, args): if not args: @@ -68,7 +71,7 @@ makes it available in your project's local working directory. % (project.name, change_id, ps_id) sys.exit(1) - if not dl.commits: + if not opt.revert and not dl.commits: print >>sys.stderr, \ '[%s] change %d/%d has already been merged' \ % (project.name, change_id, ps_id) @@ -82,5 +85,7 @@ makes it available in your project's local working directory. print >>sys.stderr, ' %s' % (c) if opt.cherrypick: project._CherryPick(dl.commit) + elif opt.revert: + project._Revert(dl.commit) else: project._Checkout(dl.commit)