X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/26aab5b04fa4ba13f48948de73e497cf0a315ad1..0d219030bbc792da477f721578e0acc1256fc6d0:/stgit/commands/diff.py diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index 6a730ee..b66c75b 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,16 +33,20 @@ 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('--binary', + help = 'output a diff even for binary files', + action = 'store_true'), make_option('-s', '--stat', help = 'show the stat instead of the diff', action = 'store_true')] @@ -51,28 +56,38 @@ 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: rev1 = 'HEAD' rev2 = None + if options.binary: + diff_flags = [ '--binary' ] + else: + diff_flags = [] + if options.stat: - print git.diffstat(args, git_id(rev1), git_id(rev2)) + out.stdout_raw(git.diffstat(args, git_id(rev1), git_id(rev2)) + '\n') else: - git.diff(args, git_id(rev1), git_id(rev2), sys.stdout) + diff_str = git.diff(args, git_id(rev1), git_id(rev2), + diff_flags = diff_flags ) + if diff_str: + pager(diff_str)