changeset 11271:d1aca0863a9d

mq: prevent the creation of a queue whose name is already taken Each check is moved under the code handling the relevant option, and a new one is added for --create. This fixes duplicated entries being added to the queues list.
author Cédric Duval <cedricduval@free.fr>
date Thu, 03 Jun 2010 20:40:23 +0200
parents 457813cb3024
children e8a66a40474d
files hgext/mq.py tests/test-mq-qqueue tests/test-mq-qqueue.out
diffstat 3 files changed, 15 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/mq.py	Wed Jun 02 19:39:45 2010 +0200
+++ b/hgext/mq.py	Thu Jun 03 20:40:23 2010 +0200
@@ -2633,17 +2633,17 @@
 
     existing = _getqueues()
 
-    if name not in existing and opts.get('delete'):
-        raise util.Abort(_('cannot delete queue that does not exist'))
-    elif name not in existing and not opts.get('create'):
-        raise util.Abort(_('use --create to create a new queue'))
-
     if opts.get('create'):
+        if name in existing:
+            raise util.Abort(_('queue "%s" already exists') % name)
         if _noqueues():
             _addqueue(_defaultqueue)
         _addqueue(name)
         _setactive(name)
     elif opts.get('delete'):
+        if name not in existing:
+            raise util.Abort(_('cannot delete queue that does not exist'))
+
         current = _getcurrent()
 
         if name == current:
@@ -2657,6 +2657,8 @@
         fh.close()
         util.rename(repo.join('patches.queues.new'), repo.join(_allqueues))
     else:
+        if name not in existing:
+            raise util.Abort(_('use --create to create a new queue'))
         _setactive(name)
 
 def reposetup(ui, repo):
--- a/tests/test-mq-qqueue	Wed Jun 02 19:39:45 2010 +0200
+++ b/tests/test-mq-qqueue	Thu Jun 03 20:40:23 2010 +0200
@@ -28,6 +28,10 @@
 hg qqueue foo
 hg qqueue
 
+echo %% fail creating queue with already existing name
+hg qqueue --create foo
+hg qqueue
+
 echo %% unapplied patches
 hg qun
 echo c > a
--- a/tests/test-mq-qqueue.out	Wed Jun 02 19:39:45 2010 +0200
+++ b/tests/test-mq-qqueue.out	Thu Jun 03 20:40:23 2010 +0200
@@ -12,6 +12,10 @@
 %% switch queue
 foo (active)
 patches
+%% fail creating queue with already existing name
+abort: queue "foo" already exists
+foo (active)
+patches
 %% unapplied patches
 %% fail switching back
 abort: patches applied - cannot set new queue active