1728
1719
self._reconcile_does_inventory_gc = True
1729
1720
self._reconcile_fixes_text_parents = True
1730
1721
self._reconcile_backsup_inventory = False
1722
self._fetch_order = 'unordered'
1724
def _warn_if_deprecated(self):
1725
# This class isn't deprecated, but one sub-format is
1726
if isinstance(self._format, RepositoryFormatKnitPack5RichRootBroken):
1727
from bzrlib import repository
1728
if repository._deprecation_warning_done:
1730
repository._deprecation_warning_done = True
1731
warning("Format %s for %s is deprecated - please use"
1732
" 'bzr upgrade --1.6.1-rich-root'"
1733
% (self._format, self.bzrdir.transport.base))
1732
1735
def _abort_write_group(self):
1733
1736
self._pack_collection._abort_write_group()
1978
class RepositoryFormatPack(MetaDirRepositoryFormat):
1979
"""Format logic for pack structured repositories.
1981
This repository format has:
1982
- a list of packs in pack-names
1983
- packs in packs/NAME.pack
1984
- indices in indices/NAME.{iix,six,tix,rix}
1985
- knit deltas in the packs, knit indices mapped to the indices.
1986
- thunk objects to support the knits programming API.
1987
- a format marker of its own
1988
- an optional 'shared-storage' flag
1989
- an optional 'no-working-trees' flag
1993
# Set this attribute in derived classes to control the repository class
1994
# created by open and initialize.
1995
repository_class = None
1996
# Set this attribute in derived classes to control the
1997
# _commit_builder_class that the repository objects will have passed to
1998
# their constructor.
1999
_commit_builder_class = None
2000
# Set this attribute in derived clases to control the _serializer that the
2001
# repository objects will have passed to their constructor.
2003
# External references are not supported in pack repositories yet.
2004
supports_external_lookups = False
2006
def initialize(self, a_bzrdir, shared=False):
2007
"""Create a pack based repository.
2009
:param a_bzrdir: bzrdir to contain the new repository; must already
2011
:param shared: If true the repository will be initialized as a shared
2014
mutter('creating repository in %s.', a_bzrdir.transport.base)
2015
dirs = ['indices', 'obsolete_packs', 'packs', 'upload']
2016
builder = GraphIndexBuilder()
2017
files = [('pack-names', builder.finish())]
2018
utf8_files = [('format', self.get_format_string())]
2020
self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)
2021
return self.open(a_bzrdir=a_bzrdir, _found=True)
2023
def open(self, a_bzrdir, _found=False, _override_transport=None):
2024
"""See RepositoryFormat.open().
2026
:param _override_transport: INTERNAL USE ONLY. Allows opening the
2027
repository at a slightly different url
2028
than normal. I.e. during 'upgrade'.
2031
format = RepositoryFormat.find_format(a_bzrdir)
2032
if _override_transport is not None:
2033
repo_transport = _override_transport
2035
repo_transport = a_bzrdir.get_repository_transport(None)
2036
control_files = lockable_files.LockableFiles(repo_transport,
2037
'lock', lockdir.LockDir)
2038
return self.repository_class(_format=self,
2040
control_files=control_files,
2041
_commit_builder_class=self._commit_builder_class,
2042
_serializer=self._serializer)
2045
class RepositoryFormatKnitPack1(RepositoryFormatPack):
2046
"""A no-subtrees parameterized Pack repository.
2048
This format was introduced in 0.92.
2051
repository_class = KnitPackRepository
2052
_commit_builder_class = PackCommitBuilder
2053
_serializer = xml5.serializer_v5
2055
def _get_matching_bzrdir(self):
2056
return bzrdir.format_registry.make_bzrdir('pack-0.92')
2058
def _ignore_setting_bzrdir(self, format):
2061
_matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2063
def get_format_string(self):
2064
"""See RepositoryFormat.get_format_string()."""
2065
return "Bazaar pack repository format 1 (needs bzr 0.92)\n"
2067
def get_format_description(self):
2068
"""See RepositoryFormat.get_format_description()."""
2069
return "Packs containing knits without subtree support"
2071
def check_conversion_target(self, target_format):
2075
1980
class RepositoryFormatKnitPack3(RepositoryFormatPack):
2076
1981
"""A subtrees parameterized Pack repository.
2153
2058
return "Packs containing knits with rich root support\n"
2156
class RepositoryFormatPackDevelopment0(RepositoryFormatPack):
2157
"""A no-subtrees development repository.
2159
This format should be retained until the second release after bzr 1.0.
2161
No changes to the disk behaviour from pack-0.92.
2061
class RepositoryFormatKnitPack5(RepositoryFormatPack):
2062
"""Repository that supports external references to allow stacking.
2066
Supports external lookups, which results in non-truncated ghosts after
2067
reconcile compared to pack-0.92 formats.
2164
2070
repository_class = KnitPackRepository
2165
2071
_commit_builder_class = PackCommitBuilder
2166
2072
_serializer = xml5.serializer_v5
2073
supports_external_lookups = True
2168
2075
def _get_matching_bzrdir(self):
2169
return bzrdir.format_registry.make_bzrdir('development0')
2076
return bzrdir.format_registry.make_bzrdir('development1')
2171
2078
def _ignore_setting_bzrdir(self, format):
2176
2083
def get_format_string(self):
2177
2084
"""See RepositoryFormat.get_format_string()."""
2178
return "Bazaar development format 0 (needs bzr.dev from before 1.3)\n"
2085
return "Bazaar RepositoryFormatKnitPack5 (bzr 1.6)\n"
2180
2087
def get_format_description(self):
2181
2088
"""See RepositoryFormat.get_format_description()."""
2182
return ("Development repository format, currently the same as "
2185
def check_conversion_target(self, target_format):
2189
class RepositoryFormatPackDevelopment0Subtree(RepositoryFormatPack):
2190
"""A subtrees development repository.
2192
This format should be retained until the second release after bzr 1.0.
2194
No changes to the disk behaviour from pack-0.92-subtree.
2197
repository_class = KnitPackRepository
2198
_commit_builder_class = PackRootCommitBuilder
2199
rich_root_data = True
2200
supports_tree_reference = True
2089
return "Packs 5 (adds stacking support, requires bzr 1.6)"
2091
def check_conversion_target(self, target_format):
2095
class RepositoryFormatKnitPack5RichRoot(RepositoryFormatPack):
2096
"""A repository with rich roots and stacking.
2098
New in release 1.6.1.
2100
Supports stacking on other repositories, allowing data to be accessed
2101
without being stored locally.
2104
repository_class = KnitPackRepository
2105
_commit_builder_class = PackRootCommitBuilder
2106
rich_root_data = True
2107
supports_tree_reference = False # no subtrees
2108
_serializer = xml6.serializer_v6
2109
supports_external_lookups = True
2111
def _get_matching_bzrdir(self):
2112
return bzrdir.format_registry.make_bzrdir(
2115
def _ignore_setting_bzrdir(self, format):
2118
_matchingbzrdir = property(_get_matching_bzrdir, _ignore_setting_bzrdir)
2120
def check_conversion_target(self, target_format):
2121
if not target_format.rich_root_data:
2122
raise errors.BadConversionTarget(
2123
'Does not support rich root data.', target_format)
2125
def get_format_string(self):
2126
"""See RepositoryFormat.get_format_string()."""
2127
return "Bazaar RepositoryFormatKnitPack5RichRoot (bzr 1.6.1)\n"
2129
def get_format_description(self):
2130
return "Packs 5 rich-root (adds stacking support, requires bzr 1.6.1)"
2133
class RepositoryFormatKnitPack5RichRootBroken(RepositoryFormatPack):
2134
"""A repository with rich roots and external references.
2138
Supports external lookups, which results in non-truncated ghosts after
2139
reconcile compared to pack-0.92 formats.
2141
This format was deprecated because the serializer it uses accidentally
2142
supported subtrees, when the format was not intended to. This meant that
2143
someone could accidentally fetch from an incorrect repository.
2146
repository_class = KnitPackRepository
2147
_commit_builder_class = PackRootCommitBuilder
2148
rich_root_data = True
2149
supports_tree_reference = False # no subtrees
2201
2150
_serializer = xml7.serializer_v7
2152
supports_external_lookups = True
2203
2154
def _get_matching_bzrdir(self):
2204
2155
return bzrdir.format_registry.make_bzrdir(
2205
'development0-subtree')
2156
'development1-subtree')
2207
2158
def _ignore_setting_bzrdir(self, format):
2213
2164
if not target_format.rich_root_data:
2214
2165
raise errors.BadConversionTarget(
2215
2166
'Does not support rich root data.', target_format)
2216
if not getattr(target_format, 'supports_tree_reference', False):
2217
raise errors.BadConversionTarget(
2218
'Does not support nested trees', target_format)
2220
2168
def get_format_string(self):
2221
2169
"""See RepositoryFormat.get_format_string()."""
2222
return ("Bazaar development format 0 with subtree support "
2223
"(needs bzr.dev from before 1.3)\n")
2170
return "Bazaar RepositoryFormatKnitPack5RichRoot (bzr 1.6)\n"
2225
2172
def get_format_description(self):
2226
"""See RepositoryFormat.get_format_description()."""
2227
return ("Development repository format, currently the same as "
2228
"pack-0.92-subtree\n")
2231
class RepositoryFormatPackDevelopment1(RepositoryFormatPackDevelopment0):
2173
return ("Packs 5 rich-root (adds stacking support, requires bzr 1.6)"
2177
class RepositoryFormatPackDevelopment1(RepositoryFormatPack):
2232
2178
"""A no-subtrees development repository.
2234
2180
This format should be retained until the second release after bzr 1.5.