[PATCH 7 of 7] mq: add --empty option to qdelete to remove empty patches
Idan Kamara
idankk86 at gmail.com
Tue May 24 11:26:13 CDT 2011
# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1306254023 -10800
# Node ID 025fd4d81b4ee30ecddf6d3fd04a3d556d03c1c2
# Parent c21a4febed3f70f2b84b2c8b8cf88ec8269b37ef
mq: add --empty option to qdelete to remove empty patches
diff -r c21a4febed3f -r 025fd4d81b4e hgext/mq.py
--- a/hgext/mq.py Tue May 24 19:17:22 2011 +0300
+++ b/hgext/mq.py Tue May 24 19:20:23 2011 +0300
@@ -731,7 +731,17 @@
break
return (err, n)
- def _cleanup(self, patches, numrevs, keep=False):
+ def _cleanup(self, patches, numrevs, keep=False, emptyonly=False):
+ if emptyonly:
+ def isempty(patchfile):
+ try:
+ ph = patchheader(self.join(patchfile), self.plainmode)
+ return not ph.haspatch
+ except IOError:
+ # don't delete failed to read files
+ return False
+ patches = [p for p in patches if isempty(p)]
+
if not keep:
r = self.qrepo()
if r:
@@ -797,8 +807,13 @@
def delete(self, repo, patches, opts):
if not patches and not opts.get('rev'):
- raise util.Abort(_('qdelete requires at least one revision or '
- 'patch name'))
+ if opts.get('empty'):
+ patches = self.series[self.series_end(True):]
+ if not patches:
+ return
+ else:
+ raise util.Abort(_('qdelete requires at least one revision or '
+ 'patch name or --empty'))
realpatches = []
for patch in patches:
@@ -822,7 +837,7 @@
realpatches += revpatches
numrevs = len(revpatches)
- self._cleanup(realpatches, numrevs, opts.get('keep'))
+ self._cleanup(realpatches, numrevs, opts.get('keep'), opts.get('empty'))
def check_toppatch(self, repo):
if self.applied:
@@ -1858,13 +1873,15 @@
@command("qdelete|qremove|qrm",
[('k', 'keep', None, _('keep patch file')),
('r', 'rev', [],
- _('stop managing a revision (DEPRECATED)'), _('REV'))],
- _('hg qdelete [-k] [PATCH]...'))
+ _('stop managing a revision (DEPRECATED)'), _('REV')),
+ ('', 'empty', False, _('delete only empty patches'))],
+ _('hg qdelete [-k] [--empty] [PATCH]...'))
def delete(ui, repo, *patches, **opts):
"""remove patches from queue
- The patches must not be applied, and at least one patch is required. With
- -k/--keep, the patch files are preserved in the patch directory.
+ The patches must not be applied, and at least one patch is required or
+ the --empty flag.
+ With -k/--keep, the patch files are preserved in the patch directory.
To stop managing a patch and move it into permanent history,
use the :hg:`qfinish` command."""
diff -r c21a4febed3f -r 025fd4d81b4e tests/test-mq-qdelete.t
--- a/tests/test-mq-qdelete.t Tue May 24 19:17:22 2011 +0300
+++ b/tests/test-mq-qdelete.t Tue May 24 19:20:23 2011 +0300
@@ -13,13 +13,118 @@
$ hg qnew -d '1 0' pc
$ hg qdel
- abort: qdelete requires at least one revision or patch name
+ abort: qdelete requires at least one revision or patch name or --empty
[255]
$ hg qdel pc
abort: cannot delete applied patch pc
[255]
+test --empty
+
+ $ hg qpop -a
+ popping pc
+ popping pb
+ popping pa
+ patch queue now empty
+
+all patches are empty, no applied patches
+
+ $ hg qser
+ pa
+ pb
+ pc
+ $ hg qdel --empty
+ $ hg qser
+
+with applied patches
+
+ $ hg qnew -d '1 0' pa
+ $ hg qnew -d '1 0' pb
+ $ hg qnew -d '1 0' pc
+ $ hg qpop pa
+ popping pc
+ popping pb
+ now at: pa
+ $ hg qser
+ pa
+ pb
+ pc
+ $ hg qdel --empty
+ $ hg qser
+ pa
+
+all patches are not empty
+
+ $ echo a >> base
+ $ hg qref
+ $ hg qnew -d '1 0' pb
+ $ echo b >> base
+ $ hg qref
+ $ hg qnew -d '1 0' pc
+ $ echo c >> base
+ $ hg qref
+ $ hg qpop -a
+ popping pc
+ popping pb
+ popping pa
+ patch queue now empty
+
+ $ hg qser
+ pa
+ pb
+ pc
+ $ hg qdel --empty
+ $ hg qser
+ pa
+ pb
+ pc
+
+one patch is empty
+
+ $ hg qpush pb
+ applying pa
+ applying pb
+ now at: pb
+ $ hg qref -
+ $ hg up -C
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg qref
+ $ hg qpop -a
+ popping pb
+ popping pa
+ patch queue now empty
+
+ $ hg qser
+ pa
+ pb
+ pc
+ $ hg qdel --empty
+ $ hg qser
+ pa
+ pc
+
+specific empty patch
+
+ $ hg qpush
+ applying pa
+ now at: pa
+ $ hg qnew -d '1 0' pb
+ $ hg qpop
+ popping pb
+ now at: pa
+ $ hg qdel --empty pb
+ $ hg qser
+ pa
+ pc
+ $ hg qpop -a
+ popping pa
+ patch queue now empty
+ $ hg qdel pa pc
+ $ hg qnew -d '1 0' pa
+ $ hg qnew -d '1 0' pb
+ $ hg qnew -d '1 0' pc
+
$ hg qpop
popping pc
now at: pb
More information about the Mercurial-devel
mailing list