X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/fcc1ad70be5ff89996358b6d770cd229fec2a3ba..6dd8fafabb5b8e266a85f13c8851ca8a66a1a405:/stgit/commands/diff.py diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py index 5645eca..f3b0ea2 100644 --- a/stgit/commands/diff.py +++ b/stgit/commands/diff.py @@ -18,9 +18,11 @@ 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 * +from stgit.out import * from stgit import stack, git @@ -32,16 +34,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', +directory = DirectoryHasRepository() +options = [make_option('-r', '--range', + metavar = 'rev1[..[rev2]]', dest = 'revs', help = 'show the diff between revisions'), + make_option('-O', '--diff-opts', + help = 'options to pass to git-diff'), make_option('-s', '--stat', help = 'show the stat instead of the diff', action = 'store_true')] @@ -51,13 +57,17 @@ 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 @@ -70,7 +80,15 @@ def func(parser, options, args): rev1 = 'HEAD' rev2 = None + if options.diff_opts: + diff_flags = options.diff_opts.split() + 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)