Subject: [StGit PATCH] teach --summary to stg show

From: Alex Chiang <[email-masked]>
Date: Thu, 18 Jun 2009 23:06:53 -0600

Add -s/--summary option to stg show, which will generate a nice
diffstat, similar to what you get in a cover mail if you specify
%(diffstat)s.

This new option is handy for getting a sense of the scale of your
patch-series-in-progress.

You'd think this option wouldn't be necessary, but simply piping
the output of stg show -a into diffstat (v1.45) doesn't do the
Right Thing(tm):

achiang@bob:linux-2.6$ stg series
+ export-acpi-pci-root
+ acpiphp-find-bridges-easy
> acpi-pci-detect-ejectable-interface

achiang@bob:linux-2.6$ stg show -a | diffstat
 b/drivers/acpi/pci_root.c            |   16 ------
 b/drivers/pci/hotplug/acpi_pcihp.c   |    7 --
 b/drivers/pci/hotplug/acpiphp_glue.c |   89 +++++++++++------------------------
 b/drivers/pci/hotplug/pciehp_acpi.c  |    5 +
 b/include/acpi/acpi_bus.h            |   14 +++++
 b/include/linux/pci_hotplug.h        |    2 
 drivers/pci/hotplug/acpiphp_glue.c   |   14 -----
 7 files changed, 52 insertions(+), 95 deletions(-)

Here is the correct diffstat using the new -s option.

achiang@bob:linux-2.6$ stg show -a -s
 drivers/acpi/pci_root.c            |   16 +------
 drivers/pci/hotplug/acpi_pcihp.c   |    7 +--
 drivers/pci/hotplug/acpiphp_glue.c |   77 ++++++++----------------------------
 drivers/pci/hotplug/pciehp_acpi.c  |    5 +-
 include/acpi/acpi_bus.h            |   14 +++++++
 include/linux/pci_hotplug.h        |    2 -
 6 files changed, 39 insertions(+), 82 deletions(-)

Signed-off-by: Alex Chiang <[email-masked]>
---
diff --git a/stgit/commands/show.py b/stgit/commands/show.py
index b7a8aa9..1f862f7 100644
--- a/stgit/commands/show.py
+++ b/stgit/commands/show.py
@@ -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'
@@ -38,6 +39,8 @@ options = [
         short = 'Show the applied patches'),
     opt('-u', '--unapplied', action = 'store_true',
         short = 'Show the unapplied patches'),
+    opt('-s', '--summary', action = 'store_true',
+        short = 'Show a diffstat summary of the specified patches'),
     ] + argparse.diff_opts_option()
 
 directory = DirectoryHasRepository(log = False)
@@ -62,9 +65,14 @@ def func(parser, options, args):
         patches = args
 
     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.summary:
+        commit_str = gitlib.diffstat(git.diff(
+                                rev1 = git_id(crt_series, '%s^' % patches[0]),
+                                rev2 = git_id(crt_series, '%s' % patches[-1])))
+    else:
+        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 commit_str:
         pager(commit_str)