1983
class RepositoryFormatPack(MetaDirRepositoryFormat):
1984
"""Format logic for pack structured repositories.
1986
This repository format has:
1987
- a list of packs in pack-names
1988
- packs in packs/NAME.pack
1989
- indices in indices/NAME.{iix,six,tix,rix}
1990
- knit deltas in the packs, knit indices mapped to the indices.
1991
- thunk objects to support the knits programming API.
1992
- a format marker of its own
1993
- an optional 'shared-storage' flag
1994
- an optional 'no-working-trees' flag
1998
# Set this attribute in derived classes to control the repository class
1999
# created by open and initialize.
2000
repository_class = None
2001
# Set this attribute in derived classes to control the
2002
# _commit_builder_class that the repository objects will have passed to
2003
# their constructor.
2004
_commit_builder_class = None
2005
# Set this attribute in derived clases to control the _serializer that the
2006
# repository objects will have passed to their constructor.
2008
# External references are not supported in pack repositories yet.
2009
supports_external_lookups = False
2011
def initialize(self, a_bzrdir, shared=False):
2012
"""Create a pack based repository.
2014
:param a_bzrdir: bzrdir to contain the new repository; must already
2016
:param shared: If true the repository will be initialized as a shared
2019
mutter('creating repository in %s.', a_bzrdir.transport.base)
2020
dirs = ['indices', 'obsolete_packs', 'packs', 'upload']
2021
builder = GraphIndexBuilder()
2022
files = [('pack-names', builder.finish())]
2023
utf8_files = [('format', self.get_format_string())]
2025
self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)
2026
return self.open(a_bzrdir=a_bzrdir, _found=True)
2028
def open(self, a_bzrdir, _found=False, _override_transport=None):
2029
"""See RepositoryFormat.open().
2031
:param _override_transport: INTERNAL USE ONLY. Allows opening the
2032
repository at a slightly different url
2033
than normal. I.e. during 'upgrade'.
2036
format = RepositoryFormat.find_format(a_bzrdir)
2037
if _override_transport is not None:
2038
repo_transport = _override_transport
2040
repo_transport = a_bzrdir.get_repository_transport(None)
2041
control_files = lockable_files.LockableFiles(repo_transport,
2042
'lock', lockdir.LockDir)
2043
return self.repository_class(_format=self,
2045
control_files=control_files,
2046
_commit_builder_class=self._commit_builder_class,
2047
_serializer=self._serializer)
2050
class RepositoryFormatKnitPack1(RepositoryFormatPack):
2051
"""A no-subtrees parameterized Pack repository.
2053
This format was introduced in 0.92.
2056
repository_class = KnitPackRepository
2057
_commit_builder_class = PackCommitBuilder
2058
_serializer = xml5.serializer_v5
2060
def _get_matching_bzrdir(self):
2061
return bzrdir.format_registry.make_bzrdir('pack-0.92')
2063
def _ignore_setting_bzrdir(self, format):
2066
_matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2068
def get_format_string(self):
2069
"""See RepositoryFormat.get_format_string()."""
2070
return "Bazaar pack repository format 1 (needs bzr 0.92)\n"
2072
def get_format_description(self):
2073
"""See RepositoryFormat.get_format_description()."""
2074
return "Packs containing knits without subtree support"
2076
def check_conversion_target(self, target_format):
2080
1973
class RepositoryFormatKnitPack3(RepositoryFormatPack):
2081
1974
"""A subtrees parameterized Pack repository.