From 514dd4f2a4bc2cb0fb2e160f254804361486f3df Mon Sep 17 00:00:00 2001 Message-Id: <514dd4f2a4bc2cb0fb2e160f254804361486f3df.1714707645.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 11 Dec 2006 22:21:11 +0000 Subject: [PATCH] Allow the abbreviation of StGIT commands Organization: Straylight/Edgeware From: Catalin Marinas If a partial command name is given, StGIT tries to find a unique match, otherwise it fails. Signed-off-by: Catalin Marinas --- stgit/main.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) 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 -- [mdw]