~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Andrew Bennetts
  • Date: 2007-08-02 06:40:58 UTC
  • mfrom: (2666 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2668.
  • Revision ID: andrew.bennetts@canonical.com-20070802064058-09eblz1qbc01fcr3
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
import os
23
23
 
 
24
from bzrlib import merge_directive
24
25
from bzrlib.branch import Branch
25
26
from bzrlib.bzrdir import BzrDir
26
27
from bzrlib.conflicts import ConflictList, ContentsConflict
204
205
        f.close()
205
206
        tree_b.commit('message')
206
207
        os.chdir('branch_b')
207
 
        file('../bundle', 'wb').write(self.run_bzr('bundle ../branch_a')[0])
 
208
        self.run_bzr('bundle ../branch_a -o ../bundle')
208
209
        os.chdir('../branch_a')
209
210
        self.run_bzr('merge ../bundle', retcode=1)
210
211
        testament_a = Testament.from_revision(tree_a.branch.repository,
266
267
        self.pullable_branch()
267
268
        os.chdir('a')
268
269
        (out, err) = self.run_bzr('merge --pull ../b')
269
 
        self.assertContainsRe(err, 'Now on revision 2\\.')
 
270
        self.assertContainsRe(out, 'Now on revision 2\\.')
270
271
        tree_a = WorkingTree.open('.')
271
272
        self.assertEqual([self.id2], tree_a.get_parent_ids())
272
273
 
289
290
        self.run_bzr('merge ../tree_a', retcode=1)
290
291
        self.assertEqual(tree_b.conflicts(),
291
292
                         [ContentsConflict('file', file_id='file-id')])
 
293
 
 
294
    def test_directive_cherrypick(self):
 
295
        source = self.make_branch_and_tree('source')
 
296
        self.build_tree(['source/a'])
 
297
        source.add('a')
 
298
        source.commit('Added a', rev_id='rev1')
 
299
        self.build_tree(['source/b'])
 
300
        source.add('b')
 
301
        source.commit('Added b', rev_id='rev2')
 
302
        target = self.make_branch_and_tree('target')
 
303
        target.commit('empty commit')
 
304
        self.write_directive('directive', source.branch, 'target', 'rev2',
 
305
                             'rev1')
 
306
        self.run_bzr('merge -d target directive')
 
307
        self.failIfExists('target/a')
 
308
        self.failUnlessExists('target/b')
 
309
 
 
310
    def write_directive(self, filename, source, target, revision_id,
 
311
                        base_revision_id=None, mangle_patch=False):
 
312
        md = merge_directive.MergeDirective2.from_objects(
 
313
            source.repository, revision_id, 0, 0, target,
 
314
            base_revision_id=base_revision_id)
 
315
        if mangle_patch:
 
316
            md.patch = 'asdf\n'
 
317
        self.build_tree_contents([(filename, ''.join(md.to_lines()))])
 
318
 
 
319
    def test_directive_verify_warning(self):
 
320
        source = self.make_branch_and_tree('source')
 
321
        self.build_tree(['source/a'])
 
322
        source.add('a')
 
323
        source.commit('Added a', rev_id='rev1')
 
324
        target = self.make_branch_and_tree('target')
 
325
        target.commit('empty commit')
 
326
        self.write_directive('directive', source.branch, 'target', 'rev1')
 
327
        err = self.run_bzr('merge -d target directive')[1]
 
328
        self.assertNotContainsRe(err, 'Preview patch does not match changes')
 
329
        target.revert([])
 
330
        self.write_directive('directive', source.branch, 'target', 'rev1',
 
331
                             mangle_patch=True)
 
332
        err = self.run_bzr('merge -d target directive')[1]
 
333
        self.assertContainsRe(err, 'Preview patch does not match changes')
 
334
 
 
335
    def test_merge_arbitrary(self):
 
336
        target = self.make_branch_and_tree('target')
 
337
        target.commit('empty')
 
338
        # We need a revision that has no integer revno
 
339
        branch_a = target.bzrdir.sprout('branch_a').open_workingtree()
 
340
        self.build_tree(['branch_a/file1'])
 
341
        branch_a.add('file1')
 
342
        branch_a.commit('added file1', rev_id='rev2a')
 
343
        branch_b = target.bzrdir.sprout('branch_b').open_workingtree()
 
344
        self.build_tree(['branch_b/file2'])
 
345
        branch_b.add('file2')
 
346
        branch_b.commit('added file2', rev_id='rev2b')
 
347
        branch_b.merge_from_branch(branch_a.branch)
 
348
        self.failUnlessExists('branch_b/file1')
 
349
        branch_b.commit('merged branch_a', rev_id='rev3b')
 
350
 
 
351
        # It works if the revid has an interger revno
 
352
        self.run_bzr('merge -d target -r revid:rev2a branch_a')
 
353
        self.failUnlessExists('target/file1')
 
354
        self.failIfExists('target/file2')
 
355
        target.revert([])
 
356
 
 
357
        # It should work if the revid has no integer revno
 
358
        self.run_bzr('merge -d target -r revid:rev2a branch_b')
 
359
        self.failUnlessExists('target/file1')
 
360
        self.failIfExists('target/file2')