X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/26aab5b04fa4ba13f48948de73e497cf0a315ad1..ebbd6f00a745851a7c914b76bc963be50d12818e:/stgit/commands/diff.py diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index 6a730ee..8678a0a 100644 --- a/stgit/commands/diff.py +++ b/stgit/commands/diff.py @@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys, os from optparse import OptionParser, make_option +from pydoc import pager from stgit.commands.common import * from stgit.utils import * @@ -32,15 +33,16 @@ or a tree-ish object and another tree-ish object. File names can also be given to restrict the diff output. The tree-ish object can be a standard git commit, tag or tree. In addition to these, the command also supports 'base', representing the bottom of the current stack, -and '[patch]/[bottom | top]' for the patch boundaries (defaulting to +and '[patch][//[bottom | top]]' for the patch boundaries (defaulting to the current one): -rev = '([patch]/[bottom | top]) | | base' +rev = '([patch][//[bottom | top]]) | | base' -If neither bottom or top are given but a '/' is present, the command +If neither bottom nor top are given but a '//' is present, the command shows the specified patch (defaulting to the current one).""" -options = [make_option('-r', metavar = 'rev1[:[rev2]]', dest = 'revs', +options = [make_option('-r', '--range', + metavar = 'rev1[..[rev2]]', dest = 'revs', help = 'show the diff between revisions'), make_option('-s', '--stat', help = 'show the stat instead of the diff', @@ -51,21 +53,23 @@ def func(parser, options, args): """Show the tree diff """ if options.revs: - rev_list = options.revs.split(':') + rev_list = options.revs.split('..') rev_list_len = len(rev_list) if rev_list_len == 1: - if rev_list[0][-1] == '/': + rev = rev_list[0] + if rev.endswith('/'): # the whole patch - rev1 = rev_list[0] + 'bottom' - rev2 = rev_list[0] + 'top' + rev = strip_suffix('/', rev) + if rev.endswith('/'): + rev = strip_suffix('/', rev) + rev1 = rev + '//bottom' + rev2 = rev + '//top' else: rev1 = rev_list[0] rev2 = None elif rev_list_len == 2: rev1 = rev_list[0] rev2 = rev_list[1] - if rev2 == '': - rev2 = 'HEAD' else: parser.error('incorrect parameters to -r') else: @@ -75,4 +79,6 @@ def func(parser, options, args): if options.stat: print git.diffstat(args, git_id(rev1), git_id(rev2)) else: - git.diff(args, git_id(rev1), git_id(rev2), sys.stdout) + diff_str = git.diff(args, git_id(rev1), git_id(rev2)) + if diff_str: + pager(diff_str)