Rev 115: Fix rebasing of merge commits. in file:///data/jelmer/bzr-rebase/trunk/
Jelmer Vernooij
jelmer at samba.org
Fri Jan 16 21:17:32 GMT 2009
At file:///data/jelmer/bzr-rebase/trunk/
------------------------------------------------------------
revno: 115
revision-id: jelmer at samba.org-20090116211731-rewnlk06mzzyq1b4
parent: jelmer at samba.org-20081208203251-vjastxd191b2hr13
author: Robert Collins <robertc at robertcollins.net>
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Fri 2009-01-16 22:17:31 +0100
message:
Fix rebasing of merge commits.
modified:
NEWS news-20070721005510-kbjm9yxqoeczq9fl-1
rebase.py rebase.py-20070626221123-ellanmf93nw8z9r1-1
test_blackbox.py test_blackbox.py-20070709202607-dyvt95dfu09tuv6a-1
=== modified file 'NEWS'
--- a/NEWS 2008-11-18 00:23:44 +0000
+++ b/NEWS 2009-01-16 21:17:31 +0000
@@ -1,5 +1,10 @@
0.4.3 UNRELEASED
+ BUG FIXES
+
+ * rebasing of merges was discarding the merged parents.
+ (Robert Collins, #266897)
+
0.4.2 2008-11-18
FEATURES
=== modified file 'rebase.py'
--- a/rebase.py 2008-08-31 20:30:21 +0000
+++ b/rebase.py 2009-01-16 21:17:31 +0000
@@ -178,7 +178,7 @@
if len(oldparents) > 1:
additional_parents = heads_cache.heads(oldparents[1:])
parents = [new_parent]
- for parent in parents:
+ for parent in oldparents:
if parent in additional_parents and parent not in parents:
# Use as a parent
parent = replace_map.get(parent, (parent,))[0]
=== modified file 'test_blackbox.py'
--- a/test_blackbox.py 2008-09-01 17:51:22 +0000
+++ b/test_blackbox.py 2009-01-16 21:17:31 +0000
@@ -237,27 +237,48 @@
self.run_bzr('commit -m merge')
self.run_bzr('rebase')
-class ReplayTests(ExternalBase):
- def test_replay(self):
- os.mkdir('main')
- os.chdir('main')
- self.run_bzr('init')
- open('bar', 'w').write('42')
- self.run_bzr('add')
- self.run_bzr('commit -m that')
- os.mkdir('../feature')
- os.chdir('../feature')
- self.run_bzr('init')
- branch = Branch.open('.')
- open('hello', 'w').write("my data")
- self.run_bzr('add')
- self.run_bzr('commit -m this')
- self.assertEquals(1, len(branch.revision_history()))
- self.run_bzr('replay -r1 ../main')
- self.assertEquals(2, len(branch.revision_history()))
- self.assertTrue(os.path.exists('bar'))
+ def test_always_rebase_merges(self):
+ trunk = self.make_branch_and_tree('trunk')
+ trunk.commit('base')
+ feature2 = trunk.bzrdir.sprout('feature2').open_workingtree()
+ revid2 = feature2.commit('change')
+ feature = trunk.bzrdir.sprout('feature').open_workingtree()
+ feature.commit('change')
+ feature.merge_from_branch(feature2.branch)
+ feature.commit('merge')
+ feature.commit('change2')
+ trunk.commit('additional upstream change')
+ self.run_bzr('rebase --always-rebase-merges ../trunk', working_dir='feature')
+ # second revision back should be a merge of feature2
+ repo = feature.branch.repository
+ repo.lock_read()
+ self.addCleanup(repo.unlock)
+ tip = feature.last_revision()
+ merge_id = repo.get_graph().get_parent_map([tip])[tip][0]
+ merge_parents = repo.get_graph().get_parent_map([merge_id])[merge_id]
+ self.assertEqual(revid2, merge_parents[1])
+
+ def test_rebase_merge(self):
+ trunk = self.make_branch_and_tree('trunk')
+ trunk.commit('base')
+ feature2 = trunk.bzrdir.sprout('feature2').open_workingtree()
+ revid2 = feature2.commit('change')
+ feature = trunk.bzrdir.sprout('feature').open_workingtree()
+ feature.commit('change')
+ feature.merge_from_branch(feature2.branch)
+ feature.commit('merge')
+ feature.commit('change2')
+ trunk.commit('additional upstream change')
+ self.run_bzr('rebase ../trunk', working_dir='feature')
+ # second revision back should be a merge of feature2
+ repo = feature.branch.repository
+ repo.lock_read()
+ self.addCleanup(repo.unlock)
+ tip = feature.last_revision()
+ merge_id = repo.get_graph().get_parent_map([tip])[tip][0]
+ merge_parents = repo.get_graph().get_parent_map([merge_id])[merge_id]
+ self.assertEqual(revid2, merge_parents[1])
-class ReplayTests(ExternalBase):
def test_replay(self):
os.mkdir('main')
os.chdir('main')
More information about the bazaar-commits
mailing list