Created diff.subscriptions_from_string()
authorW. Trevor King <wking@drexel.edu>
Sat, 5 Dec 2009 09:11:39 +0000 (04:11 -0500)
committerW. Trevor King <wking@drexel.edu>
Sat, 5 Dec 2009 09:11:39 +0000 (04:11 -0500)
becommands/diff.py
libbe/diff.py

index 5a94462d7d739686c3edf242da99c8d9aab30eb7..e2ff052a9abed6fd4535713473fb29b8c55a1650 100644 (file)
@@ -63,17 +63,11 @@ def execute(args, manipulate_encodings=True, restrict_file_access=False):
         revision = args[0]
     if len(args) > 1:
         raise cmdutil.UsageError('Too many arguments.')
-    if options.subscribe == None:
-        subscriptions = [diff.Subscription(diff.BUGDIR_ID,
-                                           diff.BUGDIR_TYPE_ALL)]
-    else:
-        subscriptions = []
-        for subscription in options.subscribe.split(','):
-            fields = subscription.split(':')
-            if len(fields) != 2:
-                raise cmdutil.UsageError('Invalid subscription "%s", should be ID:TYPE')
-            id,type = fields
-            subscriptions.append(diff.Subscription(id, type))
+    try:
+        subscriptions = diff.subscriptions_from_string(
+            options.subscribe)
+    except ValueError, e:
+        raise cmdutil.UsageError(e.msg)
     bd = bugdir.BugDir(from_disk=True,
                        manipulate_encodings=manipulate_encodings)
     if bd.vcs.versioned == False:
index 3122fe8895353b5c5dcd82d7d213b01d92f598be..e947021b30ab9213a11688b07f5395c15870b3f5 100644 (file)
@@ -108,6 +108,29 @@ class Subscription (object):
     def __repr__(self):
         return "<Subscription: %s (%s)>" % (self.id, self.type)
 
+def subscriptions_from_string(string=None, subscription_sep=',', id_sep=':'):
+    """
+    >>> subscriptions_from_string(None)
+    [<Subscription: DIR (all)>]
+    >>> subscriptions_from_string('DIR:new,DIR:rem,ABC:all,XYZ:all')
+    [<Subscription: DIR (new)>, <Subscription: DIR (rem)>, <Subscription: ABC (all)>, <Subscription: XYZ (all)>]
+    >>> subscriptions_from_string('DIR::new')
+    Traceback (most recent call last):
+      ...
+    ValueError: Invalid subscription "DIR::new", should be ID:TYPE
+    """
+    if string == None:
+        return [Subscription(BUGDIR_ID, BUGDIR_TYPE_ALL)]
+    subscriptions = []
+    for subscription in string.split(','):
+        fields = subscription.split(':')
+        if len(fields) != 2:
+            raise ValueError('Invalid subscription "%s", should be ID:TYPE'
+                             % subscription)
+        id,type = fields
+        subscriptions.append(Subscription(id, type))
+    return subscriptions
+
 class DiffTree (tree.Tree):
     """
     A tree holding difference data for easy report generation.