From: Catalin Marinas Date: Mon, 11 Dec 2006 22:21:11 +0000 (+0000) Subject: Allow the abbreviation of StGIT commands X-Git-Tag: v0.12~47 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/stgit/commitdiff_plain/514dd4f2a4bc2cb0fb2e160f254804361486f3df Allow the abbreviation of StGIT commands If a partial command name is given, StGIT tries to find a unique match, otherwise it fails. Signed-off-by: Catalin Marinas --- diff --git a/stgit/main.py b/stgit/main.py index 3c8e8f4..99e0832 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) @@ -163,6 +183,8 @@ def print_help(): def main(): """The main function """ + global prog + prog = os.path.basename(sys.argv[0]) if len(sys.argv) < 2: @@ -206,11 +228,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