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