1142
1198
opened_dir._format)
1143
1199
self.failUnless(isinstance(opened_dir, bzrdir.BzrDir))
1201
def test_format_initialize_on_transport_ex(self):
1202
t = self.get_transport('dir')
1203
self.assertInitializeEx(t)
1205
def test_format_initialize_on_transport_ex_use_existing_dir_True(self):
1206
t = self.get_transport('dir')
1208
self.assertInitializeEx(t, use_existing_dir=True)
1210
def test_format_initialize_on_transport_ex_use_existing_dir_False(self):
1211
if not self.bzrdir_format.is_supported():
1212
# Not initializable - not a failure either.
1214
t = self.get_transport('dir')
1216
self.assertRaises(errors.FileExists,
1217
self.bzrdir_format.initialize_on_transport_ex, t,
1218
use_existing_dir=False)
1220
def test_format_initialize_on_transport_ex_create_prefix_True(self):
1221
t = self.get_transport('missing/dir')
1222
self.assertInitializeEx(t, create_prefix=True)
1224
def test_format_initialize_on_transport_ex_create_prefix_False(self):
1225
if not self.bzrdir_format.is_supported():
1226
# Not initializable - not a failure either.
1228
t = self.get_transport('missing/dir')
1229
self.assertRaises(errors.NoSuchFile, self.assertInitializeEx, t,
1230
create_prefix=False)
1232
def test_format_initialize_on_transport_ex_force_new_repo_True(self):
1233
t = self.get_transport('repo')
1234
repo_fmt = bzrdir.format_registry.make_bzrdir('1.9')
1235
repo_name = repo_fmt.repository_format.network_name()
1236
repo = repo_fmt.initialize_on_transport_ex(t,
1237
repo_format_name=repo_name, shared_repo=True)[0]
1238
made_repo, control = self.assertInitializeEx(t.clone('branch'),
1239
force_new_repo=True, repo_format_name=repo_name)
1241
# uninitialisable format
1243
self.assertNotEqual(repo.bzrdir.root_transport.base,
1244
made_repo.bzrdir.root_transport.base)
1246
def test_format_initialize_on_transport_ex_force_new_repo_False(self):
1247
t = self.get_transport('repo')
1248
repo_fmt = bzrdir.format_registry.make_bzrdir('1.9')
1249
repo_name = repo_fmt.repository_format.network_name()
1250
repo = repo_fmt.initialize_on_transport_ex(t,
1251
repo_format_name=repo_name, shared_repo=True)[0]
1252
made_repo, control = self.assertInitializeEx(t.clone('branch'),
1253
force_new_repo=False, repo_format_name=repo_name)
1255
# uninitialisable format
1257
if not isinstance(control._format, (bzrdir.BzrDirFormat5,
1258
bzrdir.BzrDirFormat6,)):
1259
self.assertEqual(repo.bzrdir.root_transport.base,
1260
made_repo.bzrdir.root_transport.base)
1262
def test_format_initialize_on_transport_ex_stacked_on(self):
1263
# trunk is a stackable format. Note that its in the same server area
1264
# which is what launchpad does, but not sufficient to exercise the
1266
trunk = self.make_branch('trunk', format='1.9')
1267
t = self.get_transport('stacked')
1268
old_fmt = bzrdir.format_registry.make_bzrdir('pack-0.92')
1269
repo_name = old_fmt.repository_format.network_name()
1270
# Should end up with a 1.9 format (stackable)
1271
repo, control = self.assertInitializeEx(t, need_meta=True,
1272
repo_format_name=repo_name, stacked_on='../trunk', stack_on_pwd=t.base)
1274
# uninitialisable format
1276
self.assertLength(1, repo._fallback_repositories)
1278
def test_format_initialize_on_transport_ex_default_stack_on(self):
1279
# When initialize_on_transport_ex uses a stacked-on branch because of
1280
# a stacking policy on the target, the location of the fallback
1281
# repository is the same as the external location of the stacked-on
1283
balloon = self.make_bzrdir('balloon')
1284
if isinstance(balloon._format, bzrdir.BzrDirMetaFormat1):
1285
stack_on = self.make_branch('stack-on', format='1.9')
1287
stack_on = self.make_branch('stack-on')
1288
config = self.make_bzrdir('.').get_config()
1290
config.set_default_stack_on('stack-on')
1291
except errors.BzrError:
1292
raise TestNotApplicable('Only relevant for stackable formats.')
1293
# Initialize a bzrdir subject to the policy.
1294
t = self.get_transport('stacked')
1295
repo_fmt = bzrdir.format_registry.make_bzrdir('1.9')
1296
repo_name = repo_fmt.repository_format.network_name()
1297
repo, control = self.assertInitializeEx(
1298
t, need_meta=True, repo_format_name=repo_name, stacked_on=None)
1299
# self.addCleanup(repo.unlock)
1301
# uninitialisable format
1303
# There's one fallback repo, with a public location.
1304
self.assertLength(1, repo._fallback_repositories)
1305
fallback_repo = repo._fallback_repositories[0]
1307
stack_on.base, fallback_repo.bzrdir.root_transport.base)
1308
# The bzrdir creates a branch in stacking-capable format.
1309
new_branch = control.create_branch()
1310
self.assertTrue(new_branch._format.supports_stacking())
1312
def test_format_initialize_on_transport_ex_repo_fmt_name_None(self):
1313
t = self.get_transport('dir')
1314
repo, control = self.assertInitializeEx(t)
1315
self.assertEqual(None, repo)
1317
def test_format_initialize_on_transport_ex_repo_fmt_name_followed(self):
1318
t = self.get_transport('dir')
1319
# 1.6 is likely to never be default
1320
fmt = bzrdir.format_registry.make_bzrdir('1.6')
1321
repo_name = fmt.repository_format.network_name()
1322
repo, control = self.assertInitializeEx(t, repo_format_name=repo_name)
1324
# uninitialisable format
1326
if isinstance(self.bzrdir_format, (bzrdir.BzrDirFormat5,
1327
bzrdir.BzrDirFormat6)):
1328
# must stay with the all-in-one-format.
1329
repo_name = self.bzrdir_format.network_name()
1330
self.assertEqual(repo_name, repo._format.network_name())
1332
def assertInitializeEx(self, t, need_meta=False, **kwargs):
1333
"""Execute initialize_on_transport_ex and check it succeeded correctly.
1335
This involves checking that the disk objects were created, open with
1336
the same format returned, and had the expected disk format.
1338
:param t: The transport to initialize on.
1339
:param **kwargs: Additional arguments to pass to
1340
initialize_on_transport_ex.
1341
:return: the resulting repo, control dir tuple.
1343
if not self.bzrdir_format.is_supported():
1344
# Not initializable - not a failure either.
1346
repo, control, require_stacking, repo_policy = \
1347
self.bzrdir_format.initialize_on_transport_ex(t, **kwargs)
1348
if repo is not None:
1349
# Repositories are open write-locked
1350
self.assertTrue(repo.is_write_locked())
1351
self.addCleanup(repo.unlock)
1352
self.assertIsInstance(control, bzrdir.BzrDir)
1353
opened = bzrdir.BzrDir.open(t.base)
1354
expected_format = self.bzrdir_format
1355
if isinstance(expected_format, bzrdir.RemoteBzrDirFormat):
1356
# Current RemoteBzrDirFormat's do not reliably get network_name
1357
# set, so we skip a number of tests for RemoteBzrDirFormat's.
1358
self.assertIsInstance(control, RemoteBzrDir)
1360
if need_meta and isinstance(expected_format, (bzrdir.BzrDirFormat5,
1361
bzrdir.BzrDirFormat6)):
1362
# Pre-metadir formats change when we are making something that
1363
# needs a metaformat, because clone is used for push.
1364
expected_format = bzrdir.BzrDirMetaFormat1()
1365
self.assertEqual(control._format.network_name(),
1366
expected_format.network_name())
1367
self.assertEqual(control._format.network_name(),
1368
opened._format.network_name())
1369
self.assertEqual(control.__class__, opened.__class__)
1370
return repo, control
1372
def test_format_network_name(self):
1373
# All control formats must have a network name.
1374
dir = self.make_bzrdir('.')
1375
format = dir._format
1376
# We want to test that the network_name matches the actual format on
1377
# disk. For local control dirsthat means that using network_name as a
1378
# key in the registry gives back the same format. For remote obects
1379
# we check that the network_name of the RemoteBzrDirFormat we have
1380
# locally matches the actual format present on disk.
1381
if isinstance(format, bzrdir.RemoteBzrDirFormat):
1383
real_dir = dir._real_bzrdir
1384
network_name = format.network_name()
1385
self.assertEqual(real_dir._format.network_name(), network_name)
1387
registry = bzrdir.network_format_registry
1388
network_name = format.network_name()
1389
looked_up_format = registry.get(network_name)
1390
self.assertEqual(format.__class__, looked_up_format.__class__)
1391
# The network name must be a byte string.
1392
self.assertIsInstance(network_name, str)
1145
1394
def test_open_not_bzrdir(self):
1146
1395
# test the formats specific behaviour for no-content or similar dirs.
1147
1396
self.assertRaises(NotBranchError,