Pulled in Fai's optparser
authorAaron Bentley <abentley@panoramicfeedback.com>
Tue, 22 Mar 2005 14:45:11 +0000 (14:45 +0000)
committerAaron Bentley <abentley@panoramicfeedback.com>
Tue, 22 Mar 2005 14:45:11 +0000 (14:45 +0000)
libbe/cmdutil.py

index 86fee803b0dfed4d318c2f70a29d33011f9e8ac4..e6d5a8f4f2f4fc6f1f7dec3320457f948a550e1e 100644 (file)
@@ -1,6 +1,7 @@
 import bugdir
 import plugin
 import os
+import optparse
 
 def unique_name(bug, bugs):
     chars = 1
@@ -80,9 +81,37 @@ def get_command(command_name):
 def execute(cmd, args):
     return get_command(cmd).execute(args)
 
-def help(cmd, args):
+def help(cmd):
     return get_command(cmd).help()
 
+
+class GetHelp(Exception):
+    pass
+
+
+class UsageError(Exception):
+    pass
+
+
+def raise_get_help(option, opt, value, parser):
+    raise GetHelp
+
+
+class CmdOptionParser(optparse.OptionParser):
+    def __init__(self, usage):
+        optparse.OptionParser.__init__(self, usage)
+        self.remove_option("-h")
+        self.add_option("-h", "--help", action="callback", 
+                        callback=raise_get_help, help="Print a help message")
+
+    def error(self, message):
+        raise UsageError(message)
+
+    def iter_options(self):
+        return iter_combine([self._short_opt.iterkeys(), 
+                            self._long_opt.iterkeys()])
+
+
 def underlined(instring):
     """Produces a version of a string that is underlined with '='