17
17
"""Tests for the BzrDir facility and any format specific tests.
19
For interface contract tests, see tests/per_bzr_dir.
19
For interface contract tests, see tests/bzr_dir_implementations.
24
from StringIO import StringIO
26
28
from bzrlib import (
34
revision as _mod_revision,
38
transport as _mod_transport,
44
40
import bzrlib.branch
45
from bzrlib.errors import (
47
NoColocatedBranchSupport,
49
UnsupportedFormatError,
41
from bzrlib.errors import (NotBranchError,
43
UnsupportedFormatError,
51
45
from bzrlib.tests import (
53
47
TestCaseWithMemoryTransport,
54
48
TestCaseWithTransport,
57
52
from bzrlib.tests import(
61
56
from bzrlib.tests.test_http import TestWithTransport_pycurl
62
from bzrlib.transport import (
57
from bzrlib.transport import get_transport
66
58
from bzrlib.transport.http._urllib import HttpTransport_urllib
59
from bzrlib.transport.memory import MemoryServer
67
60
from bzrlib.transport.nosmart import NoSmartTransportDecorator
68
61
from bzrlib.transport.readonly import ReadonlyTransportDecorator
69
from bzrlib.repofmt import knitrepo, knitpack_repo
62
from bzrlib.repofmt import knitrepo, weaverepo, pack_repo
72
65
class TestDefaultFormat(TestCase):
74
67
def test_get_set_default_format(self):
75
68
old_format = bzrdir.BzrDirFormat.get_default_format()
76
# default is BzrDirMetaFormat1
77
self.assertIsInstance(old_format, bzrdir.BzrDirMetaFormat1)
78
controldir.ControlDirFormat._set_default_format(SampleBzrDirFormat())
69
# default is BzrDirFormat6
70
self.failUnless(isinstance(old_format, bzrdir.BzrDirMetaFormat1))
71
bzrdir.BzrDirFormat._set_default_format(SampleBzrDirFormat())
79
72
# creating a bzr dir should now create an instrumented dir.
81
74
result = bzrdir.BzrDir.create('memory:///')
82
self.assertIsInstance(result, SampleBzrDir)
75
self.failUnless(isinstance(result, SampleBzrDir))
84
controldir.ControlDirFormat._set_default_format(old_format)
77
bzrdir.BzrDirFormat._set_default_format(old_format)
85
78
self.assertEqual(old_format, bzrdir.BzrDirFormat.get_default_format())
88
class DeprecatedBzrDirFormat(bzrdir.BzrDirFormat):
89
"""A deprecated bzr dir format."""
92
81
class TestFormatRegistry(TestCase):
94
83
def make_format_registry(self):
95
my_format_registry = controldir.ControlDirFormatRegistry()
96
my_format_registry.register('deprecated', DeprecatedBzrDirFormat,
97
'Some format. Slower and unawesome and deprecated.',
99
my_format_registry.register_lazy('lazy', 'bzrlib.tests.test_bzrdir',
100
'DeprecatedBzrDirFormat', 'Format registered lazily',
102
bzrdir.register_metadir(my_format_registry, 'knit',
84
my_format_registry = bzrdir.BzrDirFormatRegistry()
85
my_format_registry.register('weave', bzrdir.BzrDirFormat6,
86
'Pre-0.8 format. Slower and does not support checkouts or shared'
87
' repositories', deprecated=True)
88
my_format_registry.register_lazy('lazy', 'bzrlib.bzrdir',
89
'BzrDirFormat6', 'Format registered lazily', deprecated=True)
90
my_format_registry.register_metadir('knit',
103
91
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
104
92
'Format using knits',
106
94
my_format_registry.set_default('knit')
107
bzrdir.register_metadir(my_format_registry,
95
my_format_registry.register_metadir(
109
97
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
110
98
'Experimental successor to knit. Use at your own risk.',
111
99
branch_format='bzrlib.branch.BzrBranchFormat6',
112
100
experimental=True)
113
bzrdir.register_metadir(my_format_registry,
101
my_format_registry.register_metadir(
115
103
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
116
104
'Experimental successor to knit. Use at your own risk.',
117
105
branch_format='bzrlib.branch.BzrBranchFormat6', hidden=True)
118
my_format_registry.register('hiddendeprecated', DeprecatedBzrDirFormat,
119
'Old format. Slower and does not support things. ', hidden=True)
120
my_format_registry.register_lazy('hiddenlazy', 'bzrlib.tests.test_bzrdir',
121
'DeprecatedBzrDirFormat', 'Format registered lazily',
122
deprecated=True, hidden=True)
106
my_format_registry.register('hiddenweave', bzrdir.BzrDirFormat6,
107
'Pre-0.8 format. Slower and does not support checkouts or shared'
108
' repositories', hidden=True)
109
my_format_registry.register_lazy('hiddenlazy', 'bzrlib.bzrdir',
110
'BzrDirFormat6', 'Format registered lazily', deprecated=True,
123
112
return my_format_registry
125
114
def test_format_registry(self):
126
115
my_format_registry = self.make_format_registry()
127
116
my_bzrdir = my_format_registry.make_bzrdir('lazy')
128
self.assertIsInstance(my_bzrdir, DeprecatedBzrDirFormat)
129
my_bzrdir = my_format_registry.make_bzrdir('deprecated')
130
self.assertIsInstance(my_bzrdir, DeprecatedBzrDirFormat)
117
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
118
my_bzrdir = my_format_registry.make_bzrdir('weave')
119
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
131
120
my_bzrdir = my_format_registry.make_bzrdir('default')
132
121
self.assertIsInstance(my_bzrdir.repository_format,
133
122
knitrepo.RepositoryFormatKnit1)
177
167
self.assertIs(bzrdir.format_registry.get('dirstate-with-subtree'),
178
168
bzrdir.format_registry.get('default'))
180
repository.format_registry.get_default().__class__,
170
repository.RepositoryFormat.get_default_format().__class__,
181
171
knitrepo.RepositoryFormatKnit3)
183
173
bzrdir.format_registry.set_default_repository(old_default)
185
175
def test_aliases(self):
186
a_registry = controldir.ControlDirFormatRegistry()
187
a_registry.register('deprecated', DeprecatedBzrDirFormat,
188
'Old format. Slower and does not support stuff',
190
a_registry.register('deprecatedalias', DeprecatedBzrDirFormat,
191
'Old format. Slower and does not support stuff',
192
deprecated=True, alias=True)
193
self.assertEqual(frozenset(['deprecatedalias']), a_registry.aliases())
176
a_registry = bzrdir.BzrDirFormatRegistry()
177
a_registry.register('weave', bzrdir.BzrDirFormat6,
178
'Pre-0.8 format. Slower and does not support checkouts or shared'
179
' repositories', deprecated=True)
180
a_registry.register('weavealias', bzrdir.BzrDirFormat6,
181
'Pre-0.8 format. Slower and does not support checkouts or shared'
182
' repositories', deprecated=True, alias=True)
183
self.assertEqual(frozenset(['weavealias']), a_registry.aliases())
196
186
class SampleBranch(bzrlib.branch.Branch):
253
241
return "opened branch."
256
class BzrDirFormatTest1(bzrdir.BzrDirMetaFormat1):
259
def get_format_string():
260
return "Test format 1"
263
class BzrDirFormatTest2(bzrdir.BzrDirMetaFormat1):
266
def get_format_string():
267
return "Test format 2"
270
244
class TestBzrDirFormat(TestCaseWithTransport):
271
245
"""Tests for the BzrDirFormat facility."""
273
247
def test_find_format(self):
274
248
# is the right format object found for a branch?
275
249
# create a branch with a few known format objects.
276
bzrdir.BzrProber.formats.register(BzrDirFormatTest1.get_format_string(),
278
self.addCleanup(bzrdir.BzrProber.formats.remove,
279
BzrDirFormatTest1.get_format_string())
280
bzrdir.BzrProber.formats.register(BzrDirFormatTest2.get_format_string(),
282
self.addCleanup(bzrdir.BzrProber.formats.remove,
283
BzrDirFormatTest2.get_format_string())
284
t = self.get_transport()
250
# this is not quite the same as
251
t = get_transport(self.get_url())
285
252
self.build_tree(["foo/", "bar/"], transport=t)
286
253
def check_format(format, url):
287
254
format.initialize(url)
288
t = _mod_transport.get_transport(url)
255
t = get_transport(url)
289
256
found_format = bzrdir.BzrDirFormat.find_format(t)
290
self.assertIsInstance(found_format, format.__class__)
291
check_format(BzrDirFormatTest1(), "foo")
292
check_format(BzrDirFormatTest2(), "bar")
257
self.failUnless(isinstance(found_format, format.__class__))
258
check_format(bzrdir.BzrDirFormat5(), "foo")
259
check_format(bzrdir.BzrDirFormat6(), "bar")
294
261
def test_find_format_nothing_there(self):
295
262
self.assertRaises(NotBranchError,
296
263
bzrdir.BzrDirFormat.find_format,
297
_mod_transport.get_transport('.'))
299
266
def test_find_format_unknown_format(self):
300
t = self.get_transport()
267
t = get_transport(self.get_url())
302
269
t.put_bytes('.bzr/branch-format', '')
303
270
self.assertRaises(UnknownFormatError,
304
271
bzrdir.BzrDirFormat.find_format,
305
_mod_transport.get_transport('.'))
307
274
def test_register_unregister_format(self):
308
275
format = SampleBzrDirFormat()
708
674
self.assertEqual(relpath, 'baz')
710
676
def test_open_containing_from_transport(self):
711
self.assertRaises(NotBranchError,
712
bzrdir.BzrDir.open_containing_from_transport,
713
_mod_transport.get_transport(self.get_readonly_url('')))
714
self.assertRaises(NotBranchError,
715
bzrdir.BzrDir.open_containing_from_transport,
716
_mod_transport.get_transport(self.get_readonly_url('g/p/q')))
677
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing_from_transport,
678
get_transport(self.get_readonly_url('')))
679
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing_from_transport,
680
get_transport(self.get_readonly_url('g/p/q')))
717
681
control = bzrdir.BzrDir.create(self.get_url())
718
682
branch, relpath = bzrdir.BzrDir.open_containing_from_transport(
719
_mod_transport.get_transport(self.get_readonly_url('')))
683
get_transport(self.get_readonly_url('')))
720
684
self.assertEqual('', relpath)
721
685
branch, relpath = bzrdir.BzrDir.open_containing_from_transport(
722
_mod_transport.get_transport(self.get_readonly_url('g/p/q')))
686
get_transport(self.get_readonly_url('g/p/q')))
723
687
self.assertEqual('g/p/q', relpath)
725
689
def test_open_containing_tree_or_branch(self):
769
733
# transport pointing at bzrdir should give a bzrdir with root transport
770
734
# set to the given transport
771
735
control = bzrdir.BzrDir.create(self.get_url())
772
t = self.get_transport()
773
opened_bzrdir = bzrdir.BzrDir.open_from_transport(t)
774
self.assertEqual(t.base, opened_bzrdir.root_transport.base)
736
transport = get_transport(self.get_url())
737
opened_bzrdir = bzrdir.BzrDir.open_from_transport(transport)
738
self.assertEqual(transport.base, opened_bzrdir.root_transport.base)
775
739
self.assertIsInstance(opened_bzrdir, bzrdir.BzrDir)
777
741
def test_open_from_transport_no_bzrdir(self):
778
t = self.get_transport()
779
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport, t)
742
transport = get_transport(self.get_url())
743
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport,
781
746
def test_open_from_transport_bzrdir_in_parent(self):
782
747
control = bzrdir.BzrDir.create(self.get_url())
783
t = self.get_transport()
785
t = t.clone('subdir')
786
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport, t)
748
transport = get_transport(self.get_url())
749
transport.mkdir('subdir')
750
transport = transport.clone('subdir')
751
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport,
788
754
def test_sprout_recursive(self):
789
755
tree = self.make_branch_and_tree('tree1',
819
785
self.build_tree(['tree1/subtree/file'])
820
786
sub_tree.add('file')
821
787
tree.commit('Initial commit')
822
# The following line force the orhaning to reveal bug #634470
823
tree.branch.get_config().set_user_option(
824
'bzr.transform.orphan_policy', 'move')
825
788
tree.bzrdir.destroy_workingtree()
826
# FIXME: subtree/.bzr is left here which allows the test to pass (or
827
# fail :-( ) -- vila 20100909
828
789
repo = self.make_repository('repo', shared=True,
829
790
format='dirstate-with-subtree')
830
791
repo.set_make_working_trees(False)
831
# FIXME: we just deleted the workingtree and now we want to use it ????
832
# At a minimum, we should use tree.branch below (but this fails too
833
# currently) or stop calling this test 'treeless'. Specifically, I've
834
# turn the line below into an assertRaises when 'subtree/.bzr' is
835
# orphaned and sprout tries to access the branch there (which is left
836
# by bzrdir.BzrDirMeta1.destroy_workingtree when it ignores the
837
# [DeletingParent('Not deleting', u'subtree', None)] conflict). See bug
838
# #634470. -- vila 20100909
839
self.assertRaises(errors.NotBranchError,
840
tree.bzrdir.sprout, 'repo/tree2')
841
# self.assertPathExists('repo/tree2/subtree')
842
# self.assertPathDoesNotExist('repo/tree2/subtree/file')
792
tree.bzrdir.sprout('repo/tree2')
793
self.failUnlessExists('repo/tree2/subtree')
794
self.failIfExists('repo/tree2/subtree/file')
844
796
def make_foo_bar_baz(self):
845
797
foo = bzrdir.BzrDir.create_branch_convenience('foo').bzrdir
850
802
def test_find_bzrdirs(self):
851
803
foo, bar, baz = self.make_foo_bar_baz()
852
t = self.get_transport()
853
self.assertEqualBzrdirs([baz, foo, bar], bzrdir.BzrDir.find_bzrdirs(t))
855
def make_fake_permission_denied_transport(self, transport, paths):
856
"""Create a transport that raises PermissionDenied for some paths."""
859
raise errors.PermissionDenied(path)
861
path_filter_server = pathfilter.PathFilteringServer(transport, filter)
862
path_filter_server.start_server()
863
self.addCleanup(path_filter_server.stop_server)
864
path_filter_transport = pathfilter.PathFilteringTransport(
865
path_filter_server, '.')
866
return (path_filter_server, path_filter_transport)
868
def assertBranchUrlsEndWith(self, expect_url_suffix, actual_bzrdirs):
869
"""Check that each branch url ends with the given suffix."""
870
for actual_bzrdir in actual_bzrdirs:
871
self.assertEndsWith(actual_bzrdir.user_url, expect_url_suffix)
873
def test_find_bzrdirs_permission_denied(self):
874
foo, bar, baz = self.make_foo_bar_baz()
875
t = self.get_transport()
876
path_filter_server, path_filter_transport = \
877
self.make_fake_permission_denied_transport(t, ['foo'])
879
self.assertBranchUrlsEndWith('/baz/',
880
bzrdir.BzrDir.find_bzrdirs(path_filter_transport))
882
smart_transport = self.make_smart_server('.',
883
backing_server=path_filter_server)
884
self.assertBranchUrlsEndWith('/baz/',
885
bzrdir.BzrDir.find_bzrdirs(smart_transport))
804
transport = get_transport(self.get_url())
805
self.assertEqualBzrdirs([baz, foo, bar],
806
bzrdir.BzrDir.find_bzrdirs(transport))
887
808
def test_find_bzrdirs_list_current(self):
888
809
def list_current(transport):
889
810
return [s for s in transport.list_dir('') if s != 'baz']
891
812
foo, bar, baz = self.make_foo_bar_baz()
892
t = self.get_transport()
893
self.assertEqualBzrdirs(
895
bzrdir.BzrDir.find_bzrdirs(t, list_current=list_current))
813
transport = get_transport(self.get_url())
814
self.assertEqualBzrdirs([foo, bar],
815
bzrdir.BzrDir.find_bzrdirs(transport,
816
list_current=list_current))
897
819
def test_find_bzrdirs_evaluate(self):
898
820
def evaluate(bzrdir):
919
842
root = self.make_repository('', shared=True)
920
843
foo, bar, baz = self.make_foo_bar_baz()
921
844
qux = self.make_bzrdir('foo/qux')
922
t = self.get_transport()
923
branches = bzrdir.BzrDir.find_branches(t)
845
transport = get_transport(self.get_url())
846
branches = bzrdir.BzrDir.find_branches(transport)
924
847
self.assertEqual(baz.root_transport.base, branches[0].base)
925
848
self.assertEqual(foo.root_transport.base, branches[1].base)
926
849
self.assertEqual(bar.root_transport.base, branches[2].base)
928
851
# ensure this works without a top-level repo
929
branches = bzrdir.BzrDir.find_branches(t.clone('foo'))
852
branches = bzrdir.BzrDir.find_branches(transport.clone('foo'))
930
853
self.assertEqual(foo.root_transport.base, branches[0].base)
931
854
self.assertEqual(bar.root_transport.base, branches[1].base)
934
class TestMissingRepoBranchesSkipped(TestCaseWithMemoryTransport):
936
def test_find_bzrdirs_missing_repo(self):
937
t = self.get_transport()
938
arepo = self.make_repository('arepo', shared=True)
939
abranch_url = arepo.user_url + '/abranch'
940
abranch = bzrdir.BzrDir.create(abranch_url).create_branch()
941
t.delete_tree('arepo/.bzr')
942
self.assertRaises(errors.NoRepositoryPresent,
943
branch.Branch.open, abranch_url)
944
self.make_branch('baz')
945
for actual_bzrdir in bzrdir.BzrDir.find_branches(t):
946
self.assertEndsWith(actual_bzrdir.user_url, '/baz/')
949
857
class TestMeta1DirFormat(TestCaseWithTransport):
950
858
"""Tests specific to the meta1 dir format."""
1012
919
self.assertEqual(2, rpc_count)
922
class TestFormat5(TestCaseWithTransport):
923
"""Tests specific to the version 5 bzrdir format."""
925
def test_same_lockfiles_between_tree_repo_branch(self):
926
# this checks that only a single lockfiles instance is created
927
# for format 5 objects
928
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
929
def check_dir_components_use_same_lock(dir):
930
ctrl_1 = dir.open_repository().control_files
931
ctrl_2 = dir.open_branch().control_files
932
ctrl_3 = dir.open_workingtree()._control_files
933
self.assertTrue(ctrl_1 is ctrl_2)
934
self.assertTrue(ctrl_2 is ctrl_3)
935
check_dir_components_use_same_lock(dir)
936
# and if we open it normally.
937
dir = bzrdir.BzrDir.open(self.get_url())
938
check_dir_components_use_same_lock(dir)
940
def test_can_convert(self):
941
# format 5 dirs are convertable
942
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
943
self.assertTrue(dir.can_convert_format())
945
def test_needs_conversion(self):
946
# format 5 dirs need a conversion if they are not the default,
948
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
949
# don't need to convert it to itself
950
self.assertFalse(dir.needs_format_conversion(bzrdir.BzrDirFormat5()))
951
# do need to convert it to the current default
952
self.assertTrue(dir.needs_format_conversion(
953
bzrdir.BzrDirFormat.get_default_format()))
956
class TestFormat6(TestCaseWithTransport):
957
"""Tests specific to the version 6 bzrdir format."""
959
def test_same_lockfiles_between_tree_repo_branch(self):
960
# this checks that only a single lockfiles instance is created
961
# for format 6 objects
962
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
963
def check_dir_components_use_same_lock(dir):
964
ctrl_1 = dir.open_repository().control_files
965
ctrl_2 = dir.open_branch().control_files
966
ctrl_3 = dir.open_workingtree()._control_files
967
self.assertTrue(ctrl_1 is ctrl_2)
968
self.assertTrue(ctrl_2 is ctrl_3)
969
check_dir_components_use_same_lock(dir)
970
# and if we open it normally.
971
dir = bzrdir.BzrDir.open(self.get_url())
972
check_dir_components_use_same_lock(dir)
974
def test_can_convert(self):
975
# format 6 dirs are convertable
976
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
977
self.assertTrue(dir.can_convert_format())
979
def test_needs_conversion(self):
980
# format 6 dirs need an conversion if they are not the default.
981
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
982
self.assertTrue(dir.needs_format_conversion(
983
bzrdir.BzrDirFormat.get_default_format()))
986
class NotBzrDir(bzrlib.bzrdir.BzrDir):
987
"""A non .bzr based control directory."""
989
def __init__(self, transport, format):
990
self._format = format
991
self.root_transport = transport
992
self.transport = transport.clone('.not')
995
class NotBzrDirFormat(bzrlib.bzrdir.BzrDirFormat):
996
"""A test class representing any non-.bzr based disk format."""
998
def initialize_on_transport(self, transport):
999
"""Initialize a new .not dir in the base directory of a Transport."""
1000
transport.mkdir('.not')
1001
return self.open(transport)
1003
def open(self, transport):
1004
"""Open this directory."""
1005
return NotBzrDir(transport, self)
1008
def _known_formats(self):
1009
return set([NotBzrDirFormat()])
1012
def probe_transport(self, transport):
1013
"""Our format is present if the transport ends in '.not/'."""
1014
if transport.has('.not'):
1015
return NotBzrDirFormat()
1018
class TestNotBzrDir(TestCaseWithTransport):
1019
"""Tests for using the bzrdir api with a non .bzr based disk format.
1021
If/when one of these is in the core, we can let the implementation tests
1025
def test_create_and_find_format(self):
1026
# create a .notbzr dir
1027
format = NotBzrDirFormat()
1028
dir = format.initialize(self.get_url())
1029
self.assertIsInstance(dir, NotBzrDir)
1031
bzrlib.bzrdir.BzrDirFormat.register_control_format(format)
1033
found = bzrlib.bzrdir.BzrDirFormat.find_format(
1034
get_transport(self.get_url()))
1035
self.assertIsInstance(found, NotBzrDirFormat)
1037
bzrlib.bzrdir.BzrDirFormat.unregister_control_format(format)
1039
def test_included_in_known_formats(self):
1040
bzrlib.bzrdir.BzrDirFormat.register_control_format(NotBzrDirFormat)
1042
formats = bzrlib.bzrdir.BzrDirFormat.known_formats()
1043
for format in formats:
1044
if isinstance(format, NotBzrDirFormat):
1046
self.fail("No NotBzrDirFormat in %s" % formats)
1048
bzrlib.bzrdir.BzrDirFormat.unregister_control_format(NotBzrDirFormat)
1015
1051
class NonLocalTests(TestCaseWithTransport):
1016
1052
"""Tests for bzrdir static behaviour on non local paths."""
1018
1054
def setUp(self):
1019
1055
super(NonLocalTests, self).setUp()
1020
self.vfs_transport_factory = memory.MemoryServer
1056
self.vfs_transport_factory = MemoryServer
1022
1058
def test_create_branch_convenience(self):
1023
1059
# outside a repo the default convenience output is a repo+branch_tree
1312
1329
url = transport.base
1313
1330
err = self.assertRaises(errors.BzrError, bzrdir.BzrDir.open, url)
1314
1331
self.assertEqual('fail', err._preformatted_string)
1316
def test_post_repo_init(self):
1317
from bzrlib.bzrdir import RepoInitHookParams
1319
bzrdir.BzrDir.hooks.install_named_hook('post_repo_init',
1321
self.make_repository('foo')
1322
self.assertLength(1, calls)
1324
self.assertIsInstance(params, RepoInitHookParams)
1325
self.assertTrue(hasattr(params, 'bzrdir'))
1326
self.assertTrue(hasattr(params, 'repository'))
1328
def test_post_repo_init_hook_repr(self):
1330
bzrdir.BzrDir.hooks.install_named_hook('post_repo_init',
1331
lambda params: param_reprs.append(repr(params)), None)
1332
self.make_repository('foo')
1333
self.assertLength(1, param_reprs)
1334
param_repr = param_reprs[0]
1335
self.assertStartsWith(param_repr, '<RepoInitHookParams for ')
1338
class TestGenerateBackupName(TestCaseWithMemoryTransport):
1339
# FIXME: This may need to be unified with test_osutils.TestBackupNames or
1340
# moved to per_bzrdir or per_transport for better coverage ?
1344
super(TestGenerateBackupName, self).setUp()
1345
self._transport = self.get_transport()
1346
bzrdir.BzrDir.create(self.get_url(),
1347
possible_transports=[self._transport])
1348
self._bzrdir = bzrdir.BzrDir.open_from_transport(self._transport)
1350
def test_deprecated_generate_backup_name(self):
1351
res = self.applyDeprecated(
1352
symbol_versioning.deprecated_in((2, 3, 0)),
1353
self._bzrdir.generate_backup_name, 'whatever')
1356
self.assertEqual("a.~1~", self._bzrdir._available_backup_name("a"))
1358
def test_exiting(self):
1359
self._transport.put_bytes("a.~1~", "some content")
1360
self.assertEqual("a.~2~", self._bzrdir._available_backup_name("a"))