[PATCH 1 of 1] mq/qqueue: enable renaming of active queue

Yann E. MORIN yann.morin.1998 at anciens.enib.fr
Sun Aug 15 06:35:27 CDT 2010


# HG changeset patch
# User "Yann E. MORIN" <yann.morin.1998 at anciens.enib.fr>
# Date 1281871786 -7200
# Node ID 3758fc5a62fd59526cf034829e1bfa8fe361bb4f
# Parent  7fa36341e7a01a637f397673a11d09241cda8c7a
mq/qqueue: enable renaming of active queue

Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at anciens.enib.fr>

diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -2702,6 +2702,45 @@
             _addqueue(_defaultqueue)
         _addqueue(name)
         _setactive(name)
+    elif opts.get('rename'):
+        current = _getcurrent()
+        if name == current:
+            raise util.Abort(_('can\'t rename "%s" to its current name') % name)
+        if name in existing:
+            raise util.Abort(_('queue "%s" already exists') % name)
+
+        if current == 'patches':
+            olddir = repo.join('patches')
+        else:
+            olddir = repo.join('patches-' + current)
+
+        if name == 'patches':
+            newdir = repo.join('patches')
+        else:
+            newdir = repo.join('patches-' + name)
+
+        try:
+            stats = os.stat(newdir)
+            raise util.Abort(_('existing patch directory for queue "%s"') % name)
+        except OSError:
+            pass
+
+        fh = repo.opener('patches.queues.new', 'w')
+        for queue in existing:
+            if queue == current:
+                fh.write('%s\n' % (name,))
+                try:
+                    os.rename(olddir, newdir)
+                except OSError:
+                    pass
+            else:
+                fh.write('%s\n' % (queue,))
+        fh.close()
+        util.rename(repo.join('patches.queues.new'), repo.join(_allqueues))
+        fh = repo.opener(_activequeue, 'w')
+        if name != 'patches':
+            fh.write(name)
+        fh.close()
     elif opts.get('delete'):
         if name not in existing:
             raise util.Abort(_('cannot delete queue that does not exist'))
@@ -3043,6 +3082,7 @@
          [
              ('l', 'list', False, _('list all available queues')),
              ('c', 'create', False, _('create new queue')),
+             ('', 'rename', False, _('rename active queue')),
              ('', 'delete', False, _('delete reference to queue')),
          ],
          _('[OPTION] [QUEUE]')),
diff --git a/tests/test-mq-qqueue b/tests/test-mq-qqueue
--- a/tests/test-mq-qqueue
+++ b/tests/test-mq-qqueue
@@ -35,6 +35,25 @@
 hg qqueue --create foo
 hg qqueue
 
+echo %% create new queue for rename
+hg qqueue --create bar
+hg qqueue
+
+echo %% rename queue, same name
+hg qqueue --rename bar
+
+echo %% rename queue to existing
+hg qqueue --rename foo
+
+echo %% rename queue
+hg qqueue --rename buz
+hg qqueue
+
+echo %% switch back to previous queue
+hg qqueue foo
+hg qqueue --delete buz
+hg qqueue
+
 echo %% unapplied patches
 hg qun
 echo c > a
diff --git a/tests/test-mq-qqueue.out b/tests/test-mq-qqueue.out
--- a/tests/test-mq-qqueue.out
+++ b/tests/test-mq-qqueue.out
@@ -19,6 +19,21 @@
 abort: queue "foo" already exists
 foo (active)
 patches
+%% create new queue for rename
+bar (active)
+foo
+patches
+%% rename queue, same name
+abort: can't rename "bar" to its current name
+%% rename queue to existing
+abort: queue "foo" already exists
+%% rename queue
+buz (active)
+foo
+patches
+%% switch back to previous queue
+foo (active)
+patches
 %% unapplied patches
 %% fail switching back
 abort: patches applied - cannot set new queue active


More information about the Mercurial-devel mailing list