1
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
1
# Copyright (C) 2006-2010 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):
91
125
"""A .bzr control diretory.
93
127
BzrDir instances let you create or open any of the things that can be
260
294
# copied, and finally if we are copying up to a specific
261
295
# revision_id then we can use the pending-ancestry-result which
262
296
# does not require traversing all of history to describe it.
263
if (result_repo.bzrdir.root_transport.base ==
264
result.root_transport.base and not require_stacking and
297
if (result_repo.user_url == result.user_url
298
and not require_stacking and
265
299
revision_id is not None):
266
300
fetch_spec = graph.PendingAncestryResult(
267
301
[revision_id], local_repo)
354
388
for subdir in sorted(subdirs, reverse=True):
355
389
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:
358
401
def find_branches(transport):
359
402
"""Find all branches under a transport.
371
414
except errors.NoRepositoryPresent:
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):
417
return False, ([], repository)
418
return True, (bzrdir.list_branches(), None)
420
for branches, repo in BzrDir.find_bzrdirs(transport,
383
422
if repo is not None:
384
branches.extend(repo.find_branches())
385
if branch is not None:
386
branches.append(branch)
423
ret.extend(repo.find_branches())
424
if branches is not None:
389
428
def destroy_repository(self):
390
429
"""Destroy the repository in this BzrDir"""
391
430
raise NotImplementedError(self.destroy_repository)
393
def create_branch(self):
432
def create_branch(self, name=None):
394
433
"""Create a branch in this BzrDir.
435
:param name: Name of the colocated branch to create, None for
396
438
The bzrdir's format will control what branch format is created.
397
439
For more control see BranchFormatXX.create(a_bzrdir).
399
441
raise NotImplementedError(self.create_branch)
401
def destroy_branch(self):
402
"""Destroy the branch in this BzrDir"""
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
403
449
raise NotImplementedError(self.destroy_branch)
453
499
except errors.NoRepositoryPresent:
454
500
repository = None
456
if ((found_bzrdir.root_transport.base !=
457
self.root_transport.base) and not repository.is_shared()):
502
if (found_bzrdir.user_url != self.user_url
503
and not repository.is_shared()):
458
504
# Don't look higher, can't use a higher shared repo.
459
505
repository = None
575
621
: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()
577
632
pb = ui.ui_factory.nested_progress_bar()
579
634
# FIXME: bug 300001 -- the backup fails if the backup directory
580
635
# already exists, but it should instead either remove it or make
581
636
# 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)
585
638
old_path = self.root_transport.abspath('.bzr')
586
new_path = self.root_transport.abspath('backup.bzr')
639
new_path = self.root_transport.abspath(backup_dir)
587
640
ui.ui_factory.note('making backup of %s\n to %s' % (old_path, new_path,))
588
self.root_transport.copy_tree('.bzr', 'backup.bzr')
641
self.root_transport.copy_tree('.bzr', backup_dir)
589
642
return (old_path, new_path)
651
704
next_transport = found_bzrdir.root_transport.clone('..')
652
if (found_bzrdir.root_transport.base == next_transport.base):
705
if (found_bzrdir.user_url == next_transport.base):
653
706
# top of the file system
655
708
# find the next containing bzrdir
672
725
repository = found_bzrdir.open_repository()
673
726
except errors.NoRepositoryPresent:
674
727
return None, False
675
if found_bzrdir.root_transport.base == self.root_transport.base:
728
if found_bzrdir.user_url == self.user_url:
676
729
return repository, True
677
730
elif repository.is_shared():
678
731
return repository, True
696
def get_branch_transport(self, branch_format):
749
def get_branch_transport(self, branch_format, name=None):
697
750
"""Get the transport for use by branch format in this BzrDir.
699
752
Note that bzr dirs that do not support format strings will raise
794
847
:param _transport: the transport this dir is based at.
796
849
self._format = _format
850
# these are also under the more standard names of
851
# control_transport and user_transport
797
852
self.transport = _transport.clone('.bzr')
798
853
self.root_transport = _transport
799
854
self._mode_check_done = False
857
def user_transport(self):
858
return self.root_transport
861
def control_transport(self):
862
return self.transport
801
864
def is_control_filename(self, filename):
802
865
"""True if filename is the name of a path which is reserved for bzrdir's.
877
940
BzrDir._check_supported(format, _unsupported)
878
941
return format.open(transport, _found=True)
880
def open_branch(self, unsupported=False, ignore_fallbacks=False):
943
def open_branch(self, name=None, unsupported=False,
944
ignore_fallbacks=False):
881
945
"""Open the branch object at this BzrDir if one is present.
883
947
If unsupported is True, then no longer supported branch formats can
1022
1086
raise NotImplementedError(self.open_workingtree)
1024
def has_branch(self):
1088
def has_branch(self, name=None):
1025
1089
"""Tell if this bzrdir contains a branch.
1027
1091
Note: if you're going to open the branch, you should just go ahead
1309
1373
self.create_hook(hooks.HookPoint('pre_open',
1310
1374
"Invoked before attempting to open a BzrDir with the transport "
1311
1375
"that the open will use.", (1, 14), None))
1376
self.create_hook(hooks.HookPoint('post_repo_init',
1377
"Invoked after a repository has been initialized. "
1378
"post_repo_init is called with a "
1379
"bzrlib.bzrdir.RepoInitHookParams.",
1313
1382
# install the default hooks
1314
1383
BzrDir.hooks = BzrDirHooks()
1386
class RepoInitHookParams(object):
1387
"""Object holding parameters passed to *_repo_init hooks.
1389
There are 4 fields that hooks may wish to access:
1391
:ivar repository: Repository created
1392
:ivar format: Repository format
1393
:ivar bzrdir: The bzrdir for the repository
1394
:ivar shared: The repository is shared
1397
def __init__(self, repository, format, a_bzrdir, shared):
1398
"""Create a group of RepoInitHook parameters.
1400
:param repository: Repository created
1401
:param format: Repository format
1402
:param bzrdir: The bzrdir for the repository
1403
:param shared: The repository is shared
1405
self.repository = repository
1406
self.format = format
1407
self.bzrdir = a_bzrdir
1408
self.shared = shared
1410
def __eq__(self, other):
1411
return self.__dict__ == other.__dict__
1415
return "<%s for %s>" % (self.__class__.__name__,
1418
return "<%s for %s>" % (self.__class__.__name__,
1317
1422
class BzrDirPreSplitOut(BzrDir):
1318
1423
"""A common class for the all-in-one formats."""
1358
1463
tree.clone(result)
1361
def create_branch(self):
1466
def create_branch(self, name=None):
1362
1467
"""See BzrDir.create_branch."""
1363
return self._format.get_branch_format().initialize(self)
1468
return self._format.get_branch_format().initialize(self, name=name)
1365
def destroy_branch(self):
1470
def destroy_branch(self, name=None):
1366
1471
"""See BzrDir.destroy_branch."""
1367
1472
raise errors.UnsupportedOperation(self.destroy_branch, self)
1424
1529
raise errors.UnsupportedOperation(self.destroy_workingtree_metadata,
1427
def get_branch_transport(self, branch_format):
1532
def get_branch_transport(self, branch_format, name=None):
1428
1533
"""See BzrDir.get_branch_transport()."""
1534
if name is not None:
1535
raise errors.NoColocatedBranchSupport(self)
1429
1536
if branch_format is None:
1430
1537
return self.transport
1464
1571
format = BzrDirFormat.get_default_format()
1465
1572
return not isinstance(self._format, format.__class__)
1467
def open_branch(self, unsupported=False, ignore_fallbacks=False):
1574
def open_branch(self, name=None, unsupported=False,
1575
ignore_fallbacks=False):
1468
1576
"""See BzrDir.open_branch."""
1469
1577
from bzrlib.branch import BzrBranchFormat4
1470
1578
format = BzrBranchFormat4()
1471
1579
self._check_supported(format, unsupported)
1472
return format.open(self, _found=True)
1580
return format.open(self, name, _found=True)
1474
1582
def sprout(self, url, revision_id=None, force_new_repo=False,
1475
1583
possible_transports=None, accelerator_tree=None,
1592
1700
"""See BzrDir.can_convert_format()."""
1595
def create_branch(self):
1703
def create_branch(self, name=None):
1596
1704
"""See BzrDir.create_branch."""
1597
return self._format.get_branch_format().initialize(self)
1705
return self._format.get_branch_format().initialize(self, name=name)
1599
def destroy_branch(self):
1707
def destroy_branch(self, name=None):
1600
1708
"""See BzrDir.create_branch."""
1709
if name is not None:
1710
raise errors.NoColocatedBranchSupport(self)
1601
1711
self.transport.delete_tree('branch')
1603
1713
def create_repository(self, shared=False):
1646
1756
format = BranchFormat.find_format(self)
1647
1757
return format.get_reference(self)
1649
def get_branch_transport(self, branch_format):
1759
def get_branch_transport(self, branch_format, name=None):
1650
1760
"""See BzrDir.get_branch_transport()."""
1761
if name is not None:
1762
raise errors.NoColocatedBranchSupport(self)
1651
1763
# XXX: this shouldn't implicitly create the directory if it's just
1652
1764
# promising to get a transport -- mbp 20090727
1653
1765
if branch_format is None:
1725
1837
except errors.NoRepositoryPresent:
1728
if not isinstance(self.open_branch()._format,
1839
for branch in self.list_branches():
1840
if not isinstance(branch._format,
1729
1841
format.get_branch_format().__class__):
1730
1842
# the branch needs an upgrade.
1732
except errors.NotBranchError:
1735
1845
my_wt = self.open_workingtree(recommend_upgrade=False)
1736
1846
if not isinstance(my_wt._format,
1744
def open_branch(self, unsupported=False, ignore_fallbacks=False):
1854
def open_branch(self, name=None, unsupported=False,
1855
ignore_fallbacks=False):
1745
1856
"""See BzrDir.open_branch."""
1746
1857
format = self.find_branch_format()
1747
1858
self._check_supported(format, unsupported)
1748
return format.open(self, _found=True, ignore_fallbacks=ignore_fallbacks)
1859
return format.open(self, name=name,
1860
_found=True, ignore_fallbacks=ignore_fallbacks)
1750
1862
def open_repository(self, unsupported=False):
1751
1863
"""See BzrDir.open_repository."""
1783
1895
Once a format is deprecated, just deprecate the initialize and open
1784
1896
methods on the format class. Do not deprecate the object, as the
1785
1897
object will be created every system load.
1899
:cvar colocated_branches: Whether this formats supports colocated branches.
1788
1902
_default_format = None
1806
1920
_lock_file_name = 'branch-lock'
1922
colocated_branches = False
1923
"""Whether co-located branches are supported for this control dir format.
1808
1926
# _lock_class must be set in subclasses to the lock type, typ.
1809
1927
# TransportLock or LockDir
1827
1945
def probe_transport(klass, transport):
1828
1946
"""Return the .bzrdir style format present in a directory."""
1830
format_string = transport.get(".bzr/branch-format").read()
1948
format_string = transport.get_bytes(".bzr/branch-format")
1831
1949
except errors.NoSuchFile:
1832
1950
raise errors.NotBranchError(path=transport.base)
2609
2727
def convert(self, to_convert, pb):
2610
2728
"""See Converter.convert()."""
2611
2729
self.bzrdir = to_convert
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)
2731
warnings.warn("pb parameter to convert() is deprecated")
2732
self.pb = ui.ui_factory.nested_progress_bar()
2734
ui.ui_factory.note('starting upgrade from format 4 to 5')
2735
if isinstance(self.bzrdir.transport, local.LocalTransport):
2736
self.bzrdir.get_workingtree_transport(None).delete('stat-cache')
2737
self._convert_to_weaves()
2738
return BzrDir.open(self.bzrdir.user_url)
2619
2742
def _convert_to_weaves(self):
2620
2743
ui.ui_factory.note('note: upgrade may be faster if all store files are ungzipped first')
2861
2984
def convert(self, to_convert, pb):
2862
2985
"""See Converter.convert()."""
2863
2986
self.bzrdir = to_convert
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)
2987
pb = ui.ui_factory.nested_progress_bar()
2989
ui.ui_factory.note('starting upgrade from format 5 to 6')
2990
self._convert_to_prefixed()
2991
return BzrDir.open(self.bzrdir.user_url)
2869
2995
def _convert_to_prefixed(self):
2870
2996
from bzrlib.store import TransportStore
2903
3029
from bzrlib.repofmt.weaverepo import RepositoryFormat7
2904
3030
from bzrlib.branch import BzrBranchFormat5
2905
3031
self.bzrdir = to_convert
3032
self.pb = ui.ui_factory.nested_progress_bar()
2908
3034
self.total = 20 # the steps we know about
2909
3035
self.garbage_inventories = []
2989
3115
'branch-format',
2990
3116
BzrDirMetaFormat1().get_format_string(),
2991
3117
mode=self.file_mode)
2992
return BzrDir.open(self.bzrdir.root_transport.base)
3119
return BzrDir.open(self.bzrdir.user_url)
2994
3121
def make_lock(self, name):
2995
3122
"""Make a lock for the new control dir name."""
3030
3157
def convert(self, to_convert, pb):
3031
3158
"""See Converter.convert()."""
3032
3159
self.bzrdir = to_convert
3160
self.pb = ui.ui_factory.nested_progress_bar()
3036
3163
self.step('checking repository format')
3044
3171
ui.ui_factory.note('starting repository conversion')
3045
3172
converter = CopyConverter(self.target_format.repository_format)
3046
3173
converter.convert(repo, pb)
3048
branch = self.bzrdir.open_branch()
3049
except errors.NotBranchError:
3174
for branch in self.bzrdir.list_branches():
3052
3175
# TODO: conversions of Branch and Tree should be done by
3053
3176
# InterXFormat lookups/some sort of registry.
3054
3177
# Avoid circular imports
3109
3233
def __init__(self):
3110
3234
BzrDirMetaFormat1.__init__(self)
3235
# XXX: It's a bit ugly that the network name is here, because we'd
3236
# like to believe that format objects are stateless or at least
3237
# immutable, However, we do at least avoid mutating the name after
3238
# it's returned. See <https://bugs.edge.launchpad.net/bzr/+bug/504102>
3111
3239
self._network_name = None
3242
return "%s(_network_name=%r)" % (self.__class__.__name__,
3113
3245
def get_format_description(self):
3246
if self._network_name:
3247
real_format = network_format_registry.get(self._network_name)
3248
return 'Remote: ' + real_format.get_format_description()
3114
3249
return 'bzr remote bzrdir'
3116
3251
def get_format_string(self):
3249
3384
args.append(self._serialize_NoneString(repo_format_name))
3250
3385
args.append(self._serialize_NoneTrueFalse(make_working_trees))
3251
3386
args.append(self._serialize_NoneTrueFalse(shared_repo))
3252
if self._network_name is None:
3253
self._network_name = \
3387
request_network_name = self._network_name or \
3254
3388
BzrDirFormat.get_default_format().network_name()
3256
3390
response = client.call('BzrDirFormat.initialize_ex_1.16',
3257
self.network_name(), path, *args)
3391
request_network_name, path, *args)
3258
3392
except errors.UnknownSmartMethod:
3259
3393
client._medium._remember_remote_is_before((1,16))
3260
3394
local_dir_format = BzrDirMetaFormat1()
3510
3644
experimental_pairs.append((key, help))
3512
3646
output += wrapped(key, help, info)
3513
output += "\nSee ``bzr help formats`` for more about storage formats."
3647
output += "\nSee :doc:`formats-help` for more about storage formats."
3514
3648
other_output = ""
3515
3649
if len(experimental_pairs) > 0:
3516
3650
other_output += "Experimental formats are shown below.\n\n"
3570
3704
stack_on = urlutils.rebase_url(self._stack_on,
3571
3705
self._stack_on_pwd,
3572
branch.bzrdir.root_transport.base)
3573
3707
except errors.InvalidRebaseURLs:
3574
3708
stack_on = self._get_full_stack_on()
3704
3838
format_registry.register('weave', BzrDirFormat6,
3705
3839
'Pre-0.8 format. Slower than knit and does not'
3706
3840
' support checkouts or shared repositories.',
3707
3842
deprecated=True)
3708
3843
format_registry.register_metadir('metaweave',
3709
3844
'bzrlib.repofmt.weaverepo.RepositoryFormat7',
3710
3845
'Transitional format in 0.8. Slower than knit.',
3711
3846
branch_format='bzrlib.branch.BzrBranchFormat5',
3712
3847
tree_format='bzrlib.workingtree.WorkingTreeFormat3',
3713
3849
deprecated=True)
3714
3850
format_registry.register_metadir('knit',
3715
3851
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3716
3852
'Format using knits. Recommended for interoperation with bzr <= 0.14.',
3717
3853
branch_format='bzrlib.branch.BzrBranchFormat5',
3718
3854
tree_format='bzrlib.workingtree.WorkingTreeFormat3',
3719
3856
deprecated=True)
3720
3857
format_registry.register_metadir('dirstate',
3721
3858
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3725
3862
# this uses bzrlib.workingtree.WorkingTreeFormat4 because importing
3726
3863
# directly from workingtree_4 triggers a circular import.
3727
3864
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3728
3866
deprecated=True)
3729
3867
format_registry.register_metadir('dirstate-tags',
3730
3868
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
3733
3871
' Incompatible with bzr < 0.15.',
3734
3872
branch_format='bzrlib.branch.BzrBranchFormat6',
3735
3873
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3736
3875
deprecated=True)
3737
3876
format_registry.register_metadir('rich-root',
3738
3877
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit4',
3741
3880
branch_format='bzrlib.branch.BzrBranchFormat6',
3742
3881
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3743
3883
deprecated=True)
3744
3884
format_registry.register_metadir('dirstate-with-subtree',
3745
3885
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
3756
3896
help='New in 0.92: Pack-based format with data compatible with '
3757
3897
'dirstate-tags format repositories. Interoperates with '
3758
3898
'bzr repositories before 0.92 but cannot be read by bzr < 0.92. '
3759
'Previously called knitpack-experimental. '
3760
'For more information, see '
3761
'http://doc.bazaar-vcs.org/latest/developers/packrepo.html.',
3762
3900
branch_format='bzrlib.branch.BzrBranchFormat6',
3763
3901
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3767
3905
help='New in 0.92: Pack-based format with data compatible with '
3768
3906
'dirstate-with-subtree format repositories. Interoperates with '
3769
3907
'bzr repositories before 0.92 but cannot be read by bzr < 0.92. '
3770
'Previously called knitpack-experimental. '
3771
'For more information, see '
3772
'http://doc.bazaar-vcs.org/latest/developers/packrepo.html.',
3773
3909
branch_format='bzrlib.branch.BzrBranchFormat6',
3774
3910
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3781
3917
'(needed for bzr-svn and bzr-git).',
3782
3918
branch_format='bzrlib.branch.BzrBranchFormat6',
3783
3919
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3785
3922
format_registry.register_metadir('1.6',
3786
3923
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack5',
3789
3926
'not present locally.',
3790
3927
branch_format='bzrlib.branch.BzrBranchFormat7',
3791
3928
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3793
3931
format_registry.register_metadir('1.6.1-rich-root',
3794
3932
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack5RichRoot',
3796
3934
'(needed for bzr-svn and bzr-git).',
3797
3935
branch_format='bzrlib.branch.BzrBranchFormat7',
3798
3936
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3800
3939
format_registry.register_metadir('1.9',
3801
3940
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6',
3804
3943
'performance for most operations.',
3805
3944
branch_format='bzrlib.branch.BzrBranchFormat7',
3806
3945
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3808
3948
format_registry.register_metadir('1.9-rich-root',
3809
3949
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6RichRoot',
3811
3951
'(needed for bzr-svn and bzr-git).',
3812
3952
branch_format='bzrlib.branch.BzrBranchFormat7',
3813
3953
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
3815
3956
format_registry.register_metadir('1.14',
3816
3957
'bzrlib.repofmt.pack_repo.RepositoryFormatKnitPack6',
3832
3973
'to and from rich-root-pack (and anything compatible with '
3833
3974
'rich-root-pack) format repositories. Repositories and branches in '
3834
3975
'this format can only be read by bzr.dev. Please read '
3835
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
3976
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3837
3978
branch_format='bzrlib.branch.BzrBranchFormat7',
3838
3979
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3839
3980
experimental=True,
3842
3984
format_registry.register_metadir('development-subtree',
3843
3985
'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment2Subtree',
3845
3987
'from pack-0.92-subtree (and anything compatible with '
3846
3988
'pack-0.92-subtree) format repositories. Repositories and branches in '
3847
3989
'this format can only be read by bzr.dev. Please read '
3848
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
3990
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3850
3992
branch_format='bzrlib.branch.BzrBranchFormat7',
3851
3993
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3852
3994
experimental=True,
3853
3996
alias=False, # Restore to being an alias when an actual development subtree format is added
3854
3997
# This current non-alias status is simply because we did not introduce a
3855
3998
# chk based subtree format.
3860
4003
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK1',
3861
4004
help='pack-1.9 with 255-way hashed CHK inv, group compress, rich roots '
3863
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
4006
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3865
4008
branch_format='bzrlib.branch.BzrBranchFormat7',
3866
4009
tree_format='bzrlib.workingtree.WorkingTreeFormat6',
3872
4015
'bzrlib.repofmt.groupcompress_repo.RepositoryFormatCHK2',
3873
4016
help='pack-1.9 with 255-way hashed CHK inv, bencode revision, group compress, '
3874
4017
'rich roots. Please read '
3875
'http://doc.bazaar-vcs.org/latest/developers/development-repo.html '
4018
'http://doc.bazaar.canonical.com/latest/developers/development-repo.html '
3877
4020
branch_format='bzrlib.branch.BzrBranchFormat7',
3878
4021
tree_format='bzrlib.workingtree.WorkingTreeFormat6',