1609
1608
if symbol_versioning.deprecated_passed(revision_id):
1610
1609
symbol_versioning.warn(
1611
1610
'search_missing_revision_ids(revision_id=...) was '
1612
'deprecated in 2.3. Use revision_ids=[...] instead.',
1611
'deprecated in 2.4. Use revision_ids=[...] instead.',
1613
1612
DeprecationWarning, stacklevel=3)
1614
1613
if revision_ids is not None:
1615
1614
raise AssertionError(
1786
1785
not _mod_revision.is_null(revision_id)):
1787
1786
self.get_revision(revision_id)
1789
# if there is no specific appropriate InterRepository, this will get
1790
# the InterRepository base class, which raises an
1791
# IncompatibleRepositories when asked to fetch.
1792
1788
inter = InterRepository.get(source, self)
1793
1789
return inter.fetch(revision_id=revision_id, pb=pb,
1794
1790
find_ghosts=find_ghosts, fetch_spec=fetch_spec)
3007
class RepositoryFormatRegistry(registry.FormatRegistry):
3008
"""Repository format registry."""
3010
def __init__(self, other_registry=None):
3011
super(RepositoryFormatRegistry, self).__init__(other_registry)
3012
self._extra_formats = []
3014
def register(self, format):
3015
"""Register a new repository format."""
3016
super(RepositoryFormatRegistry, self).register(
3017
format.get_format_string(), format)
3019
def remove(self, format):
3020
"""Remove a registered repository format."""
3021
super(RepositoryFormatRegistry, self).remove(
3022
format.get_format_string())
3024
def register_extra(self, format):
3025
"""Register a repository format that can not be used in a metadir.
3027
This is mainly useful to allow custom repository formats, such as older
3028
Bazaar formats and foreign formats, to be tested.
3030
self._extra_formats.append(registry._ObjectGetter(format))
3032
def remove_extra(self, format):
3033
"""Remove an extra repository format.
3035
self._extra_formats.remove(registry._ObjectGetter(format))
3037
def register_extra_lazy(self, module_name, member_name):
3038
"""Register a repository format lazily.
3040
self._extra_formats.append(
3041
registry._LazyObjectGetter(module_name, member_name))
3043
def get_default(self):
3044
"""Return the current default format."""
3045
from bzrlib import bzrdir
3046
return bzrdir.format_registry.make_bzrdir('default').repository_format
3048
def _get_extra(self):
3050
for getter in self._extra_formats:
3051
f = getter.get_obj()
3058
"""Return all repository formats, even those not usable in metadirs.
3060
return [self.get(k) for k in self.keys()] + self._get_extra()
3011
3063
network_format_registry = registry.FormatRegistry()
3012
3064
"""Registry of formats indexed by their network name.
3020
format_registry = registry.FormatRegistry(network_format_registry)
3072
format_registry = RepositoryFormatRegistry(network_format_registry)
3021
3073
"""Registry of formats, indexed by their BzrDirMetaFormat format string.
3023
3075
This can contain either format instances themselves, or classes/factories that
3128
3180
kind='repository')
3183
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 4, 0)))
3131
3184
def register_format(klass, format):
3132
format_registry.register(format.get_format_string(), format)
3185
format_registry.register(format)
3188
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 4, 0)))
3135
3189
def unregister_format(klass, format):
3136
format_registry.remove(format.get_format_string())
3190
format_registry.remove(format)
3193
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 4, 0)))
3139
3194
def get_default_format(klass):
3140
3195
"""Return the current default format."""
3141
from bzrlib import bzrdir
3142
return bzrdir.format_registry.make_bzrdir('default').repository_format
3196
return format_registry.get_default()
3144
3198
def get_format_string(self):
3145
3199
"""Return the ASCII format string that identifies this format.
3298
3352
'RepositoryFormat6',
3355
format_registry.register_extra_lazy(
3356
'bzrlib.repofmt.weaverepo',
3357
'RepositoryFormat4')
3358
format_registry.register_extra_lazy(
3359
'bzrlib.repofmt.weaverepo',
3360
'RepositoryFormat5')
3361
format_registry.register_extra_lazy(
3362
'bzrlib.repofmt.weaverepo',
3363
'RepositoryFormat6')
3301
3365
# formats which have no format string are not discoverable or independently
3302
3366
# creatable on disk, so are not registered in format_registry. They're
3303
3367
# all in bzrlib.repofmt.weaverepo now. When an instance of one of these is
3527
3591
if symbol_versioning.deprecated_passed(revision_id):
3528
3592
symbol_versioning.warn(
3529
3593
'search_missing_revision_ids(revision_id=...) was '
3530
'deprecated in 2.3. Use revision_ids=[...] instead.',
3594
'deprecated in 2.4. Use revision_ids=[...] instead.',
3531
3595
DeprecationWarning, stacklevel=2)
3532
3596
if revision_ids is not None:
3533
3597
raise AssertionError(
3902
3966
fetch_spec=None):
3903
3967
"""See InterRepository.fetch()."""
3904
3968
if fetch_spec is not None:
3905
if (isinstance(fetch_spec, graph.NotInOtherForRevs) and
3906
len(fetch_spec.required_ids) == 1 and not
3907
fetch_spec.if_present_ids):
3908
revision_id = list(fetch_spec.required_ids)[0]
3911
raise AssertionError("Not implemented yet...")
3969
revision_ids = fetch_spec.get_keys()
3912
3972
ui.ui_factory.warn_experimental_format_fetch(self)
3913
3973
if (not self.source.supports_rich_root()
3914
3974
and self.target.supports_rich_root()):
3921
3981
ui.ui_factory.show_user_warning('cross_format_fetch',
3922
3982
from_format=self.source._format,
3923
3983
to_format=self.target._format)
3925
search_revision_ids = [revision_id]
3927
search_revision_ids = None
3928
revision_ids = self.target.search_missing_revision_ids(self.source,
3929
revision_ids=search_revision_ids, find_ghosts=find_ghosts).get_keys()
3984
if revision_ids is None:
3986
search_revision_ids = [revision_id]
3988
search_revision_ids = None
3989
revision_ids = self.target.search_missing_revision_ids(self.source,
3990
revision_ids=search_revision_ids,
3991
find_ghosts=find_ghosts).get_keys()
3930
3992
if not revision_ids:
3932
3994
revision_ids = tsort.topo_sort(