1
# Copyright (C) 2006-2010 Canonical Ltd
1
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
91
class ControlComponent(object):
92
"""Abstract base class for control directory components.
94
This provides interfaces that are common across bzrdirs,
95
repositories, branches, and workingtree control directories.
97
They all expose two urls and transports: the *user* URL is the
98
one that stops above the control directory (eg .bzr) and that
99
should normally be used in messages, and the *control* URL is
100
under that in eg .bzr/checkout and is used to read the control
103
This can be used as a mixin and is intended to fit with
108
def control_transport(self):
109
raise NotImplementedError
112
def control_url(self):
113
return self.control_transport.base
116
def user_transport(self):
117
raise NotImplementedError
121
return self.user_transport.base
124
class BzrDir(ControlComponent):
125
91
"""A .bzr control diretory.
127
93
BzrDir instances let you create or open any of the things that can be
294
260
# copied, and finally if we are copying up to a specific
295
261
# revision_id then we can use the pending-ancestry-result which
296
262
# 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
263
if (result_repo.bzrdir.root_transport.base ==
264
result.root_transport.base and not require_stacking and
299
265
revision_id is not None):
300
266
fetch_spec = graph.PendingAncestryResult(
301
267
[revision_id], local_repo)
388
354
for subdir in sorted(subdirs, reverse=True):
389
355
pending.append(current_transport.clone(subdir))
391
def list_branches(self):
392
"""Return a sequence of all branches local to this control directory.
396
return [self.open_branch()]
397
except errors.NotBranchError:
401
358
def find_branches(transport):
402
359
"""Find all branches under a transport.
414
371
except errors.NoRepositoryPresent:
417
return False, ([], repository)
418
return True, (bzrdir.list_branches(), None)
420
for branches, repo in BzrDir.find_bzrdirs(transport,
374
return False, (None, repository)
376
branch = bzrdir.open_branch()
377
except errors.NotBranchError:
378
return True, (None, None)
380
return True, (branch, None)
382
for branch, repo in BzrDir.find_bzrdirs(transport, evaluate=evaluate):
422
383
if repo is not None:
423
ret.extend(repo.find_branches())
424
if branches is not None:
384
branches.extend(repo.find_branches())
385
if branch is not None:
386
branches.append(branch)
428
389
def destroy_repository(self):
429
390
"""Destroy the repository in this BzrDir"""
430
391
raise NotImplementedError(self.destroy_repository)
432
def create_branch(self, name=None):
393
def create_branch(self):
433
394
"""Create a branch in this BzrDir.
435
:param name: Name of the colocated branch to create, None for
438
396
The bzrdir's format will control what branch format is created.
439
397
For more control see BranchFormatXX.create(a_bzrdir).
441
399
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
401
def destroy_branch(self):
402
"""Destroy the branch in this BzrDir"""
449
403
raise NotImplementedError(self.destroy_branch)
499
453
except errors.NoRepositoryPresent:
500
454
repository = None
502
if (found_bzrdir.user_url != self.user_url
503
and not repository.is_shared()):
456
if ((found_bzrdir.root_transport.base !=
457
self.root_transport.base) and not repository.is_shared()):
504
458
# Don't look higher, can't use a higher shared repo.
505
459
repository = None
621
575
: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
577
pb = ui.ui_factory.nested_progress_bar()
634
579
# FIXME: bug 300001 -- the backup fails if the backup directory
635
580
# already exists, but it should instead either remove it or make
636
581
# a new backup directory.
583
# FIXME: bug 262450 -- the backup directory should have the same
584
# permissions as the .bzr directory (probably a bug in copy_tree)
638
585
old_path = self.root_transport.abspath('.bzr')
639
new_path = self.root_transport.abspath(backup_dir)
586
new_path = self.root_transport.abspath('backup.bzr')
640
587
ui.ui_factory.note('making backup of %s\n to %s' % (old_path, new_path,))
641
self.root_transport.copy_tree('.bzr', backup_dir)
588
self.root_transport.copy_tree('.bzr', 'backup.bzr')
642
589
return (old_path, new_path)
704
651
next_transport = found_bzrdir.root_transport.clone('..')
705
if (found_bzrdir.user_url == next_transport.base):
652
if (found_bzrdir.root_transport.base == next_transport.base):
706
653
# top of the file system
708
655
# find the next containing bzrdir
725
672
repository = found_bzrdir.open_repository()
726
673
except errors.NoRepositoryPresent:
727
674
return None, False
728
if found_bzrdir.user_url == self.user_url:
675
if found_bzrdir.root_transport.base == self.root_transport.base:
729
676
return repository, True
730
677
elif repository.is_shared():
731
678
return repository, True
737
684
raise errors.NoRepositoryPresent(self)
738
685
return found_repo
740
def get_branch_reference(self, name=None):
687
def get_branch_reference(self):
741
688
"""Return the referenced URL for the branch in this bzrdir.
743
:param name: Optional colocated branch name
744
690
:raises NotBranchError: If there is no Branch.
745
:raises NoColocatedBranchSupport: If a branch name was specified
746
but colocated branches are not supported.
747
691
:return: The URL the branch in this bzrdir references if it is a
748
692
reference branch, or None for regular branches.
751
raise errors.NoColocatedBranchSupport(self)
754
def get_branch_transport(self, branch_format, name=None):
696
def get_branch_transport(self, branch_format):
755
697
"""Get the transport for use by branch format in this BzrDir.
757
699
Note that bzr dirs that do not support format strings will raise
852
794
:param _transport: the transport this dir is based at.
854
796
self._format = _format
855
# these are also under the more standard names of
856
# control_transport and user_transport
857
797
self.transport = _transport.clone('.bzr')
858
798
self.root_transport = _transport
859
799
self._mode_check_done = False
862
def user_transport(self):
863
return self.root_transport
866
def control_transport(self):
867
return self.transport
869
801
def is_control_filename(self, filename):
870
802
"""True if filename is the name of a path which is reserved for bzrdir's.
945
877
BzrDir._check_supported(format, _unsupported)
946
878
return format.open(transport, _found=True)
948
def open_branch(self, name=None, unsupported=False,
949
ignore_fallbacks=False):
880
def open_branch(self, unsupported=False, ignore_fallbacks=False):
950
881
"""Open the branch object at this BzrDir if one is present.
952
883
If unsupported is True, then no longer supported branch formats can
999
930
raise errors.NotBranchError(path=url)
1000
931
a_transport = new_t
1002
def _get_tree_branch(self, name=None):
933
def _get_tree_branch(self):
1003
934
"""Return the branch and tree, if any, for this bzrdir.
1005
:param name: Name of colocated branch to open.
1007
936
Return None for tree if not present or inaccessible.
1008
937
Raise NotBranchError if no branch is present.
1009
938
:return: (tree, branch)
1012
941
tree = self.open_workingtree()
1013
942
except (errors.NoWorkingTree, errors.NotLocalUrl):
1015
branch = self.open_branch(name=name)
944
branch = self.open_branch()
1017
if name is not None:
1018
branch = self.open_branch(name=name)
1020
branch = tree.branch
1021
947
return tree, branch
1096
1022
raise NotImplementedError(self.open_workingtree)
1098
def has_branch(self, name=None):
1024
def has_branch(self):
1099
1025
"""Tell if this bzrdir contains a branch.
1101
1027
Note: if you're going to open the branch, you should just go ahead
1383
1309
self.create_hook(hooks.HookPoint('pre_open',
1384
1310
"Invoked before attempting to open a BzrDir with the transport "
1385
1311
"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
1313
# install the default hooks
1393
1314
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
1317
class BzrDirPreSplitOut(BzrDir):
1433
1318
"""A common class for the all-in-one formats."""
1473
1358
tree.clone(result)
1476
def create_branch(self, name=None):
1361
def create_branch(self):
1477
1362
"""See BzrDir.create_branch."""
1478
return self._format.get_branch_format().initialize(self, name=name)
1363
return self._format.get_branch_format().initialize(self)
1480
def destroy_branch(self, name=None):
1365
def destroy_branch(self):
1481
1366
"""See BzrDir.destroy_branch."""
1482
1367
raise errors.UnsupportedOperation(self.destroy_branch, self)
1539
1424
raise errors.UnsupportedOperation(self.destroy_workingtree_metadata,
1542
def get_branch_transport(self, branch_format, name=None):
1427
def get_branch_transport(self, branch_format):
1543
1428
"""See BzrDir.get_branch_transport()."""
1544
if name is not None:
1545
raise errors.NoColocatedBranchSupport(self)
1546
1429
if branch_format is None:
1547
1430
return self.transport
1581
1464
format = BzrDirFormat.get_default_format()
1582
1465
return not isinstance(self._format, format.__class__)
1584
def open_branch(self, name=None, unsupported=False,
1585
ignore_fallbacks=False):
1467
def open_branch(self, unsupported=False, ignore_fallbacks=False):
1586
1468
"""See BzrDir.open_branch."""
1587
1469
from bzrlib.branch import BzrBranchFormat4
1588
1470
format = BzrBranchFormat4()
1589
1471
self._check_supported(format, unsupported)
1590
return format.open(self, name, _found=True)
1472
return format.open(self, _found=True)
1592
1474
def sprout(self, url, revision_id=None, force_new_repo=False,
1593
1475
possible_transports=None, accelerator_tree=None,
1710
1592
"""See BzrDir.can_convert_format()."""
1713
def create_branch(self, name=None):
1595
def create_branch(self):
1714
1596
"""See BzrDir.create_branch."""
1715
return self._format.get_branch_format().initialize(self, name=name)
1597
return self._format.get_branch_format().initialize(self)
1717
def destroy_branch(self, name=None):
1599
def destroy_branch(self):
1718
1600
"""See BzrDir.create_branch."""
1719
if name is not None:
1720
raise errors.NoColocatedBranchSupport(self)
1721
1601
self.transport.delete_tree('branch')
1723
1603
def create_repository(self, shared=False):
1746
1626
def destroy_workingtree_metadata(self):
1747
1627
self.transport.delete_tree('checkout')
1749
def find_branch_format(self, name=None):
1629
def find_branch_format(self):
1750
1630
"""Find the branch 'format' for this bzrdir.
1752
1632
This might be a synthetic object for e.g. RemoteBranch and SVN.
1754
1634
from bzrlib.branch import BranchFormat
1755
return BranchFormat.find_format(self, name=name)
1635
return BranchFormat.find_format(self)
1757
1637
def _get_mkdir_mode(self):
1758
1638
"""Figure out the mode to use when creating a bzrdir subdir."""
1760
1640
lockable_files.TransportLock)
1761
1641
return temp_control._dir_mode
1763
def get_branch_reference(self, name=None):
1643
def get_branch_reference(self):
1764
1644
"""See BzrDir.get_branch_reference()."""
1765
1645
from bzrlib.branch import BranchFormat
1766
format = BranchFormat.find_format(self, name=name)
1767
return format.get_reference(self, name=name)
1646
format = BranchFormat.find_format(self)
1647
return format.get_reference(self)
1769
def get_branch_transport(self, branch_format, name=None):
1649
def get_branch_transport(self, branch_format):
1770
1650
"""See BzrDir.get_branch_transport()."""
1771
if name is not None:
1772
raise errors.NoColocatedBranchSupport(self)
1773
1651
# XXX: this shouldn't implicitly create the directory if it's just
1774
1652
# promising to get a transport -- mbp 20090727
1775
1653
if branch_format is None:
1847
1725
except errors.NoRepositoryPresent:
1849
for branch in self.list_branches():
1850
if not isinstance(branch._format,
1728
if not isinstance(self.open_branch()._format,
1851
1729
format.get_branch_format().__class__):
1852
1730
# the branch needs an upgrade.
1732
except errors.NotBranchError:
1855
1735
my_wt = self.open_workingtree(recommend_upgrade=False)
1856
1736
if not isinstance(my_wt._format,
1864
def open_branch(self, name=None, unsupported=False,
1865
ignore_fallbacks=False):
1744
def open_branch(self, unsupported=False, ignore_fallbacks=False):
1866
1745
"""See BzrDir.open_branch."""
1867
format = self.find_branch_format(name=name)
1746
format = self.find_branch_format()
1868
1747
self._check_supported(format, unsupported)
1869
return format.open(self, name=name,
1870
_found=True, ignore_fallbacks=ignore_fallbacks)
1748
return format.open(self, _found=True, ignore_fallbacks=ignore_fallbacks)
1872
1750
def open_repository(self, unsupported=False):
1873
1751
"""See BzrDir.open_repository."""
1905
1783
Once a format is deprecated, just deprecate the initialize and open
1906
1784
methods on the format class. Do not deprecate the object, as the
1907
1785
object will be created every system load.
1909
:cvar colocated_branches: Whether this formats supports colocated branches.
1912
1788
_default_format = None
1930
1806
_lock_file_name = 'branch-lock'
1932
colocated_branches = False
1933
"""Whether co-located branches are supported for this control dir format.
1936
1808
# _lock_class must be set in subclasses to the lock type, typ.
1937
1809
# TransportLock or LockDir
1955
1827
def probe_transport(klass, transport):
1956
1828
"""Return the .bzrdir style format present in a directory."""
1958
format_string = transport.get_bytes(".bzr/branch-format")
1830
format_string = transport.get(".bzr/branch-format").read()
1959
1831
except errors.NoSuchFile:
1960
1832
raise errors.NotBranchError(path=transport.base)
2737
2609
def convert(self, to_convert, pb):
2738
2610
"""See Converter.convert()."""
2739
2611
self.bzrdir = to_convert
2741
warnings.warn("pb parameter to convert() is deprecated")
2742
self.pb = ui.ui_factory.nested_progress_bar()
2744
ui.ui_factory.note('starting upgrade from format 4 to 5')
2745
if isinstance(self.bzrdir.transport, local.LocalTransport):
2746
self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
2747
self._convert_to_weaves()
2748
return BzrDir.open(self.bzrdir.user_url)
2613
ui.ui_factory.note('starting upgrade from format 4 to 5')
2614
if isinstance(self.bzrdir.transport, local.LocalTransport):
2615
self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
2616
self._convert_to_weaves()
2617
return BzrDir.open(self.bzrdir.root_transport.base)
2752
2619
def _convert_to_weaves(self):
2753
2620
ui.ui_factory.note('note: upgrade may be faster if all store files are ungzipped first')
2994
2861
def convert(self, to_convert, pb):
2995
2862
"""See Converter.convert()."""
2996
2863
self.bzrdir = to_convert
2997
pb = ui.ui_factory.nested_progress_bar()
2999
ui.ui_factory.note('starting upgrade from format 5 to 6')
3000
self._convert_to_prefixed()
3001
return BzrDir.open(self.bzrdir.user_url)
2865
ui.ui_factory.note('starting upgrade from format 5 to 6')
2866
self._convert_to_prefixed()
2867
return BzrDir.open(self.bzrdir.root_transport.base)
3005
2869
def _convert_to_prefixed(self):
3006
2870
from bzrlib.store import TransportStore
3039
2903
from bzrlib.repofmt.weaverepo import RepositoryFormat7
3040
2904
from bzrlib.branch import BzrBranchFormat5
3041
2905
self.bzrdir = to_convert
3042
self.pb = ui.ui_factory.nested_progress_bar()
3044
2908
self.total = 20 # the steps we know about
3045
2909
self.garbage_inventories = []
3125
2989
'branch-format',
3126
2990
BzrDirMetaFormat1().get_format_string(),
3127
2991
mode=self.file_mode)
3129
return BzrDir.open(self.bzrdir.user_url)
2992
return BzrDir.open(self.bzrdir.root_transport.base)
3131
2994
def make_lock(self, name):
3132
2995
"""Make a lock for the new control dir name."""
3167
3030
def convert(self, to_convert, pb):
3168
3031
"""See Converter.convert()."""
3169
3032
self.bzrdir = to_convert
3170
self.pb = ui.ui_factory.nested_progress_bar()
3173
3036
self.step('checking repository format')
3181
3044
ui.ui_factory.note('starting repository conversion')
3182
3045
converter = CopyConverter(self.target_format.repository_format)
3183
3046
converter.convert(repo, pb)
3184
for branch in self.bzrdir.list_branches():
3048
branch = self.bzrdir.open_branch()
3049
except errors.NotBranchError:
3185
3052
# TODO: conversions of Branch and Tree should be done by
3186
3053
# InterXFormat lookups/some sort of registry.
3187
3054
# Avoid circular imports
3243
3109
def __init__(self):
3244
3110
BzrDirMetaFormat1.__init__(self)
3245
# XXX: It's a bit ugly that the network name is here, because we'd
3246
# like to believe that format objects are stateless or at least
3247
# immutable, However, we do at least avoid mutating the name after
3248
# it's returned. See <https://bugs.edge.launchpad.net/bzr/+bug/504102>
3249
3111
self._network_name = None
3252
return "%s(_network_name=%r)" % (self.__class__.__name__,
3255
3113
def get_format_description(self):
3256
3114
if self._network_name:
3257
3115
real_format = network_format_registry.get(self._network_name)
3394
3252
args.append(self._serialize_NoneString(repo_format_name))
3395
3253
args.append(self._serialize_NoneTrueFalse(make_working_trees))
3396
3254
args.append(self._serialize_NoneTrueFalse(shared_repo))
3397
request_network_name = self._network_name or \
3255
if self._network_name is None:
3256
self._network_name = \
3398
3257
BzrDirFormat.get_default_format().network_name()
3400
3259
response = client.call('BzrDirFormat.initialize_ex_1.16',
3401
request_network_name, path, *args)
3260
self.network_name(), path, *args)
3402
3261
except errors.UnknownSmartMethod:
3403
3262
client._medium._remember_remote_is_before((1,16))
3404
3263
local_dir_format = BzrDirMetaFormat1()
3654
3513
experimental_pairs.append((key, help))
3656
3515
output += wrapped(key, help, info)
3657
output += "\nSee :doc:`formats-help` for more about storage formats."
3516
output += "\nSee ``bzr help formats`` for more about storage formats."
3658
3517
other_output = ""
3659
3518
if len(experimental_pairs) > 0:
3660
3519
other_output += "Experimental formats are shown below.\n\n"
3714
3573
stack_on = urlutils.rebase_url(self._stack_on,
3715
3574
self._stack_on_pwd,
3575
branch.bzrdir.root_transport.base)
3717
3576
except errors.InvalidRebaseURLs:
3718
3577
stack_on = self._get_full_stack_on()
3848
3707
format_registry.register('weave', BzrDirFormat6,
3849
3708
'Pre-0.8 format. Slower than knit and does not'
3850
3709
' support checkouts or shared repositories.',
3852
3710
deprecated=True)
3853
3711
format_registry.register_metadir('metaweave',
3854
3712
'bzrlib.repofmt.weaverepo.RepositoryFormat7',
3855
3713
'Transitional format in 0.8. Slower than knit.',
3856
3714
branch_format='bzrlib.branch.BzrBranchFormat5',
3857
3715
tree_format='bzrlib.workingtree.WorkingTreeFormat3',
3859
3716
deprecated=True)
3860
3717
format_registry.register_metadir('knit',
3861
3718
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3862
3719
'Format using knits. Recommended for interoperation with bzr <= 0.14.',
3863
3720
branch_format='bzrlib.branch.BzrBranchFormat5',
3864
3721
tree_format='bzrlib.workingtree.WorkingTreeFormat3',
3866
3722
deprecated=True)
3867
3723
format_registry.register_metadir('dirstate',
3868
3724
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3872
3728
# this uses bzrlib.workingtree.WorkingTreeFormat4 because importing
3873
3729
# directly from workingtree_4 triggers a circular import.
3874
3730
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3876
3731
deprecated=True)
3877
3732
format_registry.register_metadir('dirstate-tags',
3878
3733
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3881
3736
' Incompatible with bzr < 0.15.',
3882
3737
branch_format='bzrlib.branch.BzrBranchFormat6',
3883
3738
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3885
3739
deprecated=True)
3886
3740
format_registry.register_metadir('rich-root',
3887
3741
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit4',
3890
3744
branch_format='bzrlib.branch.BzrBranchFormat6',
3891
3745
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3893
3746
deprecated=True)
3894
3747
format_registry.register_metadir('dirstate-with-subtree',
3895
3748
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
3906
3759
help='New in 0.92: Pack-based format with data compatible with '
3907
3760
'dirstate-tags format repositories. Interoperates with '
3908
3761
'bzr repositories before 0.92 but cannot be read by bzr < 0.92. '
3762
'Previously called knitpack-experimental. '
3763
'For more information, see '
3764
'http://doc.bazaar-vcs.org/latest/developers/packrepo.html.',
3910
3765
branch_format='bzrlib.branch.BzrBranchFormat6',
3911
3766
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3915
3770
help='New in 0.92: Pack-based format with data compatible with '
3916
3771
'dirstate-with-subtree format repositories. Interoperates with '
3917
3772
'bzr repositories before 0.92 but cannot be read by bzr < 0.92. '
3773
'Previously called knitpack-experimental. '
3774
'For more information, see '
3775
'http://doc.bazaar-vcs.org/latest/developers/packrepo.html.',
3919
3776
branch_format='bzrlib.branch.BzrBranchFormat6',
3920
3777
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3927
3784
'(needed for bzr-svn and bzr-git).',
3928
3785
branch_format='bzrlib.branch.BzrBranchFormat6',
3929
3786
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3932
3788
format_registry.register_metadir('1.6',
3933
3789
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack5',
3936
3792
'not present locally.',
3937
3793
branch_format='bzrlib.branch.BzrBranchFormat7',
3938
3794
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3941
3796
format_registry.register_metadir('1.6.1-rich-root',
3942
3797
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack5RichRoot',
3944
3799
'(needed for bzr-svn and bzr-git).',
3945
3800
branch_format='bzrlib.branch.BzrBranchFormat7',
3946
3801
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3949
3803
format_registry.register_metadir('1.9',
3950
3804
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6',
3953
3807
'performance for most operations.',
3954
3808
branch_format='bzrlib.branch.BzrBranchFormat7',
3955
3809
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3958
3811
format_registry.register_metadir('1.9-rich-root',
3959
3812
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6RichRoot',
3961
3814
'(needed for bzr-svn and bzr-git).',
3962
3815
branch_format='bzrlib.branch.BzrBranchFormat7',
3963
3816
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3966
3818
format_registry.register_metadir('1.14',
3967
3819
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6',
3983
3835
'to and from rich-root-pack (and anything compatible with '
3984
3836
'rich-root-pack) format repositories. Repositories and branches in '
3985
3837
'this format can only be read by bzr.dev. Please read '
3986
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3838
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
3988
3840
branch_format='bzrlib.branch.BzrBranchFormat7',
3989
3841
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3990
3842
experimental=True,
3994
3845
format_registry.register_metadir('development-subtree',
3995
3846
'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment2Subtree',
3997
3848
'from pack-0.92-subtree (and anything compatible with '
3998
3849
'pack-0.92-subtree) format repositories. Repositories and branches in '
3999
3850
'this format can only be read by bzr.dev. Please read '
4000
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3851
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
4002
3853
branch_format='bzrlib.branch.BzrBranchFormat7',
4003
3854
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
4004
3855
experimental=True,
4006
3856
alias=False, # Restore to being an alias when an actual development subtree format is added
4007
3857
# This current non-alias status is simply because we did not introduce a
4008
3858
# chk based subtree format.
4013
3863
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK1',
4014
3864
help='pack-1.9 with 255-way hashed CHK inv, group compress, rich roots '
4016
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3866
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
4018
3868
branch_format='bzrlib.branch.BzrBranchFormat7',
4019
3869
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
4025
3875
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK2',
4026
3876
help='pack-1.9 with 255-way hashed CHK inv, bencode revision, group compress, '
4027
3877
'rich roots. Please read '
4028
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3878
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
4030
3880
branch_format='bzrlib.branch.BzrBranchFormat7',
4031
3881
tree_format='bzrlib.workingtree.WorkingTreeFormat6',