"""
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] [<patch>]
+from stgit import argparse, git
+from stgit.lib import git as gitlib
-Show the commit log and the diff corresponding to a given patch. 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 = []
+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
"""
- if len(args) == 0:
- patch = 'HEAD'
- elif len(args) == 1:
- patch = args[0]
+ if options.applied:
+ patches = crt_series.get_applied()
+ elif options.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:
- parser.error('incorrect number of arguments')
+ # individual patches or commit ids
+ patches = args
- commit_id = git_id(patch)
- sys.stdout.write(git.pretty_commit(commit_id))
+ 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)