chiark / gitweb /
[AN] status for newly added files
[stgit] / stgit / main.py
CommitLineData
41a6d859
CM
1"""Basic quilt-like functionality
2"""
3
4__copyright__ = """
5Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com>
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License version 2 as
9published by the Free Software Foundation.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19"""
20
21import sys, os
22from optparse import OptionParser, make_option
23
873a27fd 24from stgit.utils import *
41a6d859
CM
25from stgit import stack, git
26from stgit.version import version
27from stgit.config import config
fcee87cf
CM
28from stgit.commands.common import *
29
30# The commands
31import stgit.commands.add
32import stgit.commands.applied
33import stgit.commands.delete
34import stgit.commands.diff
de4c9d27 35import stgit.commands.clean
fcee87cf
CM
36import stgit.commands.export
37import stgit.commands.files
38import stgit.commands.init
b4bddc06 39import stgit.commands.mail
fcee87cf
CM
40import stgit.commands.new
41import stgit.commands.pop
f338c3c0 42import stgit.commands.pull
fcee87cf
CM
43import stgit.commands.push
44import stgit.commands.refresh
45import stgit.commands.resolved
46import stgit.commands.rm
47import stgit.commands.series
48import stgit.commands.status
49import stgit.commands.top
50import stgit.commands.unapplied
41a6d859
CM
51
52
41a6d859
CM
53#
54# The commands map
55#
56commands = {
fcee87cf
CM
57 'add': stgit.commands.add,
58 'applied': stgit.commands.applied,
59 'delete': stgit.commands.delete,
60 'diff': stgit.commands.diff,
de4c9d27 61 'clean': stgit.commands.clean,
fcee87cf
CM
62 'export': stgit.commands.export,
63 'files': stgit.commands.files,
64 'init': stgit.commands.init,
b4bddc06 65 'mail': stgit.commands.mail,
fcee87cf
CM
66 'new': stgit.commands.new,
67 'pop': stgit.commands.pop,
f338c3c0 68 'pull': stgit.commands.pull,
fcee87cf
CM
69 'push': stgit.commands.push,
70 'refresh': stgit.commands.refresh,
71 'resolved': stgit.commands.resolved,
72 'rm': stgit.commands.rm,
73 'series': stgit.commands.series,
74 'status': stgit.commands.status,
75 'top': stgit.commands.top,
76 'unapplied':stgit.commands.unapplied,
41a6d859
CM
77 }
78
79def print_help():
80 print 'usage: %s <command> [options]' % os.path.basename(sys.argv[0])
81 print
82 print 'commands:'
83 print ' help print this message'
84
85 cmds = commands.keys()
86 cmds.sort()
87 for cmd in cmds:
88 print ' ' + cmd + ' ' * (12 - len(cmd)) + commands[cmd].help
89
90#
91# The main function (command dispatcher)
92#
93def main():
94 """The main function
95 """
41a6d859
CM
96 prog = os.path.basename(sys.argv[0])
97
98 if len(sys.argv) < 2:
99 print >> sys.stderr, 'Unknown command'
100 print >> sys.stderr, \
101 ' Try "%s help" for a list of supported commands' % prog
102 sys.exit(1)
103
104 cmd = sys.argv[1]
105
106 if cmd in ['-h', '--help', 'help']:
107 print_help()
108 sys.exit(0)
109 if cmd in ['-v', '--version']:
110 print '%s %s' % (prog, version)
111 sys.exit(0)
112 if not cmd in commands:
113 print >> sys.stderr, 'Unknown command: %s' % cmd
114 print >> sys.stderr, ' Try "%s help" for a list of supported commands' \
115 % prog
116 sys.exit(1)
117
118 # re-build the command line arguments
119 sys.argv[0] += ' %s' % cmd
120 del(sys.argv[1])
121
122 command = commands[cmd]
123 parser = OptionParser(usage = command.usage,
fcee87cf 124 option_list = command.options)
41a6d859
CM
125 options, args = parser.parse_args()
126 try:
9ac09909
CM
127 # the lines below are a simple way to avoid an exception when
128 # stgit is run outside an initialised tree
129 stgit.commands.common.crt_series = stack.Series()
130 setattr(command, 'crt_series', stgit.commands.common.crt_series)
131
41a6d859 132 command.func(parser, options, args)
fcee87cf 133 except (IOError, CmdException, stack.StackException, git.GitException), \
41a6d859
CM
134 err:
135 print >> sys.stderr, '%s %s: %s' % (prog, cmd, err)
136 sys.exit(2)
137
138 sys.exit(0)