mq: make qprev return the previous applied patch (issue3245)
The current behaviour is to return the previous one in the series but at the
same time the implementation is buggy because it does not take guarded patches
in account.
--- a/hgext/mq.py Fri Feb 03 19:38:31 2012 +0100
+++ b/hgext/mq.py Fri Feb 03 19:47:09 2012 +0100
@@ -2217,7 +2217,7 @@
@command("qprev", seriesopts, _('hg qprev [-s]'))
def prev(ui, repo, **opts):
- """print the name of the previous patch
+ """print the name of the previous applied patch
Returns 0 on success."""
q = repo.mq
@@ -2228,7 +2228,8 @@
if not l:
ui.write(_("no patches applied\n"))
return 1
- q.qseries(repo, start=l - 2, length=1, status='A',
+ idx = q.series.index(q.applied[-2].name)
+ q.qseries(repo, start=idx, length=1, status='A',
summary=opts.get('summary'))
def setupheaderopts(ui, opts):
--- a/tests/test-mq-guards.t Fri Feb 03 19:38:31 2012 +0100
+++ b/tests/test-mq-guards.t Fri Feb 03 19:47:09 2012 +0100
@@ -172,6 +172,8 @@
$ hg qpush -a
applying c.patch
now at: c.patch
+ $ hg qprev
+ b.patch
Used to be an issue with holes in the patch sequence
So, put one hole on the base and ask for topmost patch.
--- a/tests/test-mq.t Fri Feb 03 19:38:31 2012 +0100
+++ b/tests/test-mq.t Fri Feb 03 19:47:09 2012 +0100
@@ -74,7 +74,7 @@
qnew create a new patch
qnext print the name of the next pushable patch
qpop pop the current patch off the stack
- qprev print the name of the previous patch
+ qprev print the name of the previous applied patch
qpush push the next patch onto the stack
qqueue manage multiple patch queues
qrefresh update the current patch