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