At bzr+ssh://bazaar.launchpad.net/~lifeless/bzr-rebase/dev
------------------------------------------------------------
revno: 116
revision-id: [email protected]
parent: [email protected]
committer: Robert Collins <[email protected]>
branch nick: dev
timestamp: Fri 2009-01-16 12:07:11 +1100
message:
Fix rebasing of merge commits.
=== modified file 'NEWS'
--- a/NEWS 2009-01-15 06:07:29 +0000
+++ b/NEWS 2009-01-16 01:07:11 +0000
@@ -5,6 +5,11 @@
* --new-nick to replay and rebase will recreate the nick for revisions that
are rewritten. (Robert Collins)
+ 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 2009-01-15 06:07:29 +0000
+++ b/rebase.py 2009-01-16 01:07:11 +0000
@@ -179,7 +179,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 2009-01-15 06:07:29 +0000
+++ b/test_blackbox.py 2009-01-16 01:07:11 +0000
@@ -246,6 +246,48 @@
self.run_bzr('rebase --new-nick ../main', working_dir='other')
rev = other.branch.repository.get_revision(other.last_revision())
self.assertEqual('other', rev.properties['branch-nick'])
+
+ 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):
--
bazaar-commits mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/bazaar-commits