/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-12-04 00:42:43 UTC
  • mfrom: (3062.1.14 fast-plan-merge)
  • Revision ID: pqm@pqm.ubuntu.com-20071204004243-cgss0sl9yf0ayepc
Speed up annotate on packs

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
from bzrlib import (
21
21
    conflicts,
22
22
    errors,
 
23
    knit,
23
24
    merge as _mod_merge,
24
25
    option,
25
26
    progress,
 
27
    versionedfile,
26
28
    )
27
29
from bzrlib.branch import Branch
28
30
from bzrlib.conflicts import ConflictList, TextConflict
29
31
from bzrlib.errors import UnrelatedBranches, NoCommits, BzrCommandError
30
 
from bzrlib.merge import transform_tree, merge_inner
 
32
from bzrlib.merge import transform_tree, merge_inner, _PlanMerge
31
33
from bzrlib.osutils import pathjoin, file_kind
32
34
from bzrlib.revision import common_ancestor
33
 
from bzrlib.tests import TestCaseWithTransport
 
35
from bzrlib.tests import TestCaseWithTransport, TestCaseWithMemoryTransport
34
36
from bzrlib.trace import (enable_test_log, disable_test_log)
35
37
from bzrlib.workingtree import WorkingTree
36
38
 
285
287
        merger.merge_type = _mod_merge.Merge3Merger
286
288
        merger.do_merge()
287
289
        self.assertEqual(tree_a.get_parent_ids(), [tree_b.last_revision()])
 
290
 
 
291
 
 
292
class TestPlanMerge(TestCaseWithMemoryTransport):
 
293
 
 
294
    def setUp(self):
 
295
        TestCaseWithMemoryTransport.setUp(self)
 
296
        self.vf = knit.KnitVersionedFile('root', self.get_transport(),
 
297
                                         create=True)
 
298
        self.plan_merge_vf = versionedfile._PlanMergeVersionedFile('root',
 
299
                                                                   [self.vf])
 
300
 
 
301
    def add_version(self, version_id, parents, text):
 
302
        self.vf.add_lines(version_id, parents, [c+'\n' for c in text])
 
303
 
 
304
    def add_uncommitted_version(self, version_id, parents, text):
 
305
        self.plan_merge_vf.add_lines(version_id, parents,
 
306
                                     [c+'\n' for c in text])
 
307
 
 
308
    def setup_plan_merge(self):
 
309
        self.add_version('A', [], 'abc')
 
310
        self.add_version('B', ['A'], 'acehg')
 
311
        self.add_version('C', ['A'], 'fabg')
 
312
        return _PlanMerge('B', 'C', self.plan_merge_vf)
 
313
 
 
314
    def setup_plan_merge_uncommitted(self):
 
315
        self.add_version('A', [], 'abc')
 
316
        self.add_uncommitted_version('B:', ['A'], 'acehg')
 
317
        self.add_uncommitted_version('C:', ['A'], 'fabg')
 
318
        return _PlanMerge('B:', 'C:', self.plan_merge_vf)
 
319
 
 
320
    def test_unique_lines(self):
 
321
        plan = self.setup_plan_merge()
 
322
        self.assertEqual(plan._unique_lines(
 
323
            plan._get_matching_blocks('B', 'C')),
 
324
            ([1, 2, 3], [0, 2]))
 
325
 
 
326
    def test_find_new(self):
 
327
        plan = self.setup_plan_merge()
 
328
        self.assertEqual(set([2, 3, 4]), plan._find_new('B'))
 
329
        self.assertEqual(set([0, 3]), plan._find_new('C'))
 
330
 
 
331
    def test_find_new2(self):
 
332
        self.add_version('A', [], 'abc')
 
333
        self.add_version('B', ['A'], 'abcde')
 
334
        self.add_version('C', ['A'], 'abcefg')
 
335
        self.add_version('D', ['A', 'B', 'C'], 'abcdegh')
 
336
        my_plan = _PlanMerge('B', 'D', self.plan_merge_vf)
 
337
        self.assertEqual(set([5, 6]), my_plan._find_new('D'))
 
338
        self.assertEqual(set(), my_plan._find_new('A'))
 
339
 
 
340
    def test_find_new_no_ancestors(self):
 
341
        self.add_version('A', [], 'abc')
 
342
        self.add_version('B', [], 'xyz')
 
343
        my_plan = _PlanMerge('A', 'B', self.vf)
 
344
        self.assertEqual(set([0, 1, 2]), my_plan._find_new('A'))
 
345
 
 
346
    def test_plan_merge(self):
 
347
        self.setup_plan_merge()
 
348
        plan = self.plan_merge_vf.plan_merge('B', 'C')
 
349
        self.assertEqual([
 
350
                          ('new-b', 'f\n'),
 
351
                          ('unchanged', 'a\n'),
 
352
                          ('killed-b', 'c\n'),
 
353
                          ('new-a', 'e\n'),
 
354
                          ('new-a', 'h\n'),
 
355
                          ('killed-a', 'b\n'),
 
356
                          ('unchanged', 'g\n')],
 
357
                         list(plan))
 
358
 
 
359
    def test_plan_merge_uncommitted_files(self):
 
360
        self.setup_plan_merge_uncommitted()
 
361
        plan = self.plan_merge_vf.plan_merge('B:', 'C:')
 
362
        self.assertEqual([
 
363
                          ('new-b', 'f\n'),
 
364
                          ('unchanged', 'a\n'),
 
365
                          ('killed-b', 'c\n'),
 
366
                          ('new-a', 'e\n'),
 
367
                          ('new-a', 'h\n'),
 
368
                          ('killed-a', 'b\n'),
 
369
                          ('unchanged', 'g\n')],
 
370
                         list(plan))