"""
import sys, os
-from optparse import OptionParser, make_option
from pydoc import pager
-
+from stgit.argparse import opt
from stgit.commands.common import *
from stgit.utils import *
-from stgit import stack, git
-
-
-help = 'show the tree diff'
-usage = """%prog [options] [<files...>]
+from stgit.out import *
+from stgit import argparse, stack, git
+help = 'Show the tree diff'
+kind = 'wc'
+usage = ['[options] [<files or dirs>]']
+description = """
Show the diff (default) or diffstat between the current working copy
-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
-the current one):
-
-rev = '([patch][//[bottom | top]]) | <tree-ish> | base'
+or a tree-ish object and another tree-ish object (defaulting to HEAD).
+File names can also be given to restrict the diff output. The
+tree-ish object can be an StGIT patch, a standard git commit, tag or
+tree. In addition to these, the command also supports '{base}',
+representing the bottom of the current stack.
-If neither bottom nor top are given but a '//' is present, the command
-shows the specified patch (defaulting to the current one)."""
+rev = '[branch:](<patch>|{base}) | <tree-ish>'"""
-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')]
+options = [
+ opt('-r', '--range', metavar = 'rev1[..[rev2]]', dest = 'revs',
+ short = 'Show the diff between revisions'),
+ opt('-s', '--stat', action = 'store_true',
+ short = 'Show the stat instead of the diff'),
+ ] + argparse.diff_opts_option()
+directory = DirectoryHasRepository(log = False)
def func(parser, options, args):
"""Show the tree diff
"""
+ args = git.ls_files(args)
+ directory.cd_to_topdir()
+
if options.revs:
rev_list = options.revs.split('..')
rev_list_len = len(rev_list)
if rev_list_len == 1:
- rev = rev_list[0]
- if rev.endswith('/'):
- # the whole patch
- rev = strip_suffix('/', rev)
- if rev.endswith('/'):
- rev = strip_suffix('/', rev)
- rev1 = rev + '//bottom'
- rev2 = rev + '//top'
- else:
- rev1 = rev_list[0]
- rev2 = None
+ rev1 = rev_list[0]
+ rev2 = None
elif rev_list_len == 2:
rev1 = rev_list[0]
rev2 = rev_list[1]
rev1 = 'HEAD'
rev2 = None
- if options.diff_opts:
- diff_flags = options.diff_opts.split()
- else:
- diff_flags = []
-
+ diff_str = git.diff(args, git_id(crt_series, rev1),
+ rev2 and git_id(crt_series, rev2),
+ diff_flags = options.diff_flags)
if options.stat:
- out.stdout_raw(git.diffstat(args, git_id(rev1), git_id(rev2)) + '\n')
+ out.stdout_raw(git.diffstat(diff_str) + '\n')
else:
- diff_str = git.diff(args, git_id(rev1), git_id(rev2),
- diff_flags = diff_flags )
if diff_str:
pager(diff_str)