chiark / gitweb /
Fix the exception class name in export.py
[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
39import stgit.commands.new
40import stgit.commands.pop
41import stgit.commands.push
42import stgit.commands.refresh
43import stgit.commands.resolved
44import stgit.commands.rm
45import stgit.commands.series
46import stgit.commands.status
47import stgit.commands.top
48import stgit.commands.unapplied
41a6d859
CM
49
50
41a6d859
CM
51#
52# The commands map
53#
54commands = {
fcee87cf
CM
55 'add': stgit.commands.add,
56 'applied': stgit.commands.applied,
57 'delete': stgit.commands.delete,
58 'diff': stgit.commands.diff,
de4c9d27 59 'clean': stgit.commands.clean,
fcee87cf
CM
60 'export': stgit.commands.export,
61 'files': stgit.commands.files,
62 'init': stgit.commands.init,
63 'new': stgit.commands.new,
64 'pop': stgit.commands.pop,
65 'push': stgit.commands.push,
66 'refresh': stgit.commands.refresh,
67 'resolved': stgit.commands.resolved,
68 'rm': stgit.commands.rm,
69 'series': stgit.commands.series,
70 'status': stgit.commands.status,
71 'top': stgit.commands.top,
72 'unapplied':stgit.commands.unapplied,
41a6d859
CM
73 }
74
75def print_help():
76 print 'usage: %s <command> [options]' % os.path.basename(sys.argv[0])
77 print
78 print 'commands:'
79 print ' help print this message'
80
81 cmds = commands.keys()
82 cmds.sort()
83 for cmd in cmds:
84 print ' ' + cmd + ' ' * (12 - len(cmd)) + commands[cmd].help
85
86#
87# The main function (command dispatcher)
88#
89def main():
90 """The main function
91 """
41a6d859
CM
92 prog = os.path.basename(sys.argv[0])
93
94 if len(sys.argv) < 2:
95 print >> sys.stderr, 'Unknown command'
96 print >> sys.stderr, \
97 ' Try "%s help" for a list of supported commands' % prog
98 sys.exit(1)
99
100 cmd = sys.argv[1]
101
102 if cmd in ['-h', '--help', 'help']:
103 print_help()
104 sys.exit(0)
105 if cmd in ['-v', '--version']:
106 print '%s %s' % (prog, version)
107 sys.exit(0)
108 if not cmd in commands:
109 print >> sys.stderr, 'Unknown command: %s' % cmd
110 print >> sys.stderr, ' Try "%s help" for a list of supported commands' \
111 % prog
112 sys.exit(1)
113
114 # re-build the command line arguments
115 sys.argv[0] += ' %s' % cmd
116 del(sys.argv[1])
117
118 command = commands[cmd]
119 parser = OptionParser(usage = command.usage,
fcee87cf 120 option_list = command.options)
41a6d859
CM
121 options, args = parser.parse_args()
122 try:
9ac09909
CM
123 # the lines below are a simple way to avoid an exception when
124 # stgit is run outside an initialised tree
125 stgit.commands.common.crt_series = stack.Series()
126 setattr(command, 'crt_series', stgit.commands.common.crt_series)
127
41a6d859 128 command.func(parser, options, args)
fcee87cf 129 except (IOError, CmdException, stack.StackException, git.GitException), \
41a6d859
CM
130 err:
131 print >> sys.stderr, '%s %s: %s' % (prog, cmd, err)
132 sys.exit(2)
133
134 sys.exit(0)