267
218
errors.UnstackableRepositoryFormat,
268
219
errors.NotStacked):
270
# Bug: We create a metadir without knowing if it can support stacking,
271
# we should look up the policy needs first, or just use it as a hint,
223
# may need to copy content in
224
repository_policy = result.determine_repository_policy(
225
force_new_repo, stacked_on, self.root_transport.base,
226
require_stacking=require_stacking)
274
227
make_working_trees = local_repo.make_working_trees()
275
want_shared = local_repo.is_shared()
276
repo_format_name = format.repository_format.network_name()
278
make_working_trees = False
280
repo_format_name = None
282
result_repo, result, require_stacking, repository_policy = \
283
format.initialize_on_transport_ex(transport,
284
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
285
force_new_repo=force_new_repo, stacked_on=stacked_on,
286
stack_on_pwd=self.root_transport.base,
287
repo_format_name=repo_format_name,
288
make_working_trees=make_working_trees, shared_repo=want_shared)
291
# If the result repository is in the same place as the
292
# resulting bzr dir, it will have no content, further if the
293
# result is not stacked then we know all content should be
294
# copied, and finally if we are copying up to a specific
295
# revision_id then we can use the pending-ancestry-result which
296
# does not require traversing all of history to describe it.
297
if (result_repo.user_url == result.user_url
298
and not require_stacking and
299
revision_id is not None):
300
fetch_spec = graph.PendingAncestryResult(
301
[revision_id], local_repo)
302
result_repo.fetch(local_repo, fetch_spec=fetch_spec)
304
result_repo.fetch(local_repo, revision_id=revision_id)
308
if result_repo is not None:
309
raise AssertionError('result_repo not None(%r)' % result_repo)
228
result_repo, is_new_repo = repository_policy.acquire_repository(
229
make_working_trees, local_repo.is_shared())
230
if not require_stacking and repository_policy._require_stacking:
231
require_stacking = True
232
result._format.require_stacking()
233
if is_new_repo and not require_stacking and revision_id is not None:
234
fetch_spec = graph.PendingAncestryResult(
235
[revision_id], local_repo)
236
result_repo.fetch(local_repo, fetch_spec=fetch_spec)
238
result_repo.fetch(local_repo, revision_id=revision_id)
310
241
# 1 if there is a branch present
311
242
# make sure its content is available in the target repository
414
336
except errors.NoRepositoryPresent:
417
return False, ([], repository)
418
return True, (bzrdir.list_branches(), None)
420
for branches, repo in BzrDir.find_bzrdirs(transport,
339
return False, (None, repository)
341
branch = bzrdir.open_branch()
342
except errors.NotBranchError:
343
return True, (None, None)
345
return True, (branch, None)
347
for branch, repo in BzrDir.find_bzrdirs(transport, evaluate=evaluate):
422
348
if repo is not None:
423
ret.extend(repo.find_branches())
424
if branches is not None:
349
branches.extend(repo.find_branches())
350
if branch is not None:
351
branches.append(branch)
428
354
def destroy_repository(self):
429
355
"""Destroy the repository in this BzrDir"""
430
356
raise NotImplementedError(self.destroy_repository)
432
def create_branch(self, name=None):
358
def create_branch(self):
433
359
"""Create a branch in this BzrDir.
435
:param name: Name of the colocated branch to create, None for
438
361
The bzrdir's format will control what branch format is created.
439
362
For more control see BranchFormatXX.create(a_bzrdir).
441
364
raise NotImplementedError(self.create_branch)
443
def destroy_branch(self, name=None):
444
"""Destroy a branch in this BzrDir.
446
:param name: Name of the branch to destroy, None for the default
366
def destroy_branch(self):
367
"""Destroy the branch in this BzrDir"""
449
368
raise NotImplementedError(self.destroy_branch)
621
540
:return: Tuple with old path name and new path name
623
def name_gen(base='backup.bzr'):
625
name = "%s.~%d~" % (base, counter)
626
while self.root_transport.has(name):
628
name = "%s.~%d~" % (base, counter)
631
backup_dir=name_gen()
632
542
pb = ui.ui_factory.nested_progress_bar()
634
544
# FIXME: bug 300001 -- the backup fails if the backup directory
635
545
# already exists, but it should instead either remove it or make
636
546
# a new backup directory.
548
# FIXME: bug 262450 -- the backup directory should have the same
549
# permissions as the .bzr directory (probably a bug in copy_tree)
638
550
old_path = self.root_transport.abspath('.bzr')
639
new_path = self.root_transport.abspath(backup_dir)
640
ui.ui_factory.note('making backup of %s\n to %s' % (old_path, new_path,))
641
self.root_transport.copy_tree('.bzr', backup_dir)
551
new_path = self.root_transport.abspath('backup.bzr')
552
pb.note('making backup of %s' % (old_path,))
553
pb.note(' to %s' % (new_path,))
554
self.root_transport.copy_tree('.bzr', 'backup.bzr')
642
555
return (old_path, new_path)
1383
1271
self.create_hook(hooks.HookPoint('pre_open',
1384
1272
"Invoked before attempting to open a BzrDir with the transport "
1385
1273
"that the open will use.", (1, 14), None))
1386
self.create_hook(hooks.HookPoint('post_repo_init',
1387
"Invoked after a repository has been initialized. "
1388
"post_repo_init is called with a "
1389
"bzrlib.bzrdir.RepoInitHookParams.",
1392
1275
# install the default hooks
1393
1276
BzrDir.hooks = BzrDirHooks()
1396
class RepoInitHookParams(object):
1397
"""Object holding parameters passed to *_repo_init hooks.
1399
There are 4 fields that hooks may wish to access:
1401
:ivar repository: Repository created
1402
:ivar format: Repository format
1403
:ivar bzrdir: The bzrdir for the repository
1404
:ivar shared: The repository is shared
1407
def __init__(self, repository, format, a_bzrdir, shared):
1408
"""Create a group of RepoInitHook parameters.
1410
:param repository: Repository created
1411
:param format: Repository format
1412
:param bzrdir: The bzrdir for the repository
1413
:param shared: The repository is shared
1415
self.repository = repository
1416
self.format = format
1417
self.bzrdir = a_bzrdir
1418
self.shared = shared
1420
def __eq__(self, other):
1421
return self.__dict__ == other.__dict__
1425
return "<%s for %s>" % (self.__class__.__name__,
1428
return "<%s for %s>" % (self.__class__.__name__,
1432
1279
class BzrDirPreSplitOut(BzrDir):
1433
1280
"""A common class for the all-in-one formats."""
2022
1822
self._supply_sub_formats_to(remote_format)
2023
1823
return remote_format.initialize_on_transport(transport)
2025
def initialize_on_transport_ex(self, transport, use_existing_dir=False,
2026
create_prefix=False, force_new_repo=False, stacked_on=None,
2027
stack_on_pwd=None, repo_format_name=None, make_working_trees=None,
2028
shared_repo=False, vfs_only=False):
2029
"""Create this format on transport.
2031
The directory to initialize will be created.
2033
:param force_new_repo: Do not use a shared repository for the target,
2034
even if one is available.
2035
:param create_prefix: Create any missing directories leading up to
2037
:param use_existing_dir: Use an existing directory if one exists.
2038
:param stacked_on: A url to stack any created branch on, None to follow
2039
any target stacking policy.
2040
:param stack_on_pwd: If stack_on is relative, the location it is
2042
:param repo_format_name: If non-None, a repository will be
2043
made-or-found. Should none be found, or if force_new_repo is True
2044
the repo_format_name is used to select the format of repository to
2046
:param make_working_trees: Control the setting of make_working_trees
2047
for a new shared repository when one is made. None to use whatever
2048
default the format has.
2049
:param shared_repo: Control whether made repositories are shared or
2051
:param vfs_only: If True do not attempt to use a smart server
2052
:return: repo, bzrdir, require_stacking, repository_policy. repo is
2053
None if none was created or found, bzrdir is always valid.
2054
require_stacking is the result of examining the stacked_on
2055
parameter and any stacking policy found for the target.
2058
# Try to hand off to a smart server
2060
client_medium = transport.get_smart_medium()
2061
except errors.NoSmartMedium:
2064
# TODO: lookup the local format from a server hint.
2065
remote_dir_format = RemoteBzrDirFormat()
2066
remote_dir_format._network_name = self.network_name()
2067
self._supply_sub_formats_to(remote_dir_format)
2068
return remote_dir_format.initialize_on_transport_ex(transport,
2069
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
2070
force_new_repo=force_new_repo, stacked_on=stacked_on,
2071
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
2072
make_working_trees=make_working_trees, shared_repo=shared_repo)
2073
# XXX: Refactor the create_prefix/no_create_prefix code into a
2074
# common helper function
2075
# The destination may not exist - if so make it according to policy.
2076
def make_directory(transport):
2077
transport.mkdir('.')
2079
def redirected(transport, e, redirection_notice):
2080
note(redirection_notice)
2081
return transport._redirected_to(e.source, e.target)
2083
transport = do_catching_redirections(make_directory, transport,
2085
except errors.FileExists:
2086
if not use_existing_dir:
2088
except errors.NoSuchFile:
2089
if not create_prefix:
2091
transport.create_prefix()
2093
require_stacking = (stacked_on is not None)
2094
# Now the target directory exists, but doesn't have a .bzr
2095
# directory. So we need to create it, along with any work to create
2096
# all of the dependent branches, etc.
2098
result = self.initialize_on_transport(transport)
2099
if repo_format_name:
2101
# use a custom format
2102
result._format.repository_format = \
2103
repository.network_format_registry.get(repo_format_name)
2104
except AttributeError:
2105
# The format didn't permit it to be set.
2107
# A repository is desired, either in-place or shared.
2108
repository_policy = result.determine_repository_policy(
2109
force_new_repo, stacked_on, stack_on_pwd,
2110
require_stacking=require_stacking)
2111
result_repo, is_new_repo = repository_policy.acquire_repository(
2112
make_working_trees, shared_repo)
2113
if not require_stacking and repository_policy._require_stacking:
2114
require_stacking = True
2115
result._format.require_stacking()
2116
result_repo.lock_write()
2119
repository_policy = None
2120
return result_repo, result, require_stacking, repository_policy
2122
1825
def _initialize_on_transport_vfs(self, transport):
2123
1826
"""Initialize a new bzrdir using VFS calls.
2336
2039
repository_format = property(__return_repository_format)
2339
class BzrDirFormatAllInOne(BzrDirFormat):
2340
"""Common class for formats before meta-dirs."""
2342
def initialize_on_transport_ex(self, transport, use_existing_dir=False,
2343
create_prefix=False, force_new_repo=False, stacked_on=None,
2344
stack_on_pwd=None, repo_format_name=None, make_working_trees=None,
2346
"""See BzrDirFormat.initialize_on_transport_ex."""
2347
require_stacking = (stacked_on is not None)
2348
# Format 5 cannot stack, but we've been asked to - actually init
2350
if require_stacking:
2351
format = BzrDirMetaFormat1()
2352
return format.initialize_on_transport_ex(transport,
2353
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
2354
force_new_repo=force_new_repo, stacked_on=stacked_on,
2355
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
2356
make_working_trees=make_working_trees, shared_repo=shared_repo)
2357
return BzrDirFormat.initialize_on_transport_ex(self, transport,
2358
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
2359
force_new_repo=force_new_repo, stacked_on=stacked_on,
2360
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
2361
make_working_trees=make_working_trees, shared_repo=shared_repo)
2364
class BzrDirFormat5(BzrDirFormatAllInOne):
2042
class BzrDirFormat5(BzrDirFormat):
2365
2043
"""Bzr control format 5.
2367
2045
This format is a combined format for working tree, branch and repository.
2521
2199
def set_branch_format(self, format):
2522
2200
self._branch_format = format
2524
def require_stacking(self, stack_on=None, possible_transports=None,
2526
"""We have a request to stack, try to ensure the formats support it.
2528
:param stack_on: If supplied, it is the URL to a branch that we want to
2529
stack on. Check to see if that format supports stacking before
2532
# Stacking is desired. requested by the target, but does the place it
2533
# points at support stacking? If it doesn't then we should
2534
# not implicitly upgrade. We check this here.
2535
new_repo_format = None
2536
new_branch_format = None
2538
# a bit of state for get_target_branch so that we don't try to open it
2539
# 2 times, for both repo *and* branch
2540
target = [None, False, None] # target_branch, checked, upgrade anyway
2541
def get_target_branch():
2543
# We've checked, don't check again
2545
if stack_on is None:
2546
# No target format, that means we want to force upgrading
2547
target[:] = [None, True, True]
2550
target_dir = BzrDir.open(stack_on,
2551
possible_transports=possible_transports)
2552
except errors.NotBranchError:
2553
# Nothing there, don't change formats
2554
target[:] = [None, True, False]
2556
except errors.JailBreak:
2557
# JailBreak, JFDI and upgrade anyway
2558
target[:] = [None, True, True]
2561
target_branch = target_dir.open_branch()
2562
except errors.NotBranchError:
2563
# No branch, don't upgrade formats
2564
target[:] = [None, True, False]
2566
target[:] = [target_branch, True, False]
2569
if (not _skip_repo and
2570
not self.repository_format.supports_external_lookups):
2571
# We need to upgrade the Repository.
2572
target_branch, _, do_upgrade = get_target_branch()
2573
if target_branch is None:
2574
# We don't have a target branch, should we upgrade anyway?
2576
# stack_on is inaccessible, JFDI.
2577
# TODO: bad monkey, hard-coded formats...
2578
if self.repository_format.rich_root_data:
2579
new_repo_format = pack_repo.RepositoryFormatKnitPack5RichRoot()
2581
new_repo_format = pack_repo.RepositoryFormatKnitPack5()
2583
# If the target already supports stacking, then we know the
2584
# project is already able to use stacking, so auto-upgrade
2586
new_repo_format = target_branch.repository._format
2587
if not new_repo_format.supports_external_lookups:
2588
# target doesn't, source doesn't, so don't auto upgrade
2590
new_repo_format = None
2591
if new_repo_format is not None:
2592
self.repository_format = new_repo_format
2593
note('Source repository format does not support stacking,'
2594
' using format:\n %s',
2595
new_repo_format.get_format_description())
2202
def require_stacking(self):
2597
2203
if not self.get_branch_format().supports_stacking():
2598
# We just checked the repo, now lets check if we need to
2599
# upgrade the branch format
2600
target_branch, _, do_upgrade = get_target_branch()
2601
if target_branch is None:
2603
# TODO: bad monkey, hard-coded formats...
2604
new_branch_format = branch.BzrBranchFormat7()
2204
# We need to make a stacked branch, but the default format for the
2205
# target doesn't support stacking. So force a branch that *can*
2207
from bzrlib.branch import BzrBranchFormat7
2208
branch_format = BzrBranchFormat7()
2209
self.set_branch_format(branch_format)
2210
mutter("using %r for stacking" % (branch_format,))
2211
from bzrlib.repofmt import pack_repo
2212
if self.repository_format.rich_root_data:
2213
bzrdir_format_name = '1.6.1-rich-root'
2214
repo_format = pack_repo.RepositoryFormatKnitPack5RichRoot()
2606
new_branch_format = target_branch._format
2607
if not new_branch_format.supports_stacking():
2608
new_branch_format = None
2609
if new_branch_format is not None:
2610
# Does support stacking, use its format.
2611
self.set_branch_format(new_branch_format)
2612
note('Source branch format does not support stacking,'
2613
' using format:\n %s',
2614
new_branch_format.get_format_description())
2216
bzrdir_format_name = '1.6'
2217
repo_format = pack_repo.RepositoryFormatKnitPack5()
2218
note('Source format does not support stacking, using format:'
2220
bzrdir_format_name, repo_format.get_format_description())
2221
self.repository_format = repo_format
2616
2223
def get_converter(self, format=None):
2617
2224
"""See BzrDirFormat.get_converter()."""
3308
2880
return local_dir_format.initialize_on_transport(transport)
3309
2881
client = _SmartClient(client_medium)
3310
2882
path = client.remote_path_from_transport(transport)
3312
response = client.call('BzrDirFormat.initialize', path)
3313
except errors.ErrorFromSmartServer, err:
3314
remote._translate_error(err, path=path)
2883
response = client.call('BzrDirFormat.initialize', path)
3315
2884
if response[0] != 'ok':
3316
2885
raise errors.SmartProtocolError('unexpected response code %s' % (response,))
3317
2886
format = RemoteBzrDirFormat()
3318
2887
self._supply_sub_formats_to(format)
3319
2888
return remote.RemoteBzrDir(transport, format)
3321
def parse_NoneTrueFalse(self, arg):
3328
raise AssertionError("invalid arg %r" % arg)
3330
def _serialize_NoneTrueFalse(self, arg):
3337
def _serialize_NoneString(self, arg):
3340
def initialize_on_transport_ex(self, transport, use_existing_dir=False,
3341
create_prefix=False, force_new_repo=False, stacked_on=None,
3342
stack_on_pwd=None, repo_format_name=None, make_working_trees=None,
3345
# hand off the request to the smart server
3346
client_medium = transport.get_smart_medium()
3347
except errors.NoSmartMedium:
3350
# Decline to open it if the server doesn't support our required
3351
# version (3) so that the VFS-based transport will do it.
3352
if client_medium.should_probe():
3354
server_version = client_medium.protocol_version()
3355
if server_version != '2':
3359
except errors.SmartProtocolError:
3360
# Apparently there's no usable smart server there, even though
3361
# the medium supports the smart protocol.
3366
client = _SmartClient(client_medium)
3367
path = client.remote_path_from_transport(transport)
3368
if client_medium._is_remote_before((1, 16)):
3371
# TODO: lookup the local format from a server hint.
3372
local_dir_format = BzrDirMetaFormat1()
3373
self._supply_sub_formats_to(local_dir_format)
3374
return local_dir_format.initialize_on_transport_ex(transport,
3375
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
3376
force_new_repo=force_new_repo, stacked_on=stacked_on,
3377
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
3378
make_working_trees=make_working_trees, shared_repo=shared_repo,
3380
return self._initialize_on_transport_ex_rpc(client, path, transport,
3381
use_existing_dir, create_prefix, force_new_repo, stacked_on,
3382
stack_on_pwd, repo_format_name, make_working_trees, shared_repo)
3384
def _initialize_on_transport_ex_rpc(self, client, path, transport,
3385
use_existing_dir, create_prefix, force_new_repo, stacked_on,
3386
stack_on_pwd, repo_format_name, make_working_trees, shared_repo):
3388
args.append(self._serialize_NoneTrueFalse(use_existing_dir))
3389
args.append(self._serialize_NoneTrueFalse(create_prefix))
3390
args.append(self._serialize_NoneTrueFalse(force_new_repo))
3391
args.append(self._serialize_NoneString(stacked_on))
3392
# stack_on_pwd is often/usually our transport
3395
stack_on_pwd = transport.relpath(stack_on_pwd)
3396
if not stack_on_pwd:
3398
except errors.PathNotChild:
3400
args.append(self._serialize_NoneString(stack_on_pwd))
3401
args.append(self._serialize_NoneString(repo_format_name))
3402
args.append(self._serialize_NoneTrueFalse(make_working_trees))
3403
args.append(self._serialize_NoneTrueFalse(shared_repo))
3404
request_network_name = self._network_name or \
3405
BzrDirFormat.get_default_format().network_name()
3407
response = client.call('BzrDirFormat.initialize_ex_1.16',
3408
request_network_name, path, *args)
3409
except errors.UnknownSmartMethod:
3410
client._medium._remember_remote_is_before((1,16))
3411
local_dir_format = BzrDirMetaFormat1()
3412
self._supply_sub_formats_to(local_dir_format)
3413
return local_dir_format.initialize_on_transport_ex(transport,
3414
use_existing_dir=use_existing_dir, create_prefix=create_prefix,
3415
force_new_repo=force_new_repo, stacked_on=stacked_on,
3416
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
3417
make_working_trees=make_working_trees, shared_repo=shared_repo,
3419
except errors.ErrorFromSmartServer, err:
3420
remote._translate_error(err, path=path)
3421
repo_path = response[0]
3422
bzrdir_name = response[6]
3423
require_stacking = response[7]
3424
require_stacking = self.parse_NoneTrueFalse(require_stacking)
3425
format = RemoteBzrDirFormat()
3426
format._network_name = bzrdir_name
3427
self._supply_sub_formats_to(format)
3428
bzrdir = remote.RemoteBzrDir(transport, format, _client=client)
3430
repo_format = remote.response_tuple_to_repo_format(response[1:])
3431
if repo_path == '.':
3434
repo_bzrdir_format = RemoteBzrDirFormat()
3435
repo_bzrdir_format._network_name = response[5]
3436
repo_bzr = remote.RemoteBzrDir(transport.clone(repo_path),
3440
final_stack = response[8] or None
3441
final_stack_pwd = response[9] or None
3443
final_stack_pwd = urlutils.join(
3444
transport.base, final_stack_pwd)
3445
remote_repo = remote.RemoteRepository(repo_bzr, repo_format)
3446
if len(response) > 10:
3447
# Updated server verb that locks remotely.
3448
repo_lock_token = response[10] or None
3449
remote_repo.lock_write(repo_lock_token, _skip_rpc=True)
3451
remote_repo.dont_leave_lock_in_place()
3453
remote_repo.lock_write()
3454
policy = UseExistingRepository(remote_repo, final_stack,
3455
final_stack_pwd, require_stacking)
3456
policy.acquire_repository()
3460
bzrdir._format.set_branch_format(self.get_branch_format())
3461
if require_stacking:
3462
# The repo has already been created, but we need to make sure that
3463
# we'll make a stackable branch.
3464
bzrdir._format.require_stacking(_skip_repo=True)
3465
return remote_repo, bzrdir, require_stacking, policy
3467
2890
def _open(self, transport):
3468
2891
return remote.RemoteBzrDir(transport, self)
3805
3218
stack_on = self._get_full_stack_on()
3220
# Stacking is desired. requested by the target, but does the place it
3221
# points at support stacking? If it doesn't then we should
3222
# not implicitly upgrade. We check this here.
3807
3223
format = self._bzrdir._format
3808
format.require_stacking(stack_on=stack_on,
3809
possible_transports=[self._bzrdir.root_transport])
3224
if not (format.repository_format.supports_external_lookups
3225
and format.get_branch_format().supports_stacking()):
3226
# May need to upgrade - but only do if the target also
3227
# supports stacking. Note that this currently wastes
3228
# network round trips to check - but we only do this
3229
# when the source can't stack so it will fade away
3230
# as people do upgrade.
3232
target_dir = BzrDir.open(stack_on,
3233
possible_transports=[self._bzrdir.root_transport])
3234
except errors.NotBranchError:
3235
# Nothing there, don't change formats
3239
target_branch = target_dir.open_branch()
3240
except errors.NotBranchError:
3241
# No branch, don't change formats
3244
branch_format = target_branch._format
3245
repo_format = target_branch.repository._format
3246
if not (branch_format.supports_stacking()
3247
and repo_format.supports_external_lookups):
3248
# Doesn't stack itself, don't force an upgrade
3251
# Does support stacking, use its format.
3252
format.repository_format = repo_format
3253
format.set_branch_format(branch_format)
3254
note('Source format does not support stacking, '
3255
'using format: \'%s\'\n %s\n',
3256
branch_format.get_format_description(),
3257
repo_format.get_format_description())
3810
3258
if not self._require_stacking:
3811
3259
# We have picked up automatic stacking somewhere.
3812
3260
note('Using default stacking branch %s at %s', self._stack_on,
4020
3459
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK1',
4021
3460
help='pack-1.9 with 255-way hashed CHK inv, group compress, rich roots '
4023
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
4025
branch_format='bzrlib.branch.BzrBranchFormat7',
4026
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
4031
format_registry.register_metadir('development7-rich-root',
4032
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK2',
4033
help='pack-1.9 with 255-way hashed CHK inv, bencode revision, group compress, '
4034
'rich roots. Please read '
4035
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
4037
branch_format='bzrlib.branch.BzrBranchFormat7',
4038
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
4043
format_registry.register_metadir('2a',
4044
'bzrlib.repofmt.groupcompress_repo.RepositoryFormat2a',
4045
help='First format for bzr 2.0 series.\n'
4046
'Uses group-compress storage.\n'
4047
'Provides rich roots which are a one-way transition.\n',
4048
# 'storage in packs, 255-way hashed CHK inventory, bencode revision, group compress, '
4049
# 'rich roots. Supported by bzr 1.16 and later.',
4050
branch_format='bzrlib.branch.BzrBranchFormat7',
4051
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3462
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
3464
branch_format='bzrlib.branch.BzrBranchFormat7',
3465
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
4052
3467
experimental=True,
4055
3470
# The following format should be an alias for the rich root equivalent
4056
3471
# of the default format
4057
3472
format_registry.register_metadir('default-rich-root',
4058
'bzrlib.repofmt.groupcompress_repo.RepositoryFormat2a',
4059
branch_format='bzrlib.branch.BzrBranchFormat7',
4060
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3473
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack4',
3474
help='Default format, rich root variant. (needed for bzr-svn and bzr-git).',
3475
branch_format='bzrlib.branch.BzrBranchFormat6',
3476
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
4065
3479
# The current format that is made on 'bzr init'.
4066
format_registry.set_default('2a')
3480
format_registry.set_default('pack-0.92')