1 """Basic quilt-like functionality
5 Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 from optparse import OptionParser, make_option
24 from stgit.utils import *
25 from stgit import stack, git, gitmergeonefile
26 from stgit.version import version
27 from stgit.config import config
28 from stgit.commands.common import *
31 import stgit.commands.add
32 import stgit.commands.applied
33 import stgit.commands.branch
34 import stgit.commands.delete
35 import stgit.commands.diff
36 import stgit.commands.clean
37 import stgit.commands.clone
38 import stgit.commands.commit
39 import stgit.commands.export
40 import stgit.commands.files
41 import stgit.commands.fold
42 import stgit.commands.goto
43 import stgit.commands.id
44 import stgit.commands.imprt
45 import stgit.commands.init
46 import stgit.commands.mail
47 import stgit.commands.new
48 import stgit.commands.patches
49 import stgit.commands.pick
50 import stgit.commands.pop
51 import stgit.commands.pull
52 import stgit.commands.push
53 import stgit.commands.refresh
54 import stgit.commands.rename
55 import stgit.commands.resolved
56 import stgit.commands.rm
57 import stgit.commands.series
58 import stgit.commands.show
59 import stgit.commands.status
60 import stgit.commands.top
61 import stgit.commands.unapplied
62 import stgit.commands.uncommit
69 'add': stgit.commands.add,
70 'applied': stgit.commands.applied,
71 'branch': stgit.commands.branch,
72 'delete': stgit.commands.delete,
73 'diff': stgit.commands.diff,
74 'clean': stgit.commands.clean,
75 'clone': stgit.commands.clone,
76 'commit': stgit.commands.commit,
77 'export': stgit.commands.export,
78 'files': stgit.commands.files,
79 'fold': stgit.commands.fold,
80 'goto': stgit.commands.goto,
81 'id': stgit.commands.id,
82 'import': stgit.commands.imprt,
83 'init': stgit.commands.init,
84 'mail': stgit.commands.mail,
85 'new': stgit.commands.new,
86 'patches': stgit.commands.patches,
87 'pick': stgit.commands.pick,
88 'pop': stgit.commands.pop,
89 'pull': stgit.commands.pull,
90 'push': stgit.commands.push,
91 'refresh': stgit.commands.refresh,
92 'rename': stgit.commands.rename,
93 'resolved': stgit.commands.resolved,
94 'rm': stgit.commands.rm,
95 'series': stgit.commands.series,
96 'show': stgit.commands.show,
97 'status': stgit.commands.status,
98 'top': stgit.commands.top,
99 'unapplied':stgit.commands.unapplied,
100 'uncommit': stgit.commands.uncommit,
104 print 'usage: %s <command> [options]' % os.path.basename(sys.argv[0])
107 print ' help print the detailed command usage'
108 print ' version display version information'
109 print ' copyright display copyright information'
112 cmds = commands.keys()
115 print ' ' + cmd + ' ' * (12 - len(cmd)) + commands[cmd].help
118 # The main function (command dispatcher)
123 prog = os.path.basename(sys.argv[0])
125 if len(sys.argv) < 2:
126 print >> sys.stderr, 'Unknown command'
127 print >> sys.stderr, \
128 ' Try "%s --help" for a list of supported commands' % prog
133 if cmd in ['-h', '--help']:
134 if len(sys.argv) == 3 and sys.argv[2] in commands:
136 sys.argv[2] = '--help'
141 if len(sys.argv) == 3 and not sys.argv[2] in ['-h', '--help']:
143 if not cmd in commands:
144 print >> sys.stderr, '%s help: "%s" command unknown' \
148 sys.argv[0] += ' %s' % cmd
149 command = commands[cmd]
150 parser = OptionParser(usage = command.usage,
151 option_list = command.options)
154 print 'usage: %s help <command>' % prog
157 if cmd in ['-v', '--version', 'version']:
158 print 'Stacked GIT %s' % version
159 os.system('git --version')
160 print 'Python version %s' % sys.version
162 if cmd in ['copyright']:
165 if not cmd in commands:
166 print >> sys.stderr, 'Unknown command: %s' % cmd
167 print >> sys.stderr, ' Try "%s help" for a list of supported ' \
171 # re-build the command line arguments
172 sys.argv[0] += ' %s' % cmd
175 command = commands[cmd]
176 usage = command.usage.split('\n')[0].strip()
177 parser = OptionParser(usage = usage, option_list = command.options)
178 options, args = parser.parse_args()
180 # 'clone' doesn't expect an already initialised GIT tree. A Series
181 # object will be created after the GIT tree is cloned
183 if hasattr(options, 'branch') and options.branch:
184 command.crt_series = stack.Series(options.branch)
186 command.crt_series = stack.Series()
187 stgit.commands.common.crt_series = command.crt_series
189 command.func(parser, options, args)
190 except (IOError, CmdException, stack.StackException, git.GitException,
191 gitmergeonefile.GitMergeException), err:
192 print >> sys.stderr, '%s %s: %s' % (prog, cmd, err)
194 except KeyboardInterrupt: