Pass the --in-reply-to and --no-thread options to git send-email
[stgit] / stgit / commands / show.py
index 3bf4f20..aaa46c4 100644 (file)
@@ -16,54 +16,61 @@ 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.argparse import opt
 from stgit.commands.common import *
-from stgit import git
-
-
-help = 'show the commit corresponding to a patch (or the current patch)'
-usage = """%prog [options] [<patch1>] [<patch2>] [<patch3>..<patch4>]
+from stgit import argparse, git
+from stgit.lib import git as gitlib
 
-Show the commit log and the diff corresponding to the given
-patches. The output is similar to that generated by the 'git show'
-command."""
+help = 'Show the commit corresponding to a patch'
+kind = 'patch'
+usage = ['[options] [--] [<patch1>] [<patch2>] [<patch3>..<patch4>]']
+description = """
+Show the commit log and the diff corresponding to the given patches.
+The output is similar to that generated by 'git show'."""
 
-options = [make_option('-b', '--branch',
-                       help = 'use BRANCH instead of the default one'),
-           make_option('-a', '--applied',
-                       help = 'show the applied patches',
-                       action = 'store_true'),
-           make_option('-u', '--unapplied',
-                       help = 'show the unapplied patches',
-                       action = 'store_true'),
-           make_option('-O', '--diff-opts',
-                       help = 'options to pass to git-diff')]
+args = [argparse.patch_range(argparse.applied_patches,
+                             argparse.unapplied_patches,
+                             argparse.hidden_patches)]
+options = [
+    opt('-b', '--branch', args = [argparse.stg_branches],
+        short = 'Use BRANCH instead of the default branch'),
+    opt('-a', '--applied', action = 'store_true',
+        short = 'Show the applied patches'),
+    opt('-u', '--unapplied', action = 'store_true',
+        short = 'Show the unapplied patches'),
+    opt('-s', '--stat', action = 'store_true',
+        short = 'Show a diffstat summary of the specified patches'),
+    ] + argparse.diff_opts_option()
 
+directory = DirectoryHasRepository(log = False)
 
 def func(parser, options, args):
     """Show commit log and diff
     """
-    applied = crt_series.get_applied()
-    unapplied = crt_series.get_unapplied()
-
     if options.applied:
-        patches = applied
+        patches = crt_series.get_applied()
     elif options.unapplied:
-        patches = unapplied
+        patches = crt_series.get_unapplied()
     elif len(args) == 0:
         patches = ['HEAD']
+    elif '..' in ' '.join(args):
+        # patch ranges
+        applied = crt_series.get_applied()
+        unapplied = crt_series.get_unapplied()
+        patches = parse_patches(args, applied + unapplied + \
+                                crt_series.get_hidden(), len(applied))
     else:
-        patches = parse_patches(args, applied + unapplied, len(applied))
-
-    if options.diff_opts:
-        diff_flags = options.diff_opts.split()
-    else:
-        diff_flags = []
+        # individual patches or commit ids
+        patches = args
 
-    commit_ids = [git_id(patch) for patch in patches]
-    commit_str = '\n'.join([git.pretty_commit(commit_id, diff_flags=diff_flags)
+    if not options.stat:
+        options.diff_flags.extend(color_diff_flags())
+    commit_ids = [git_id(crt_series, patch) for patch in patches]
+    commit_str = '\n'.join([git.pretty_commit(commit_id,
+                                              flags = options.diff_flags)
                             for commit_id in commit_ids])
+    if options.stat:
+        commit_str = gitlib.diffstat(commit_str)
     if commit_str:
         pager(commit_str)