fix bug in prepush logic involving merge changesets stable
authorSune Foldager <cryo@cyanite.org>
Mon, 30 Nov 2009 14:58:52 +0100
branchstable
changeset 9954 d6a307719ccb
parent 9952 5b149c88d9e8
child 9955 7bcbdefcd93a
child 9956 6045a8c4dbbc
fix bug in prepush logic involving merge changesets When creating new branches and merging them into existing ones, you would sometimes be able to push some changesets (the existing branches) without using --force, even when that creates a new head on the remote. A test which triggers the error has been added.
mercurial/localrepo.py
tests/test-push-warn
tests/test-push-warn.out
--- a/mercurial/localrepo.py	Sat Nov 28 23:44:18 2009 +0100
+++ b/mercurial/localrepo.py	Mon Nov 30 14:58:52 2009 +0100
@@ -1505,7 +1505,7 @@
                 if not rheads: # new branch requires --force
                     self.ui.warn(_("abort: push creates new"
                                    " remote branch '%s'!\n") %
-                                   self[updatelb[0]].branch())
+                                   self[lheads[0]].branch())
                 else:
                     self.ui.warn(_("abort: push creates new remote heads!\n"))
 
@@ -1548,11 +1548,7 @@
                         else:
                             rheads = []
                         lheads = localhds[lh]
-                        updatelb = [upd for upd in update
-                                    if self[upd].branch() == lh]
-                        if not updatelb:
-                            continue
-                        if not checkbranch(lheads, rheads, updatelb):
+                        if not checkbranch(lheads, rheads, update):
                             return None, 0
                 else:
                     if not checkbranch(heads, remote_heads, update):
--- a/tests/test-push-warn	Sat Nov 28 23:44:18 2009 +0100
+++ b/tests/test-push-warn	Mon Nov 30 14:58:52 2009 +0100
@@ -140,4 +140,21 @@
 hg -R i push h
 echo
 
+echo % check prepush logic with merged branches
+hg init j
+hg -R j branch a
+echo init > j/foo
+hg -R j ci -Am init
+hg clone j k
+echo a1 > j/foo
+hg -R j ci -m a1
+hg -R k branch b
+echo b > k/foo
+hg -R k ci -m b
+hg -R k up 0
+hg -R k merge b
+hg -R k ci -m merge
+hg -R k push -r a j
+echo
+
 exit 0
--- a/tests/test-push-warn.out	Sat Nov 28 23:44:18 2009 +0100
+++ b/tests/test-push-warn.out	Mon Nov 30 14:58:52 2009 +0100
@@ -140,3 +140,17 @@
 abort: push creates new remote heads!
 (did you forget to merge? use push -f to force)
 
+% check prepush logic with merged branches
+marked working directory as branch a
+adding foo
+updating to branch a
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+marked working directory as branch b
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+pushing to j
+searching for changes
+abort: push creates new remote heads!
+(did you forget to merge? use push -f to force)
+