From 595d137d564bd553c00d25f2be39ceaa262f4f1d Mon Sep 17 00:00:00 2001 From: Christian Hammond Date: Tue, 12 Jan 2010 01:34:17 -0800 Subject: Provide --guess-description and --guess-summary for Mercurial revision ranges. This implements support for --guess-description and --guess-summary with revision ranges in Mercurial. The commit messages are concatenated to form the description, and the first line of the first commit message forms the summary. Patch by Stefan Ring Reviewed at http://reviews.reviewboard.org/r/1333/ --- AUTHORS | 1 + rbtools/postreview.py | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/AUTHORS b/AUTHORS index 3a2861d..a7d51ef 100644 --- a/AUTHORS +++ b/AUTHORS @@ -22,4 +22,5 @@ Contributors: * Ravi Kondamuru * Ryan Oblak * Stacey Sheldon + * Stefan Ring * Steven Russell diff --git a/rbtools/postreview.py b/rbtools/postreview.py index 4c38333..9b422c4 100755 --- a/rbtools/postreview.py +++ b/rbtools/postreview.py @@ -1900,6 +1900,26 @@ class MercurialClient(SCMClient): return RepositoryInfo(path=path, base_path='', supports_parent_diffs=True) + def extract_summary(self, revision): + """ + Extracts the first line from the description of the given changeset. + """ + return execute(['hg', 'log', '-r%s' % revision, '--template', + r'{desc|firstline}\n']) + + def extract_description(self, rev1, rev2): + """ + Extracts all descriptions in the given revision range and concatenates + them, most recent ones going first. + """ + numrevs = len(execute(['hg', 'log', '-r%s:%s' % (rev2, rev1), + '--follow', '--template', + r'{rev}\n']).strip().split('\n')) + return execute(['hg', 'log', '-r%s:%s' % (rev2, rev1), + '--follow', '--template', + r'{desc}\n\n', '--limit', + str(numrevs - 1)]).strip() + def diff(self, files): """ Performs a diff across all modified files in a Mercurial repository. @@ -1914,17 +1934,10 @@ class MercurialClient(SCMClient): parent = options.parent_branch if options.guess_summary and not options.summary: - options.summary = execute(['hg', 'log', '-r.', '--template', - r'{desc|firstline}\n']) + options.summary = self.extract_summary(".") if options.guess_description and not options.description: - numrevs = len(execute(['hg', 'log', '-r.:%s' % parent, - '--follow', '--template', - r'{rev}\n']).strip().split('\n')) - options.description = execute(['hg', 'log', '-r.:%s' % parent, - '--follow', '--template', - r'{desc}\n\n', '--limit', - str(numrevs-1)]).strip() + options.description = self.extract_description(parent, ".") return (execute(["hg", "diff", "--svn", '-r%s:.' % parent]), None) @@ -1938,6 +1951,13 @@ class MercurialClient(SCMClient): raise NotImplementedError r1, r2 = revision_range.split(':') + + if options.guess_summary and not options.summary: + options.summary = self.extract_summary(r2) + + if options.guess_description and not options.description: + options.description = self.extract_description(r1, r2) + return execute(["hg", "diff", "-r", r1, "-r", r2]) -- cgit v1.2.3