chiark / gitweb /
stgit new: Do not open editor if --save-template was specified
[stgit] / stgit / commands / show.py
index 41cb31e2ef7fce370dc825199691f9ab261610a1..45c3a5617a4bd9d4bc49d8c9fb18d832886c8008 100644 (file)
@@ -20,6 +20,7 @@ from pydoc import pager
 from stgit.argparse import opt
 from stgit.commands.common import *
 from stgit import argparse, git
+from stgit.lib import git as gitlib
 
 help = 'Show the commit corresponding to a patch'
 kind = 'patch'
@@ -28,16 +29,21 @@ description = """
 Show the commit log and the diff corresponding to the given patches.
 The output is similar to that generated by 'git show'."""
 
+args = [argparse.patch_range(argparse.applied_patches,
+                             argparse.unapplied_patches,
+                             argparse.hidden_patches)]
 options = [
-    opt('-b', '--branch',
+    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()
+directory = DirectoryHasRepository(log = False)
 
 def func(parser, options, args):
     """Show commit log and diff
@@ -48,19 +54,23 @@ def func(parser, options, args):
         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:
-        if len(args) == 1 and args[0].find('..') == -1:
-            # single patch or commit id
-            patches = args
-        else:
-            applied = crt_series.get_applied()
-            unapplied = crt_series.get_unapplied()
-            patches = parse_patches(args, applied + unapplied + \
-                                    crt_series.get_hidden(), len(applied))
+        # individual patches or commit ids
+        patches = args
 
+    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)