From 6085ed147af85e3351c91bca1c809a0ad2598f76 Mon Sep 17 00:00:00 2001 From: David Trowbridge Date: Thu, 24 Sep 2009 18:40:10 -0700 Subject: Support "revision-range" option with git Patch from Flavio Castelli. With this patch post-review will support the revision-range option following the syntax explained at http://www.review-board.org/docs/manual/dev/users/tools/post-review/#posting-committed-code Testing done: I have tested this new feature locally and it works fine. I have successfully tested the following commands: post-review --revision-range=rev1:rev2 --guess-summary --guess-description post-review --revision-range=rev1:rev2 --guess-description post-review --revision-range=rev1:rev2 post-review --revision-range=rev --guess-summary --guess-description post-review --revision-range=rev Reviewed at http://reviews.review-board.org/r/1049/ --- AUTHORS | 1 + rbtools/postreview.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 8fd8904..127703c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -9,6 +9,7 @@ Contributors: * Chris Clark * Dana Lacoste * Eric Huss + * Flavio Castelli * Jeremy Bettis * Lepton Wu * Luke Lu diff --git a/rbtools/postreview.py b/rbtools/postreview.py index db91b82..4411e86 100755 --- a/rbtools/postreview.py +++ b/rbtools/postreview.py @@ -2093,7 +2093,34 @@ class GitClient(SCMClient): return diff_data def diff_between_revisions(self, revision_range, args, repository_info): - pass + """Perform a diff between two arbitrary revisions""" + if ":" not in revision_range: + # only one revision is specified + if options.guess_summary and not options.summary: + options.summary = execute( + ["git", "log", "--pretty=format:%s", revision_range + ".."], + ignore_errors=True).strip() + + if options.guess_description and not options.description: + options.description = execute( + ["git", "log", "--pretty=format:%s%n%n%b", revision_range + ".."], + ignore_errors=True).strip() + + return self.make_diff(revision_range) + else: + r1, r2 = revision_range.split(":") + + if options.guess_summary and not options.summary: + options.summary = execute( + ["git", "log", "--pretty=format:%s", "%s..%s" % (r1, r2)], + ignore_errors=True).strip() + + if options.guess_description and not options.description: + options.description = execute( + ["git", "log", "--pretty=format:%s%n%n%b", "%s..%s" % (r1, r2)], + ignore_errors=True).strip() + + return self.make_diff(r1, r2) SCMCLIENTS = ( -- cgit v1.2.3