changeset 39764:78ee63c77bb3

bookmarks: refactor option checking to pick one from --delete/rename/active
author Yuya Nishihara <yuya@tcha.org>
date Sat, 15 Sep 2018 12:04:29 +0900
parents 81d1c963e94a
children 2b91805e34c7
files mercurial/commands.py
diffstat 1 files changed, 19 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Sat Sep 15 11:51:15 2018 +0900
+++ b/mercurial/commands.py	Sat Sep 15 12:04:29 2018 +0900
@@ -961,36 +961,33 @@
     opts = pycompat.byteskwargs(opts)
     force = opts.get('force')
     rev = opts.get('rev')
-    delete = opts.get('delete')
     rename = opts.get('rename')
     inactive = opts.get('inactive')
-    active = opts.get('active')
-
-    if delete and rename:
-        raise error.Abort(_("--delete and --rename are incompatible"))
-    if delete and rev:
-        raise error.Abort(_("--rev is incompatible with --delete"))
-    if rename and rev:
-        raise error.Abort(_("--rev is incompatible with --rename"))
-    if delete and active:
-        raise error.Abort(_("--delete is incompatible with --active"))
-    if rev and active:
-        raise error.Abort(_("--rev is incompatible with --active"))
-    if rename and active:
-        raise error.Abort(_("--rename is incompatible with --active"))
-    if names and active:
+
+    selactions = [k for k in ['delete', 'rename', 'active'] if opts.get(k)]
+    if len(selactions) > 1:
+        raise error.Abort(_('--%s and --%s are incompatible')
+                          % tuple(selactions[:2]))
+    if selactions:
+        action = selactions[0]
+    else:
+        action = None
+
+    if rev and action in {'delete', 'rename', 'active'}:
+        raise error.Abort(_("--rev is incompatible with --%s") % action)
+    if names and action == 'active':
         raise error.Abort(_("NAMES is incompatible with --active"))
-    if inactive and active:
+    if inactive and action == 'active':
         raise error.Abort(_("--inactive is incompatible with --active"))
-    if not names and (delete or rev):
+    if not names and (action == 'delete' or rev):
         raise error.Abort(_("bookmark name required"))
 
-    if delete or rename or names or inactive:
+    if action in {'delete', 'rename'} or names or inactive:
         with repo.wlock(), repo.lock(), repo.transaction('bookmark') as tr:
-            if delete:
+            if action == 'delete':
                 names = pycompat.maplist(repo._bookmarks.expandname, names)
                 bookmarks.delete(repo, tr, names)
-            elif rename:
+            elif action == 'rename':
                 if not names:
                     raise error.Abort(_("new bookmark name required"))
                 elif len(names) > 1:
@@ -1006,7 +1003,7 @@
                     ui.status(_("no active bookmark\n"))
                 else:
                     bookmarks.deactivate(repo)
-    elif active:
+    elif action == 'active':
         book = repo._activebookmark
         if book is None:
             return 1