X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/22d87516a1a525bc6cb12db96077569b79f5eda5..841c7b2a6b015e3ab3331713cf10caf7a4fd0b49:/stgit/main.py diff --git a/stgit/main.py b/stgit/main.py index 60df5ef..8694acd 100644 --- a/stgit/main.py +++ b/stgit/main.py @@ -30,7 +30,27 @@ class Commands(dict): """Commands class. It performs on-demand module loading """ def __getitem__(self, key): + """Return the command python module name based. + """ + global prog + cmd_mod = self.get(key) + if not cmd_mod: + candidates = [cmd for cmd in self.keys() if cmd.startswith(key)] + + if not candidates: + print >> sys.stderr, 'Unknown command: %s' % key + print >> sys.stderr, ' Try "%s help" for a list of ' \ + 'supported commands' % prog + sys.exit(1) + elif len(candidates) > 1: + print >> sys.stderr, 'Ambiguous command: %s' % key + print >> sys.stderr, ' Candidates are: %s' \ + % ', '.join(candidates) + sys.exit(1) + + cmd_mod = self.get(candidates[0]) + __import__('stgit.commands.' + cmd_mod) return getattr(stgit.commands, cmd_mod) @@ -49,6 +69,7 @@ commands = Commands({ 'float': 'float', 'fold': 'fold', 'goto': 'goto', + 'hide': 'hide', 'id': 'id', 'import': 'imprt', 'init': 'init', @@ -60,6 +81,7 @@ commands = Commands({ 'pop': 'pop', 'pull': 'pull', 'push': 'push', + 'rebase': 'rebase', 'refresh': 'refresh', 'rename': 'rename', 'resolved': 'resolved', @@ -67,9 +89,11 @@ commands = Commands({ 'series': 'series', 'show': 'show', 'status': 'status', + 'sync': 'sync', 'top': 'top', 'unapplied': 'unapplied', - 'uncommit': 'uncommit' + 'uncommit': 'uncommit', + 'unhide': 'unhide' }) # classification: repository, stack, patch, working copy @@ -86,13 +110,16 @@ stackcommands = ( 'commit', 'float', 'goto', + 'hide', 'init', 'pop', 'push', + 'rebase', 'series', 'top', 'unapplied', - 'uncommit' + 'uncommit', + 'unhide' ) patchcommands = ( 'delete', @@ -106,7 +133,8 @@ patchcommands = ( 'pick', 'refresh', 'rename', - 'show' + 'show', + 'sync' ) wccommands = ( 'add', @@ -161,6 +189,8 @@ def print_help(): def main(): """The main function """ + global prog + prog = os.path.basename(sys.argv[0]) if len(sys.argv) < 2: @@ -190,7 +220,8 @@ def main(): command = commands[cmd] parser = OptionParser(usage = command.usage, option_list = command.options) - parser.print_help() + from pydoc import pager + pager(parser.format_help()) else: print_help() sys.exit(0) @@ -203,11 +234,6 @@ def main(): if cmd in ['copyright']: print __copyright__ sys.exit(0) - if not cmd in commands: - print >> sys.stderr, 'Unknown command: %s' % cmd - print >> sys.stderr, ' Try "%s help" for a list of supported ' \ - 'commands' % prog - sys.exit(1) # re-build the command line arguments sys.argv[0] += ' %s' % cmd @@ -220,12 +246,16 @@ def main(): # These modules are only used from this point onwards and do not # need to be imported earlier + from stgit.config import config_setup + from ConfigParser import ParsingError, NoSectionError from stgit.stack import Series, StackException from stgit.git import GitException from stgit.commands.common import CmdException from stgit.gitmergeonefile import GitMergeException try: + config_setup() + # 'clone' doesn't expect an already initialised GIT tree. A Series # object will be created after the GIT tree is cloned if cmd != 'clone': @@ -236,8 +266,8 @@ def main(): stgit.commands.common.crt_series = command.crt_series command.func(parser, options, args) - except (IOError, CmdException, StackException, GitException, - GitMergeException), err: + except (IOError, ParsingError, NoSectionError, CmdException, + StackException, GitException, GitMergeException), err: print >> sys.stderr, '%s %s: %s' % (prog, cmd, err) sys.exit(2) except KeyboardInterrupt: