[PATCH resend] rebase: always check if rebasing onto an applied mq patch

Greg Ward greg-hg at gerg.ca
Fri Mar 5 08:17:21 CST 2010


# HG changeset patch
# User Greg Ward <greg-hg at gerg.ca>
# Date 1267560523 18000
# Branch stable
# Node ID 8be69abcae7dd5151d72ab17d590bb970bd6ce1b
# Parent  5faf3566c96dbfdfcf5b817d9ebeb956602fce8a
rebase: always check if rebasing onto an applied mq patch.

Previously, it only checked for an mq patch if the user explicitly
passed -d/--dest.  But rebasing onto an mq patch is a bad idea
regardless of how we determine the rebase destination.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -409,11 +409,15 @@
         branch = repo[None].branch()
         dest = repo[branch].rev()
     else:
-        if 'qtip' in repo.tags() and (repo[dest].hex() in
-                                [s.rev for s in repo.mq.applied]):
-            raise util.Abort(_('cannot rebase onto an applied mq patch'))
         dest = repo[dest].rev()
 
+    # This check isn't strictly necessary, since mq detects commits over an
+    # applied patch. But it prevents messing up the working directory when
+    # a partially completed rebase is blocked by mq.
+    if 'qtip' in repo.tags() and (repo[dest].hex() in
+                            [s.rev for s in repo.mq.applied]):
+        raise util.Abort(_('cannot rebase onto an applied mq patch'))
+
     if src:
         commonbase = repo[src].ancestor(repo[dest])
         if commonbase == repo[src]:
diff --git a/tests/test-rebase-mq b/tests/test-rebase-mq
--- a/tests/test-rebase-mq
+++ b/tests/test-rebase-mq
@@ -45,6 +45,12 @@
 hg rebase -s 1 -d 3
 
 echo
+echo '% Rebase - same thing, but mq patch is default dest'
+hg update -q 1
+hg rebase
+hg update -q qtip
+
+echo
 echo '% Rebase - generate a conflict'
 hg rebase -s 2 -d 1
 
diff --git a/tests/test-rebase-mq.out b/tests/test-rebase-mq.out
--- a/tests/test-rebase-mq.out
+++ b/tests/test-rebase-mq.out
@@ -11,6 +11,9 @@
 % Rebase - try to rebase on an applied mq patch
 abort: cannot rebase onto an applied mq patch
 
+% Rebase - same thing, but mq patch is default dest
+abort: cannot rebase onto an applied mq patch
+
 % Rebase - generate a conflict
 merging f
 warning: conflicts during merge.


More information about the Mercurial-devel mailing list