changeset 11967:6e3875a80533

mq/qqueue: add --purge option to delete a queue and its patch dir qqueue --delete only deletes the reference to the queue, and leaves the associated patch directory behind. There is no Mercurial-way of getting rid of that patch directory afterward. This patch adds the --purge option to qqueue, that deletes the queue from the list, and also removes the associated patch dir. If the queue was non-existant, but the patch dir was, it is removed nonetheless. This is to avoid manual intervention in the .hg directory.
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
date Wed, 18 Aug 2010 23:37:19 +0200
parents 22f1994fb669
children 66521d25c2a6
files hgext/mq.py tests/test-mq-qqueue tests/test-mq-qqueue.out
diffstat 3 files changed, 34 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/mq.py	Wed Aug 18 23:34:28 2010 +0200
+++ b/hgext/mq.py	Wed Aug 18 23:37:19 2010 +0200
@@ -47,7 +47,7 @@
 from mercurial.lock import release
 from mercurial import commands, cmdutil, hg, patch, util
 from mercurial import repair, extensions, url, error
-import os, sys, re, errno
+import os, sys, re, errno, shutil
 
 commands.norepo += " qclone"
 
@@ -2762,6 +2762,12 @@
         _setactivenocheck(name)
     elif opts.get('delete'):
         _delete(name)
+    elif opts.get('purge'):
+        if name in existing:
+            _delete(name)
+        qdir = _queuedir(name)
+        if os.path.exists(qdir):
+            shutil.rmtree(qdir)
     else:
         if name not in existing:
             raise util.Abort(_('use --create to create a new queue'))
@@ -3089,6 +3095,7 @@
              ('c', 'create', False, _('create new queue')),
              ('', 'rename', False, _('rename active queue')),
              ('', 'delete', False, _('delete reference to queue')),
+             ('', 'purge', False, _('delete queue, and remove patch dir')),
          ],
          _('[OPTION] [QUEUE]')),
 }
--- a/tests/test-mq-qqueue	Wed Aug 18 23:34:28 2010 +0200
+++ b/tests/test-mq-qqueue	Wed Aug 18 23:37:19 2010 +0200
@@ -54,6 +54,21 @@
 hg qqueue --delete buz
 hg qqueue
 
+echo %% create queue for purge
+hg qqueue --create purge-me
+hg qqueue
+
+echo %% create patch for purge
+hg qnew patch-purge-me
+ls -1d .hg/patches-purge-me 2>/dev/null || true
+hg qpop -a
+
+echo %% purge queue
+hg qqueue foo
+hg qqueue --purge purge-me
+hg qqueue
+ls -1d .hg/patches-purge-me 2>/dev/null || true
+
 echo %% unapplied patches
 hg qun
 echo c > a
--- a/tests/test-mq-qqueue.out	Wed Aug 18 23:34:28 2010 +0200
+++ b/tests/test-mq-qqueue.out	Wed Aug 18 23:37:19 2010 +0200
@@ -34,6 +34,17 @@
 %% switch back to previous queue
 foo (active)
 patches
+%% create queue for purge
+foo
+patches
+purge-me (active)
+%% create patch for purge
+.hg/patches-purge-me
+popping patch-purge-me
+patch queue now empty
+%% purge queue
+foo (active)
+patches
 %% unapplied patches
 %% fail switching back
 abort: patches applied - cannot set new queue active