At file:///data/jelmer/bzr-rebase/trunk/

------------------------------------------------------------
revno: 115
revision-id: [email protected]
parent: [email protected]
author: Robert Collins <[email protected]>
committer: Jelmer Vernooij <[email protected]>
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')


-- 
bazaar-commits mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/bazaar-commits

Reply via email to