Transitioned remove to Command-format
authorW. Trevor King <wking@drexel.edu>
Tue, 15 Dec 2009 02:29:48 +0000 (21:29 -0500)
committerW. Trevor King <wking@drexel.edu>
Tue, 15 Dec 2009 02:29:48 +0000 (21:29 -0500)
libbe/bugdir.py
libbe/command/remove.py

index aa4d9907559b7e657e7fa70234207206e169af11..5bb69e2c281619f0091aa52646293d3d1346b8ba 100644 (file)
@@ -266,8 +266,8 @@ class BugDir (list, settings_object.SavedSettingsObject):
 
     def bug_from_uuid(self, uuid):
         if not self.has_bug(uuid):
-            raise KeyError("No bug matches %s\n  bug map: %s\n  root: %s" \
-                               % (uuid, self._bug_map, self.root))
+            raise NoBugMatches('No bug matches %s\n  bug map: %s\n  repo: %s' \
+                               % (uuid, self._bug_map, self.storage))
         if self._bug_map[uuid] == None:
             self._load_bug(uuid)
         return self._bug_map[uuid]
index bac06c0ad42db1fe0326764a975f1301eebeb61f..e51644304158381b601e4e6525c2983611d8735b 100644 (file)
 # You should have received a copy of the GNU General Public License along
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-"""Remove (delete) a bug and its comments"""
-from libbe import cmdutil, bugdir
-__desc__ = __doc__
 
-def execute(args, manipulate_encodings=True, restrict_file_access=False,
-            dir="."):
-    """
-    >>> from libbe import mapfile
-    >>> import os
-    >>> bd = bugdir.SimpleBugDir()
-    >>> os.chdir(bd.root)
-    >>> print bd.bug_from_shortname("b").status
+import libbe
+import libbe.command
+import libbe.command.util
+
+
+class Remove (libbe.command.Command):
+    """Remove (delete) a bug and its comments
+
+    >>> import sys
+    >>> import libbe.bugdir
+    >>> bd = libbe.bugdir.SimpleBugDir(memory=False)
+    >>> cmd = Remove()
+    >>> cmd._setup_io = lambda i_enc,o_enc : None
+    >>> cmd.stdout = sys.stdout
+
+    >>> print bd.bug_from_uuid('b').status
     closed
-    >>> execute (["b"], manipulate_encodings=False)
-    Removed bug b
-    >>> bd._clear_bugs()
+    >>> ret = cmd.run(bd.storage, bd, args=['/b'])
+    Removed bug abc/b
+    >>> bd.flush_reload()
     >>> try:
-    ...     bd.bug_from_shortname("b")
-    ... except bugdir.NoBugMatches:
-    ...     print "Bug not found"
+    ...     bd.bug_from_uuid('b')
+    ... except libbe.bugdir.NoBugMatches:
+    ...     print 'Bug not found'
     Bug not found
     >>> bd.cleanup()
     """
-    parser = get_parser()
-    options, args = parser.parse_args(args)
-    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=manipulate_encodings,
-                       root=dir)
-    bug = cmdutil.bug_from_id(bd, args[0])
-    bd.remove_bug(bug)
-    print "Removed bug %s" % bug.uuid
+    name = 'remove'
 
-def get_parser():
-    parser = cmdutil.CmdOptionParser("be remove BUG-ID")
-    return parser
+    def __init__(self, *args, **kwargs):
+        libbe.command.Command.__init__(self, *args, **kwargs)
+        self.requires_bugdir = True
+        self.args.extend([
+                libbe.command.Argument(
+                    name='bug-id', metavar='BUG-ID', default=None,
+                    repeatable=True,
+                    completion_callback=libbe.command.util.complete_bug_id),
+                ])
 
-longhelp="""
-Remove (delete) an existing bug.  Use with caution: if you're not using a
-revision control system, there may be no way to recover the lost information.
-You should use this command, for example, to get rid of blank or otherwise 
-mangled bugs.
-"""
+    def _run(self, storage, bugdir, **params):
+        user_ids = []
+        for bug_id in params['bug-id']:
+            bug,dummy_comment = libbe.command.util.bug_comment_from_user_id(
+                bugdir, bug_id)
+            user_ids.append(bug.id.user())
+            bugdir.remove_bug(bug)
+        if len(user_ids) == 1:
+            print >> self.stdout, 'Removed bug %s' % user_ids[0]
+        else:
+            print >> self.stdout, 'Removed bugs %s' % ', '.join(user_ids)
+        return 0
 
-def help():
-    return get_parser().help_str() + longhelp
+    def _long_help(self):
+        return """
+Remove (delete) existing bugs.  Use with caution: if you're not using
+a revision control system, there may be no way to recover the lost
+information.  You should use this command, for example, to get rid of
+blank or otherwise mangled bugs.
+"""