changeset 21851:aad28ff87788

shelve: refactor option combination check to easily add new ones Before this patch, the name of a newly added option had to be added into each string that was passed to the "checkopt()" internal function: these are white-space-separated list of un-acceptable option names (= "black list" for the specified "opt"). This new option had to be added into multiple strings because each option could belong to only one action of "create", "cleanup", "delete" or "list". In addition to this redundancy, each string passed to "checkopt()" was already too long to include a new one. This patch refactors option combination check to make it easier to add a new option in a subsequent patch. New "checkopt()" only takes one action ("cleanup", "delete" or "list"), and checks whether all explicitly activated options are allowed for it or not (if specified action is activated in "opts"). The "date" entry is listed in "allowables", but commented out, because: - "date" shouldn't be checked for test checking "date" causes unexpected failure of "test-shelve.t", because "run-test.py" puts "[default] shelve = --date '0 0'" into hgrc. - explicitly listing it can advertise that ignoring it is intentional This patch doesn't choose "white list" for the specified "opt", to avoid treating global options.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Fri, 20 Jun 2014 16:15:38 +0900
parents 3b97a93dc137
children 37a5decc6924
files hgext/shelve.py
diffstat 1 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/shelve.py	Wed Jul 09 12:30:12 2014 -0500
+++ b/hgext/shelve.py	Fri Jun 20 16:15:38 2014 +0900
@@ -675,20 +675,31 @@
     '''
     cmdutil.checkunfinished(repo)
 
-    def checkopt(opt, incompatible):
+    allowables = [
+        ('addremove', 'create'), # 'create' is pseudo action
+        ('cleanup', 'cleanup'),
+#       ('date', 'create'), # ignored for passing '--date "0 0"' in tests
+        ('delete', 'delete'),
+        ('list', 'list'),
+        ('message', 'create'),
+        ('name', 'create'),
+        ('patch', 'list'),
+        ('stat', 'list'),
+    ]
+    def checkopt(opt):
         if opts[opt]:
-            for i in incompatible.split():
-                if opts[i]:
+            for i, allowable in allowables:
+                if opts[i] and opt != allowable:
                     raise util.Abort(_("options '--%s' and '--%s' may not be "
                                        "used together") % (opt, i))
             return True
-    if checkopt('cleanup', 'addremove delete list message name patch stat'):
+    if checkopt('cleanup'):
         if pats:
             raise util.Abort(_("cannot specify names when using '--cleanup'"))
         return cleanupcmd(ui, repo)
-    elif checkopt('delete', 'addremove cleanup list message name patch stat'):
+    elif checkopt('delete'):
         return deletecmd(ui, repo, pats)
-    elif checkopt('list', 'addremove cleanup delete message name'):
+    elif checkopt('list'):
         return listcmd(ui, repo, pats, opts)
     else:
         for i in ('patch', 'stat'):