diff --git a/project.py b/project.py index 40f6f317..49da34a8 100644 --- a/project.py +++ b/project.py @@ -1637,6 +1637,14 @@ class Project(object): if self._allrefs: raise GitError('%s checkout %s ' % (self.name, rev)) + def _CherryPick(self, rev, quiet=False): + cmd = ['cherry-pick'] + cmd.append(rev) + cmd.append('--') + if GitCommand(self, cmd).Wait() != 0: + if self._allrefs: + raise GitError('%s cherry-pick %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 61eadd54..79d0192d 100644 --- a/subcmds/download.py +++ b/subcmds/download.py @@ -33,7 +33,9 @@ makes it available in your project's local working directory. """ def _Options(self, p): - pass + p.add_option('-c','--cherry-pick', + dest='cherrypick', action='store_true', + help="cherry-pick instead of checkout") def _ParseChangeIds(self, args): if not args: @@ -78,4 +80,7 @@ makes it available in your project's local working directory. % (project.name, change_id, ps_id, len(dl.commits)) for c in dl.commits: print >>sys.stderr, ' %s' % (c) - project._Checkout(dl.commit) + if opt.cherrypick: + project._CherryPick(dl.commit) + else: + project._Checkout(dl.commit)