mq: cleanup status if applied mq is stripped (issue1881)
stripping of applied mq patches leads to wrong state recorded in status
file. find all mq patches that will be affected and clean up status file
before strip.
--- a/hgext/mq.py Tue Jul 20 18:29:00 2010 +0900
+++ b/hgext/mq.py Tue Jul 20 20:37:29 2010 +0530
@@ -2418,6 +2418,18 @@
elif rev not in (cl.ancestor(p[0], rev), cl.ancestor(p[1], rev)):
update = False
+ q = repo.mq
+ if q.applied:
+ if rev == cl.ancestor(repo.lookup('qtip'), rev):
+ q.applied_dirty = True
+ start = 0
+ end = len(q.applied)
+ applied_list = [i.node for i in q.applied]
+ if rev in applied_list:
+ start = applied_list.index(rev)
+ del q.applied[start:end]
+ q.save_dirty()
+
repo.mq.strip(repo, rev, backup=backup, update=update, force=opts['force'])
return 0
--- a/tests/test-mq-strip Tue Jul 20 18:29:00 2010 +0900
+++ b/tests/test-mq-strip Tue Jul 20 20:37:29 2010 +0530
@@ -53,3 +53,19 @@
hg strip 4 2>&1 | hidebackup
echo % after strip of merge parent
hg parents
+
+#strip of applied mq should cleanup status file
+hg up -C 3
+echo fooagain >> bar
+hg ci -mf
+hg qimport -r tip:2
+echo % applied patches before strip
+hg qapplied
+echo % stripping revision in queue
+hg strip 3 | hidebackup
+echo % applied patches after stripping rev in queue
+hg qapplied
+echo % stripping ancestor of queue
+hg strip 1 | hidebackup
+echo % applied patches after stripping ancestor of queue
+hg qapplied
--- a/tests/test-mq-strip.out Tue Jul 20 18:29:00 2010 +0900
+++ b/tests/test-mq-strip.out Tue Jul 20 20:37:29 2010 +0530
@@ -165,3 +165,17 @@
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% applied patches before strip
+2.diff
+3.diff
+4.diff
+% stripping revision in queue
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+saved backup bundle to
+% applied patches after stripping rev in queue
+2.diff
+% stripping ancestor of queue
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+saved backup bundle to
+% applied patches after stripping ancestor of queue
--- a/tests/test-mq.out Tue Jul 20 18:29:00 2010 +0900
+++ b/tests/test-mq.out Tue Jul 20 20:37:29 2010 +0530
@@ -400,15 +400,13 @@
popping bar
now at: foo
changeset: 0:cb9a9f314b8b
-mq status file refers to unknown node
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
-mq status file refers to unknown node
default 0:cb9a9f314b8b
-abort: trying to pop unknown node
+no patches applied
new file
diff --git a/new b/new