~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_branchbuilder.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-12 18:05:15 UTC
  • mto: (4371.4.5 vila-better-heads)
  • mto: This revision was merged to the branch mainline in revision 4449.
  • Revision ID: john@arbash-meinel.com-20090612180515-t0cwbjsnve094oik
Add a failing test for handling nodes that are in the same linear chain.

It fails because the ancestry skipping causes us to miss the fact that the two nodes
are actually directly related. We could check at the beginning, as the 
code used to do, but I think that will be incomplete for the more-than-two
heads cases.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2011 Canonical Ltd
 
1
# Copyright (C) 2007, 2009 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
 
19
19
from bzrlib import (
20
20
    branch as _mod_branch,
 
21
    errors,
21
22
    revision as _mod_revision,
22
23
    tests,
23
24
    )
170
171
        rev = branch.repository.get_revision(rev_id)
171
172
        self.assertEqual(u'Foo', rev.message)
172
173
 
173
 
    def test_commit_message_callback(self):
174
 
        builder = BranchBuilder(self.get_transport().clone('foo'))
175
 
        rev_id = builder.build_snapshot(None, None,
176
 
            [('add', (u'', None, 'directory', None))],
177
 
            message_callback=lambda x:u'Foo')
178
 
        branch = builder.get_branch()
179
 
        rev = branch.repository.get_revision(rev_id)
180
 
        self.assertEqual(u'Foo', rev.message)
181
 
 
182
174
    def test_modify_file(self):
183
175
        builder = self.build_a_rev()
184
176
        rev_id2 = builder.build_snapshot('B-id', None,
247
239
                              (u'dir', 'dir-id', 'directory'),
248
240
                              (u'dir/a', 'a-id', 'file')], rev_tree)
249
241
 
250
 
    def test_rename_out_of_unversioned_subdir(self):
251
 
        builder = self.build_a_rev()
252
 
        builder.build_snapshot('B-id', None,
253
 
            [('add', ('dir', 'dir-id', 'directory', None)),
254
 
             ('rename', ('a', 'dir/a'))])
255
 
        builder.build_snapshot('C-id', None,
256
 
            [('rename', ('dir/a', 'a')),
257
 
             ('unversion', 'dir-id')])
258
 
        rev_tree = builder.get_branch().repository.revision_tree('C-id')
259
 
        self.assertTreeShape([(u'', 'a-root-id', 'directory'),
260
 
                              (u'a', 'a-id', 'file')], rev_tree)
261
 
 
262
242
    def test_set_parent(self):
263
243
        builder = self.build_a_rev()
264
244
        builder.start_series()
333
313
                             ], d_tree)
334
314
        # Because we copied the exact text into *this* tree, the 'c' file
335
315
        # should look like it was not modified in the merge
336
 
        self.assertEqual('C-id', d_tree.get_file_revision('c-id'))
337
 
 
338
 
    def test_set_parent_to_null(self):
339
 
        builder = self.build_a_rev()
340
 
        builder.start_series()
341
 
        self.addCleanup(builder.finish_series)
342
 
        builder.build_snapshot('B-id', [],
343
 
            [('add', ('', None, 'directory', None))])
344
 
        # We should now have a graph:
345
 
        #   A B
346
 
        # And not A => B
347
 
        repo = builder.get_branch().repository
348
 
        self.assertEqual({'A-id': (_mod_revision.NULL_REVISION,),
349
 
                          'B-id': (_mod_revision.NULL_REVISION,),},
350
 
                         repo.get_parent_map(['A-id', 'B-id']))
351
 
 
352
 
    
 
316
        self.assertEqual('C-id', d_tree.inventory['c-id'].revision)
 
317
 
353
318
    def test_start_finish_series(self):
354
319
        builder = BranchBuilder(self.get_transport().clone('foo'))
355
320
        builder.start_series()
376
341
        self.addCleanup(b.unlock)
377
342
        self.assertEqual(('ghost',),
378
343
            b.repository.get_graph().get_parent_map(['tip'])['tip'])
379
 
 
380
 
    def test_unversion_root_add_new_root(self):
381
 
        builder = BranchBuilder(self.get_transport().clone('foo'))
382
 
        builder.start_series()
383
 
        builder.build_snapshot('rev-1', None,
384
 
            [('add', ('', 'TREE_ROOT', 'directory', ''))])
385
 
        builder.build_snapshot('rev-2', None,
386
 
            [('unversion', 'TREE_ROOT'),
387
 
             ('add', ('', 'my-root', 'directory', ''))])
388
 
        builder.finish_series()
389
 
        rev_tree = builder.get_branch().repository.revision_tree('rev-2')
390
 
        self.assertTreeShape([(u'', 'my-root', 'directory')], rev_tree)
391
 
 
392
 
    def test_empty_flush(self):
393
 
        """A flush with no actions before it is a no-op."""
394
 
        builder = BranchBuilder(self.get_transport().clone('foo'))
395
 
        builder.start_series()
396
 
        builder.build_snapshot('rev-1', None,
397
 
            [('add', ('', 'TREE_ROOT', 'directory', ''))])
398
 
        builder.build_snapshot('rev-2', None, [('flush', None)])
399
 
        builder.finish_series()
400
 
        rev_tree = builder.get_branch().repository.revision_tree('rev-2')
401
 
        self.assertTreeShape([(u'', 'TREE_ROOT', 'directory')], rev_tree)
402
 
 
403
 
    def test_kind_change(self):
404
 
        """It's possible to change the kind of an entry in a single snapshot
405
 
        with a bit of help from the 'flush' action.
406
 
        """
407
 
        builder = BranchBuilder(self.get_transport().clone('foo'))
408
 
        builder.start_series()
409
 
        builder.build_snapshot('A-id', None,
410
 
            [('add', (u'', 'a-root-id', 'directory', None)),
411
 
             ('add', (u'a', 'a-id', 'file', 'content\n'))])
412
 
        builder.build_snapshot('B-id', None,
413
 
            [('unversion', 'a-id'),
414
 
             ('flush', None),
415
 
             ('add', (u'a', 'a-id', 'directory', None))])
416
 
        builder.finish_series()
417
 
        rev_tree = builder.get_branch().repository.revision_tree('B-id')
418
 
        self.assertTreeShape(
419
 
            [(u'', 'a-root-id', 'directory'), (u'a', 'a-id', 'directory')],
420
 
            rev_tree)
421
 
 
422
 
    def test_pivot_root(self):
423
 
        """It's possible (albeit awkward) to move an existing dir to the root
424
 
        in a single snapshot by using unversion then flush then add.
425
 
        """
426
 
        builder = BranchBuilder(self.get_transport().clone('foo'))
427
 
        builder.start_series()
428
 
        builder.build_snapshot('A-id', None,
429
 
            [('add', (u'', 'orig-root', 'directory', None)),
430
 
             ('add', (u'dir', 'dir-id', 'directory', None))])
431
 
        builder.build_snapshot('B-id', None,
432
 
            [('unversion', 'orig-root'),  # implicitly unversions all children
433
 
             ('flush', None),
434
 
             ('add', (u'', 'dir-id', 'directory', None))])
435
 
        builder.finish_series()
436
 
        rev_tree = builder.get_branch().repository.revision_tree('B-id')
437
 
        self.assertTreeShape([(u'', 'dir-id', 'directory')], rev_tree)
438