diff --git a/hgext/mq.py b/hgext/mq.py index ac31d87608d63de58682b0fed4e4fb5b9fde5918_aGdleHQvbXEucHk=..c89379d47e959804e03f349ec5b3fb6b2eaf2d3b_aGdleHQvbXEucHk= 100644 --- a/hgext/mq.py +++ b/hgext/mq.py @@ -3026,7 +3026,7 @@ if i == 0: q.pop(repo, all=True) else: - q.pop(repo, str(i - 1)) + q.pop(repo, q.applied[i - 1].name) break if popped: try: diff --git a/tests/test-mq-guards.t b/tests/test-mq-guards.t index ac31d87608d63de58682b0fed4e4fb5b9fde5918_dGVzdHMvdGVzdC1tcS1ndWFyZHMudA==..c89379d47e959804e03f349ec5b3fb6b2eaf2d3b_dGVzdHMvdGVzdC1tcS1ndWFyZHMudA== 100644 --- a/tests/test-mq-guards.t +++ b/tests/test-mq-guards.t @@ -541,3 +541,28 @@ guards deactivated $ hg qselect not-new not-c not-d number of guarded, applied patches has changed from 0 to 1 + +test that "qselect --reapply" reapplies patches successfully when the +already applied patch becomes unguarded and it follows the already +guarded (= not yet applied) one. + + $ hg qpop -q -a + patch queue now empty + $ hg qselect not-new not-c + number of unguarded, unapplied patches has changed from 1 to 2 + $ hg qpush -q -a + patch d.patch is empty + now at: b.patch + $ hg qapplied -v + 0 G new.patch + 1 G c.patch + 2 A d.patch + 3 A b.patch + $ hg qselect -q --reapply not-c not-b + now at: d.patch + cannot push 'b.patch' - guarded by '-not-b' + $ hg qseries -v + 0 U new.patch + 1 G c.patch + 2 A d.patch + 3 G b.patch