/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_shelf.py

  • Committer: Martin Pool
  • Date: 2009-09-14 01:48:28 UTC
  • mfrom: (4685 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4688.
  • Revision ID: mbp@sourcefrog.net-20090914014828-ydr9rlkdfq2sv57z
Merge news

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
        tree.add(['foo'], ['foo-id'])
47
47
        tree.commit('foo')
48
48
        tree.rename_one('foo', 'bar')
 
49
        tree.lock_tree_write()
 
50
        self.addCleanup(tree.unlock)
49
51
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
50
52
        self.addCleanup(creator.finalize)
51
53
        self.assertEqual([('rename', 'foo-id', 'foo', 'bar')],
76
78
        tree.add(['foo', 'bar', 'foo/baz'], ['foo-id', 'bar-id', 'baz-id'])
77
79
        tree.commit('foo')
78
80
        tree.rename_one('foo/baz', 'bar/baz')
 
81
        tree.lock_tree_write()
 
82
        self.addCleanup(tree.unlock)
79
83
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
80
84
        self.addCleanup(creator.finalize)
81
85
        self.assertEqual([('rename', 'baz-id', 'foo/baz', 'bar/baz')],
109
113
        shelf_file = creator.shelf_transform._limbo_name(s_trans_id)
110
114
        self.assertFileEqual(expected_content, shelf_file)
111
115
 
112
 
    def test_shelve_content_change(self):
 
116
    def prepare_content_change(self):
113
117
        tree = self.make_branch_and_tree('.')
114
118
        tree.lock_write()
115
119
        self.addCleanup(tree.unlock)
119
123
        self.build_tree_contents([('foo', 'b\na\nc\n')])
120
124
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
121
125
        self.addCleanup(creator.finalize)
 
126
        return creator
 
127
 
 
128
    def test_shelve_content_change(self):
 
129
        creator = self.prepare_content_change()
122
130
        self.assertEqual([('modify text', 'foo-id')],
123
131
                         list(creator.iter_shelvable()))
124
132
        creator.shelve_lines('foo-id', ['a\n', 'c\n'])
126
134
        self.assertFileEqual('a\nc\n', 'foo')
127
135
        self.assertShelvedFileEqual('b\na\n', creator, 'foo-id')
128
136
 
 
137
    def test_shelve_change_handles_modify_text(self):
 
138
        creator = self.prepare_content_change()
 
139
        creator.shelve_change(('modify text', 'foo-id'))
 
140
        creator.transform()
 
141
        self.assertFileEqual('a\n', 'foo')
 
142
        self.assertShelvedFileEqual('b\na\nc\n', creator, 'foo-id')
 
143
 
 
144
    def test_shelve_all(self):
 
145
        creator = self.prepare_content_change()
 
146
        creator.shelve_all()
 
147
        creator.transform()
 
148
        self.assertFileEqual('a\n', 'foo')
 
149
        self.assertShelvedFileEqual('b\na\nc\n', creator, 'foo-id')
129
150
 
130
151
    def prepare_shelve_creation(self):
131
152
        tree = self.make_branch_and_tree('.')
310
331
        tree.add('foo', 'foo-id')
311
332
        tree.commit('Added file and directory')
312
333
        os.unlink('tree/foo')
 
334
        tree.lock_tree_write()
 
335
        self.addCleanup(tree.unlock)
313
336
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
314
337
        self.addCleanup(creator.finalize)
315
338
        self.assertEqual([('delete file', 'foo-id', 'file', 'foo')],
325
348
        tree.commit('Added file and directory')
326
349
        os.unlink('tree/foo')
327
350
        os.mkdir('tree/foo')
 
351
        tree.lock_tree_write()
 
352
        self.addCleanup(tree.unlock)
328
353
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
329
354
        self.addCleanup(creator.finalize)
330
355
        self.assertEqual([('change kind', 'foo-id', 'file', 'directory',
352
377
 
353
378
    def test_shelve_change_unknown_change(self):
354
379
        tree = self.make_branch_and_tree('tree')
 
380
        tree.lock_tree_write()
 
381
        self.addCleanup(tree.unlock)
355
382
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
356
383
        self.addCleanup(creator.finalize)
357
384
        e = self.assertRaises(ValueError, creator.shelve_change, ('unknown',))
363
390
        tree.add('foo', 'foo-id')
364
391
        tree.commit('Added file and directory')
365
392
        tree.unversion(['foo-id'])
 
393
        tree.lock_tree_write()
 
394
        self.addCleanup(tree.unlock)
366
395
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
367
396
        self.addCleanup(creator.finalize)
368
397
        self.assertEqual([('delete file', 'foo-id', 'file', 'foo')],
373
402
 
374
403
    def test_shelve_serialization(self):
375
404
        tree = self.make_branch_and_tree('.')
 
405
        tree.lock_tree_write()
 
406
        self.addCleanup(tree.unlock)
376
407
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
377
408
        self.addCleanup(creator.finalize)
378
409
        shelf_file = open('shelf', 'wb')
387
418
        tree = self.make_branch_and_tree('tree')
388
419
        self.build_tree(['tree/foo'])
389
420
        tree.add('foo', 'foo-id')
 
421
        tree.lock_tree_write()
 
422
        self.addCleanup(tree.unlock)
390
423
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
391
424
        self.addCleanup(creator.finalize)
392
425
        list(creator.iter_shelvable())
411
444
 
412
445
    def test_shelve_unversioned(self):
413
446
        tree = self.make_branch_and_tree('tree')
414
 
        self.assertRaises(errors.PathsNotVersionedError,
415
 
                          shelf.ShelfCreator, tree, tree.basis_tree(), ['foo'])
 
447
        tree.lock_tree_write()
 
448
        try:
 
449
            self.assertRaises(errors.PathsNotVersionedError,
 
450
                              shelf.ShelfCreator, tree, tree.basis_tree(), ['foo'])
 
451
        finally:
 
452
            tree.unlock()
416
453
        # We should be able to lock/unlock the tree if ShelfCreator cleaned
417
454
        # after itself.
418
455
        wt = workingtree.WorkingTree.open('tree')
420
457
        wt.unlock()
421
458
        # And a second tentative should raise the same error (no
422
459
        # limbo/pending_deletion leftovers).
423
 
        self.assertRaises(errors.PathsNotVersionedError,
424
 
                          shelf.ShelfCreator, tree, tree.basis_tree(), ['foo'])
 
460
        tree.lock_tree_write()
 
461
        try:
 
462
            self.assertRaises(errors.PathsNotVersionedError,
 
463
                              shelf.ShelfCreator, tree, tree.basis_tree(), ['foo'])
 
464
        finally:
 
465
            tree.unlock()
 
466
 
 
467
    def test_shelve_skips_added_root(self):
 
468
        """Skip adds of the root when iterating through shelvable changes."""
 
469
        tree = self.make_branch_and_tree('tree')
 
470
        tree.lock_tree_write()
 
471
        self.addCleanup(tree.unlock)
 
472
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
 
473
        self.addCleanup(creator.finalize)
 
474
        self.assertEqual([], list(creator.iter_shelvable()))
 
475
 
 
476
    def test_shelve_skips_added_root(self):
 
477
        """Skip adds of the root when iterating through shelvable changes."""
 
478
        tree = self.make_branch_and_tree('tree')
 
479
        tree.lock_tree_write()
 
480
        self.addCleanup(tree.unlock)
 
481
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
 
482
        self.addCleanup(creator.finalize)
 
483
        self.assertEqual([], list(creator.iter_shelvable()))
425
484
 
426
485
 
427
486
class TestUnshelver(tests.TestCaseWithTransport):
444
503
            shelf_file.seek(0)
445
504
            unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
446
505
            unshelver.make_merger().do_merge()
 
506
            self.addCleanup(unshelver.finalize)
447
507
            self.assertFileEqual('bar', 'tree/foo')
448
508
        finally:
449
509
            shelf_file.close()
467
527
        self.build_tree_contents([('tree/foo', 'z\na\nb\nc\n')])
468
528
        shelf_file.seek(0)
469
529
        unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
 
530
        self.addCleanup(unshelver.finalize)
470
531
        unshelver.make_merger().do_merge()
471
532
        self.assertFileEqual('z\na\nb\nd\n', 'tree/foo')
472
533
 
495
556
        self.assertFileEqual('baz', 'tree/foo/bar')
496
557
        shelf_file.seek(0)
497
558
        unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
 
559
        self.addCleanup(unshelver.finalize)
498
560
        unshelver.make_merger().do_merge()
499
561
        self.assertFalse('foo-id' in tree)
500
562
        self.assertFalse('bar-id' in tree)
525
587
        shelf_file = open('shelf', 'rb')
526
588
        self.addCleanup(shelf_file.close)
527
589
        unshelver = shelf.Unshelver.from_tree_and_shelf(tree, shelf_file)
 
590
        unshelver.finalize()
528
591
 
529
592
    def test_corrupt_shelf(self):
530
593
        tree = self.make_branch_and_tree('.')
639
702
        shelf_id = shelf_manager.shelve_changes(creator)
640
703
        self.failIfExists('tree/foo')
641
704
        unshelver = shelf_manager.get_unshelver(shelf_id)
 
705
        self.addCleanup(unshelver.finalize)
642
706
        unshelver.make_merger().do_merge()
643
707
        self.assertFileEqual('bar', 'tree/foo')
644
708
 
645
709
    def test_get_metadata(self):
646
710
        tree = self.make_branch_and_tree('.')
 
711
        tree.lock_tree_write()
 
712
        self.addCleanup(tree.unlock)
647
713
        creator = shelf.ShelfCreator(tree, tree.basis_tree())
 
714
        self.addCleanup(creator.finalize)
648
715
        shelf_manager = tree.get_shelf_manager()
649
716
        shelf_id = shelf_manager.shelve_changes(creator, 'foo')
650
717
        metadata = shelf_manager.get_metadata(shelf_id)