chiark / gitweb /
Allow 'show' and 'id' to work on non-StGIT branches (bug #10011)
[stgit] / stgit / commands / show.py
CommitLineData
8847a11b
CM
1__copyright__ = """
2Copyright (C) 2006, Catalin Marinas <catalin.marinas@gmail.com>
3
4This program is free software; you can redistribute it and/or modify
5it under the terms of the GNU General Public License version 2 as
6published by the Free Software Foundation.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program; if not, write to the Free Software
15Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16"""
17
18import sys, os
19from optparse import OptionParser, make_option
52f3900c 20from pydoc import pager
8847a11b
CM
21
22from stgit.commands.common import *
23from stgit import git
24
25
26help = 'show the commit corresponding to a patch (or the current patch)'
7c47eea5 27usage = """%prog [options] [<patch1>] [<patch2>] [<patch3>..<patch4>]
8847a11b 28
7c47eea5
CM
29Show the commit log and the diff corresponding to the given
30patches. The output is similar to that generated by the 'git show'
31command."""
8847a11b 32
6dd8fafa 33directory = DirectoryHasRepository()
8d809157
YD
34options = [make_option('-b', '--branch',
35 help = 'use BRANCH instead of the default one'),
36 make_option('-a', '--applied',
7c47eea5
CM
37 help = 'show the applied patches',
38 action = 'store_true'),
39 make_option('-u', '--unapplied',
40 help = 'show the unapplied patches',
2ace36ab 41 action = 'store_true'),
68384061
CM
42 make_option('-O', '--show-opts',
43 help = 'options to pass to "git show"')]
8847a11b
CM
44
45
46def func(parser, options, args):
47 """Show commit log and diff
48 """
7c47eea5 49 if options.applied:
d679e110 50 patches = crt_series.get_applied()
7c47eea5 51 elif options.unapplied:
d679e110 52 patches = crt_series.get_unapplied()
7c47eea5
CM
53 elif len(args) == 0:
54 patches = ['HEAD']
8847a11b 55 else:
d679e110
CM
56 if len(args) == 1 and args[0].find('..') == -1:
57 # single patch or commit id
abdaa9e5
YD
58 patches = args
59 else:
d679e110
CM
60 applied = crt_series.get_applied()
61 unapplied = crt_series.get_unapplied()
62 patches = parse_patches(args, applied + unapplied + \
63 crt_series.get_hidden(), len(applied))
7c47eea5 64
68384061
CM
65 if options.show_opts:
66 show_flags = options.show_opts.split()
2ace36ab 67 else:
68384061 68 show_flags = []
2ace36ab 69
6972fd6b 70 commit_ids = [git_id(crt_series, patch) for patch in patches]
68384061 71 commit_str = '\n'.join([git.pretty_commit(commit_id, flags = show_flags)
7c47eea5 72 for commit_id in commit_ids])
fdf4cb43
CM
73 if commit_str:
74 pager(commit_str)