13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
"""Tests for repository implementations - tests a repository format."""
78
77
repo = tree.branch.repository
79
78
self.assertTrue(repo._format._fetch_uses_deltas in (True, False))
80
def test_attribute_fast_deltas(self):
81
"""Test the format.fast_deltas attribute."""
82
tree = self.make_branch_and_tree('tree')
83
repo = tree.branch.repository
84
self.assertTrue(repo._format.fast_deltas in (True, False))
81
86
def test_attribute__fetch_reconcile(self):
82
87
"""Test the the _fetch_reconcile attribute."""
83
88
tree = self.make_branch_and_tree('tree')
244
249
invs = tree.branch.repository.iter_inventories(revs)
245
250
for rev_id, inv in zip(revs, invs):
246
251
self.assertEqual(rev_id, inv.revision_id)
247
self.assertIsInstance(inv, Inventory)
252
self.assertIsInstance(inv, CommonInventory)
249
254
def test_supports_rich_root(self):
250
255
tree = self.make_branch_and_tree('a')
252
257
second_revision = tree.commit('')
253
inv = tree.branch.repository.revision_tree(second_revision).inventory
258
rev_tree = tree.branch.repository.revision_tree(second_revision)
260
self.addCleanup(rev_tree.unlock)
261
inv = rev_tree.inventory
254
262
rich_root = (inv.root.revision != second_revision)
255
263
self.assertEqual(rich_root,
256
264
tree.branch.repository.supports_rich_root())
358
366
wt.set_root_id('fixed-root')
359
367
wt.commit('lala!', rev_id='revision-1', allow_pointless=True)
360
368
tree = wt.branch.repository.revision_tree('revision-1')
361
self.assertEqual('revision-1', tree.inventory.root.revision)
362
expected = InventoryDirectory('fixed-root', '', None)
363
expected.revision = 'revision-1'
364
self.assertEqual([('', 'V', 'directory', 'fixed-root', expected)],
365
list(tree.list_files(include_root=True)))
371
self.assertEqual('revision-1', tree.inventory.root.revision)
372
expected = InventoryDirectory('fixed-root', '', None)
373
expected.revision = 'revision-1'
374
self.assertEqual([('', 'V', 'directory', 'fixed-root', expected)],
375
list(tree.list_files(include_root=True)))
366
378
tree = self.callDeprecated(['NULL_REVISION should be used for the null'
367
379
' revision instead of None, as of bzr 0.91.'],
368
380
wt.branch.repository.revision_tree, None)
369
self.assertEqual([], list(tree.list_files(include_root=True)))
383
self.assertEqual([], list(tree.list_files(include_root=True)))
370
386
tree = wt.branch.repository.revision_tree(NULL_REVISION)
371
self.assertEqual([], list(tree.list_files(include_root=True)))
389
self.assertEqual([], list(tree.list_files(include_root=True)))
373
393
def test_get_revision_delta(self):
374
394
tree_a = self.make_branch_and_tree('a')
386
406
self.assertIsInstance(delta, TreeDelta)
387
407
self.assertEqual([('vla', 'file2', 'file')], delta.added)
409
def test_get_revision_delta_filtered(self):
410
tree_a = self.make_branch_and_tree('a')
411
self.build_tree(['a/foo', 'a/bar/', 'a/bar/b1', 'a/bar/b2', 'a/baz'])
412
tree_a.add(['foo', 'bar', 'bar/b1', 'bar/b2', 'baz'],
413
['foo-id', 'bar-id', 'b1-id', 'b2-id', 'baz-id'])
414
tree_a.commit('rev1', rev_id='rev1')
415
self.build_tree(['a/bar/b3'])
416
tree_a.add('bar/b3', 'b3-id')
417
tree_a.commit('rev2', rev_id='rev2')
419
# Test multiple files
420
delta = tree_a.branch.repository.get_revision_delta('rev1',
421
specific_fileids=['foo-id', 'baz-id'])
422
self.assertIsInstance(delta, TreeDelta)
424
('baz', 'baz-id', 'file'),
425
('foo', 'foo-id', 'file'),
428
delta = tree_a.branch.repository.get_revision_delta('rev1',
429
specific_fileids=['bar-id'])
430
self.assertIsInstance(delta, TreeDelta)
432
('bar', 'bar-id', 'directory'),
433
('bar/b1', 'b1-id', 'file'),
434
('bar/b2', 'b2-id', 'file'),
436
# Test a file in a directory
437
delta = tree_a.branch.repository.get_revision_delta('rev1',
438
specific_fileids=['b2-id'])
439
self.assertIsInstance(delta, TreeDelta)
441
('bar', 'bar-id', 'directory'),
442
('bar/b2', 'b2-id', 'file'),
444
# Try another revision
445
delta = tree_a.branch.repository.get_revision_delta('rev2',
446
specific_fileids=['b3-id'])
447
self.assertIsInstance(delta, TreeDelta)
449
('bar', 'bar-id', 'directory'),
450
('bar/b3', 'b3-id', 'file'),
452
delta = tree_a.branch.repository.get_revision_delta('rev2',
453
specific_fileids=['foo-id'])
454
self.assertIsInstance(delta, TreeDelta)
455
self.assertEqual([], delta.added)
389
457
def test_clone_bzrdir_repository_revision(self):
390
458
# make a repository with some revisions,
391
459
# and clone it, this should not have unreferenced revisions.
691
761
repo.get_signature_text('A'))
693
763
def test_add_revision_inventory_sha1(self):
694
repo = self.make_repository('repo')
695
764
inv = Inventory(revision_id='A')
696
765
inv.root.revision = 'A'
697
766
inv.root.file_id = 'fixed-root'
767
# Insert the inventory on its own to an identical repository, to get
769
reference_repo = self.make_repository('reference_repo')
770
reference_repo.lock_write()
771
reference_repo.start_write_group()
772
inv_sha1 = reference_repo.add_inventory('A', inv, [])
773
reference_repo.abort_write_group()
774
reference_repo.unlock()
775
# Now insert a revision with this inventory, and it should get the same
777
repo = self.make_repository('repo')
698
778
repo.lock_write()
699
779
repo.start_write_group()
700
780
repo.add_revision('A', Revision('A', committer='B', timestamp=0,