~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_merge.py

  • Committer: John Arbash Meinel
  • Date: 2006-10-11 00:23:23 UTC
  • mfrom: (2070 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2071.
  • Revision ID: john@arbash-meinel.com-20061011002323-82ba88c293d7caff
[merge] bzr.dev 2070

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
from bzrlib.branch import Branch
25
25
from bzrlib.bzrdir import BzrDir
26
26
from bzrlib.conflicts import ConflictList
27
 
from bzrlib.delta import compare_trees
28
27
from bzrlib.osutils import abspath
29
28
from bzrlib.tests.blackbox import ExternalBase
30
29
import bzrlib.urlutils as urlutils
53
52
        os.mkdir('a')
54
53
        os.chdir('a')
55
54
        self.example_branch()
 
55
        ancestor = Branch.open('.').revno()
56
56
        os.chdir('..')
57
57
        self.runbzr('branch a b')
58
58
        os.chdir('b')
63
63
        file('hello', 'wt').write('quuux')
64
64
        # We can't merge when there are in-tree changes
65
65
        self.runbzr('merge ../b', retcode=3)
66
 
        self.runbzr(['commit', '-m', "Like an epidemic of u's"])
 
66
        a = WorkingTree.open('.')
 
67
        a_tip = a.commit("Like an epidemic of u's")
67
68
        self.runbzr('merge ../b -r last:1..last:1 --merge-type blooof',
68
69
                    retcode=3)
69
70
        self.runbzr('merge ../b -r last:1..last:1 --merge-type merge3')
75
76
        self.runbzr('merge ../b -r last:1')
76
77
        self.check_file_contents('goodbye', 'quux')
77
78
        # Merging a branch pulls its revision into the tree
78
 
        a = WorkingTree.open('.')
79
79
        b = Branch.open('../b')
80
 
        a.branch.repository.get_revision_xml(b.last_revision())
81
 
        self.log('pending merges: %s', a.pending_merges())
82
 
        self.assertEquals(a.pending_merges(),
83
 
                          [b.last_revision()])
84
 
        self.runbzr('commit -m merged')
 
80
        b_tip = b.last_revision()
 
81
        self.failUnless(a.branch.repository.has_revision(b_tip))
 
82
        self.assertEqual([a_tip, b_tip], a.get_parent_ids())
 
83
        self.runbzr('revert --no-backup')
 
84
        out, err = self.runbzr('merge -r revno:1:./hello', retcode=3)
 
85
        self.assertTrue("Not a branch" in err)
 
86
        self.runbzr('merge -r revno:%d:./..revno:%d:../b'
 
87
                    %(ancestor,b.revno()))
 
88
        self.assertEquals(a.get_parent_ids(), 
 
89
                          [a.branch.last_revision(), b.last_revision()])
 
90
        self.check_file_contents('goodbye', 'quux')
 
91
        self.runbzr('revert --no-backup')
 
92
        self.runbzr('merge -r revno:%d:../b'%b.revno())
 
93
        self.assertEquals(a.get_parent_ids(),
 
94
                          [a.branch.last_revision(), b.last_revision()])
 
95
        a_tip = a.commit('merged')
85
96
        self.runbzr('merge ../b -r last:1')
86
 
        self.assertEqual(a.pending_merges(), [])
 
97
        self.assertEqual([a_tip], a.get_parent_ids())
87
98
 
88
99
    def test_merge_with_missing_file(self):
89
100
        """Merge handles missing file conflicts"""
196
207
        file('../bundle', 'wb').write(self.runbzr('bundle ../branch_a')[0])
197
208
        os.chdir('../branch_a')
198
209
        self.runbzr('merge ../bundle', retcode=1)
199
 
        testament_a = Testament.from_revision(tree_a.branch.repository, 
200
 
                                              tree_b.last_revision())
 
210
        testament_a = Testament.from_revision(tree_a.branch.repository,
 
211
                                              tree_b.get_parent_ids()[0])
201
212
        testament_b = Testament.from_revision(tree_b.branch.repository,
202
 
                                              tree_b.last_revision())
 
213
                                              tree_b.get_parent_ids()[0])
203
214
        self.assertEqualDiff(testament_a.as_text(),
204
215
                         testament_b.as_text())
205
216
        tree_a.set_conflicts(ConflictList())
207
218
        # it is legal to attempt to merge an already-merged bundle
208
219
        output = self.runbzr('merge ../bundle')[1]
209
220
        # but it does nothing
210
 
        self.assertFalse(compare_trees(tree_a.basis_tree(), 
211
 
                                       tree_a).has_changed())
 
221
        self.assertFalse(tree_a.changes_from(tree_a.basis_tree()).has_changed())
212
222
        self.assertEqual('Nothing to do.\n', output)
 
223
 
 
224
    def test_merge_uncommitted(self):
 
225
        """Check that merge --uncommitted behaves properly"""
 
226
        tree_a = self.make_branch_and_tree('a')
 
227
        self.build_tree(['a/file_1', 'a/file_2'])
 
228
        tree_a.add(['file_1', 'file_2'])
 
229
        tree_a.commit('commit 1')
 
230
        tree_b = tree_a.bzrdir.sprout('b').open_workingtree()
 
231
        self.failUnlessExists('b/file_1')
 
232
        tree_a.rename_one('file_1', 'file_i')
 
233
        tree_a.commit('commit 2')
 
234
        tree_a.rename_one('file_2', 'file_ii')
 
235
        os.chdir('b')
 
236
        self.run_bzr('merge', '../a', '--uncommitted')
 
237
        self.failUnlessExists('file_1')
 
238
        self.failUnlessExists('file_ii')
 
239
        tree_b.revert([])
 
240
        self.run_bzr_error(('Cannot use --uncommitted and --revision',), 
 
241
                           'merge', '../a', '--uncommitted', '-r1')