X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/blobdiff_plain/3e022c8a41837e0894d017c4912b77e4b1792744..af734f49ec94f8a98e56f173bfa3640d0bdeffa0:/stgit/commands/show.py?ds=inline diff --git a/stgit/commands/show.py b/stgit/commands/show.py index b77a9c8..45c3a56 100644 --- a/stgit/commands/show.py +++ b/stgit/commands/show.py @@ -16,31 +16,34 @@ 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] [] [] [..] +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] [] [] [..]'] +description = """ +Show the commit log and the diff corresponding to the given patches. +The output is similar to that generated by 'git show'.""" -directory = DirectoryHasRepository() -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_diff_opts_option() +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 @@ -51,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)