Added bugid_args option to cmdutil.default_complete.
authorW. Trevor King <wking@drexel.edu>
Thu, 27 Nov 2008 16:03:21 +0000 (11:03 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 27 Nov 2008 16:03:21 +0000 (11:03 -0500)
Now most of the bug-id arguments support Bash completion.  Since there
will hopefully be lots of bugs in the database, I decided to filter
the list of available bugs.  Currently, we just auto-complete active
bugs for most commands, with the exceptions of open (obviously) and
status (which needs to work on all types of bugs).

becommands/assign.py
becommands/close.py
becommands/merge.py
becommands/open.py
becommands/remove.py
becommands/severity.py
becommands/show.py
becommands/status.py
becommands/target.py
libbe/cmdutil.py

index 98693509dc36c31cddbfe3a527ad754e1a83f8e0..a41bbae055156df0dee88419e8a548a85f7fcaae 100644 (file)
@@ -43,7 +43,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     assert(len(args) in (0, 1, 2))
     if len(args) == 0:
         raise cmdutil.UsageError("Please specify a bug id.")
index 37fa032e57a3851eb03c4b3c8dfab4793e237eee..d8826b03bd06c08bada7d1a40a5d7c2140d0ed69 100644 (file)
@@ -33,7 +33,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     if len(args) == 0:
         raise cmdutil.UsageError("Please specify a bug id.")
     if len(args) > 1:
index 583bd285fd00b4c06e56bffac4270233f0472884..9f324f716620683a383059b2028d9417d40d6b9d 100644 (file)
@@ -122,7 +122,10 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True,
+                                         1: lambda bug : bug.active==True})
+
     if len(args) < 2:
         raise cmdutil.UsageError("Please specify two bug ids.")
     if len(args) > 2:
index 41db5e9ba8939a20f4c504506cfc08128ca3b48e..7a18fd06f09b17519a76d102ce6e7af65c1e2644 100644 (file)
@@ -32,7 +32,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==False})
     if len(args) == 0:
         raise cmdutil.UsageError, "Please specify a bug id."
     if len(args) > 1:
index cd877c559a26b035ea11bc22e7df3a857cdd1931..fa264b8fbf6027818f373a11162afc778b548589 100644 (file)
@@ -37,7 +37,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     if len(args) != 1:
         raise cmdutil.UsageError, "Please specify a bug id."
     bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
index 29a55453d4b8b4437f4943d7d0fc48f7de546a6a..7b7ee29d0b963c38ad1a530e0149479e96f024cd 100644 (file)
@@ -35,7 +35,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     if len(args) not in (1,2):
         raise cmdutil.UsageError
     bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
index 3c00712c3c4e19256ba353c456a9a7c9ac5d8449..37168c170b544b0ff9ac677459bc936b5d68169e 100644 (file)
@@ -37,7 +37,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     if len(args) == 0:
         raise cmdutil.UsageError
     bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
index 4ac71701c07c1210b042697daeb9bd74fd856b4a..5ff824ee67a88acc9a7685d9a49d675dcb5df0f9 100644 (file)
@@ -35,7 +35,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : True})
     if len(args) not in (1,2):
         raise cmdutil.UsageError
     bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
index 497ebf02b8a216c9f3a688ff671d0637b35fd75e..d14ff069a976b5da03ee4a53efa45b603bb13de9 100644 (file)
@@ -34,7 +34,8 @@ def execute(args, test=False):
     """
     parser = get_parser()
     options, args = parser.parse_args(args)
-    cmdutil.default_complete(options, args, parser)
+    cmdutil.default_complete(options, args, parser,
+                             bugid_args={0: lambda bug : bug.active==True})
     if len(args) not in (1, 2):
         raise cmdutil.UsageError
     bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
index 7f6e5ac6a3bef174b2b4abfaf3b9d5b4600d98bf..03826641f44e544c0e296c6ecc1adaf6dccdb6e9 100644 (file)
@@ -129,17 +129,37 @@ def option_value_pairs(options, parser):
         value = getattr(options, option)
         yield (option, value)
 
-def default_complete(options, args, parser):
+def default_complete(options, args, parser, bugid_args={}):
     """
     A dud complete implementation for becommands to that the
     --complete argument doesn't cause any problems.  Use this
     until you've set up a command-specific complete function.
+    
+    bugid_args is an optional dict where the keys are positional
+    arguments taking bug shortnames and the values are functions for
+    filtering, since that's a common enough operation.
+    e.g. for "be open [options] BUGID"
+    bugid_args = {0: lambda bug : bug.active == False}
     """
     for option,value in option_value_pairs(options, parser):
         if value == "--complete":
             raise cmdutil.GetCompletions()
-    if "--complete" in args:
-        raise cmdutil.GetCompletions()
+    for pos,value in enumerate(args):
+        if value == "--complete":
+            if pos in bugid_args:
+                filter = bugid_args[pos]
+                bugshortnames = []
+                try:
+                    bd = bugdir.BugDir(from_disk=True,
+                                       manipulate_encodings=False)
+                    bd.load_all_bugs()
+                    bugs = [bug for bug in bd if filter(bug) == True]
+                    bugshortnames = [bd.bug_shortname(bug) for bug in bugs]
+                except bugdir.NoBugDir:
+                    bugshortnames = ["NOBUGDIR"]
+                    pass
+                raise GetCompletions(bugshortnames)
+            raise GetCompletions()
 
 def underlined(instring):
     """Produces a version of a string that is underlined with '='