69
69
self.assertEqual(result, 'A bzr repository dir')
71
71
bzrdir.format_registry.remove('default')
72
bzrdir.format_registry.remove('sample')
73
72
bzrdir.format_registry.register('default', old_default, '')
74
73
self.assertIsInstance(repository.RepositoryFormat.get_default_format(),
75
74
old_format.__class__)
337
336
self.assertTrue(S_ISDIR(t.stat('knits').st_mode))
338
337
self.check_knits(t)
341
class DummyRepository(object):
342
"""A dummy repository for testing."""
346
def supports_rich_root(self):
350
class InterDummy(repository.InterRepository):
351
"""An inter-repository optimised code path for DummyRepository.
353
This is for use during testing where we use DummyRepository as repositories
339
class InterString(repository.InterRepository):
340
"""An inter-repository optimised code path for strings.
342
This is for use during testing where we use strings as repositories
354
343
so that none of the default regsitered inter-repository classes will
359
348
def is_compatible(repo_source, repo_target):
360
"""InterDummy is compatible with DummyRepository."""
361
return (isinstance(repo_source, DummyRepository) and
362
isinstance(repo_target, DummyRepository))
349
"""InterString is compatible with strings-as-repos."""
350
return isinstance(repo_source, str) and isinstance(repo_target, str)
365
353
class TestInterRepository(TestCaseWithTransport):
371
359
# This also tests that the default registered optimised interrepository
372
360
# classes do not barf inappropriately when a surprising repository type
373
361
# is handed to them.
374
dummy_a = DummyRepository()
375
dummy_b = DummyRepository()
362
dummy_a = "Repository 1."
363
dummy_b = "Repository 2."
376
364
self.assertGetsDefaultInterRepository(dummy_a, dummy_b)
378
366
def assertGetsDefaultInterRepository(self, repo_a, repo_b):
379
"""Asserts that InterRepository.get(repo_a, repo_b) -> the default.
381
The effective default is now InterSameDataRepository because there is
382
no actual sane default in the presence of incompatible data models.
367
"""Asserts that InterRepository.get(repo_a, repo_b) -> the default."""
384
368
inter_repo = repository.InterRepository.get(repo_a, repo_b)
385
self.assertEqual(repository.InterSameDataRepository,
369
self.assertEqual(repository.InterRepository,
386
370
inter_repo.__class__)
387
371
self.assertEqual(repo_a, inter_repo.source)
388
372
self.assertEqual(repo_b, inter_repo.target)
393
377
# and that it is correctly selected when given a repository
394
378
# pair that it returns true on for the is_compatible static method
396
dummy_a = DummyRepository()
397
dummy_b = DummyRepository()
398
repo = self.make_repository('.')
399
# hack dummies to look like repo somewhat.
400
dummy_a._serializer = repo._serializer
401
dummy_b._serializer = repo._serializer
402
repository.InterRepository.register_optimiser(InterDummy)
380
dummy_a = "Repository 1."
381
dummy_b = "Repository 2."
382
repository.InterRepository.register_optimiser(InterString)
404
# we should get the default for something InterDummy returns False
384
# we should get the default for something InterString returns False
406
self.assertFalse(InterDummy.is_compatible(dummy_a, repo))
407
self.assertGetsDefaultInterRepository(dummy_a, repo)
408
# and we should get an InterDummy for a pair it 'likes'
409
self.assertTrue(InterDummy.is_compatible(dummy_a, dummy_b))
386
self.assertFalse(InterString.is_compatible(dummy_a, None))
387
self.assertGetsDefaultInterRepository(dummy_a, None)
388
# and we should get an InterString for a pair it 'likes'
389
self.assertTrue(InterString.is_compatible(dummy_a, dummy_b))
410
390
inter_repo = repository.InterRepository.get(dummy_a, dummy_b)
411
self.assertEqual(InterDummy, inter_repo.__class__)
391
self.assertEqual(InterString, inter_repo.__class__)
412
392
self.assertEqual(dummy_a, inter_repo.source)
413
393
self.assertEqual(dummy_b, inter_repo.target)
415
repository.InterRepository.unregister_optimiser(InterDummy)
395
repository.InterRepository.unregister_optimiser(InterString)
416
396
# now we should get the default InterRepository object again.
417
397
self.assertGetsDefaultInterRepository(dummy_a, dummy_b)