from stgit.commands.common import *
from stgit.utils import *
+from stgit.out import *
from stgit import stack, git
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')]
"""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:
rev = rev_list[0]
- if rev[-1] == '/':
+ if rev.endswith('/'):
# the whole patch
- rev = rev[:-1]
- if rev[-1] == '/':
- rev = rev[:-1]
+ rev = strip_suffix('/', rev)
+ if rev.endswith('/'):
+ rev = strip_suffix('/', rev)
rev1 = rev + '//bottom'
rev2 = rev + '//top'
else:
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:
- pager(git.diff(args, git_id(rev1), git_id(rev2)))
+ diff_str = git.diff(args, git_id(rev1), git_id(rev2),
+ diff_flags = diff_flags )
+ if diff_str:
+ pager(diff_str)