-
Committer:
Robert Collins
-
Date:
2008-01-06 20:04:22 UTC
-
mto:
(3221.11.1 StackableBranch)
-
mto:
This revision was merged to the branch mainline in
revision
3226.
-
Revision ID:
robertc@robertcollins.net-20080106200422-x8yz6cxotlzltvwp
The bzrdir format registry now accepts an ``alias`` keyword to
register_metadir, used to indicate that a format name is an alias for
some other format and thus should not be reported when describing the
format. (Robert Collins)
-------------- This line and the fmllowing will be ignored --------------
modified:
NEWS
bzrlib/bzrdir.py
bzrlib/info.py
bzrlib/tests/test_bzrdir.py
bzrlib/tests/test_info.py
=== modified file 'NEWS'
--- a/NEWS 2008-01-02 22:30:46 +0000
+++ b/NEWS 2008-01-06 20:04:15 +0000
@@ -135,6 +135,11 @@
* Patience Diff now supports arbitrary python objects, as long as they
support ``hash()``. (John Arbash Meinel)
+ * The bzrdir format registry now accepts an ``alias`` keyword to
+ register_metadir, used to indicate that a format name is an alias for
+ some other format and thus should not be reported when describing the
+ format. (Robert Collins)
+
API BREAKS:
TESTING:
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py 2008-01-02 22:30:46 +0000
+++ b/bzrlib/bzrdir.py 2008-01-06 19:41:29 +0000
@@ -2447,12 +2447,22 @@
e.g. BzrDirMeta1 with weave repository. Also, it's more user-oriented.
"""
+ def __init__(self):
+ """Create a BzrDirFormatRegistry."""
+ self._aliases = set()
+ super(BzrDirFormatRegistry, self).__init__()
+
+ def aliases(self):
+ """Return a set of the format names which are aliases."""
+ return frozenset(self._aliases)
+
def register_metadir(self, key,
repository_format, help, native=True, deprecated=False,
branch_format=None,
tree_format=None,
hidden=False,
- experimental=False):
+ experimental=False,
+ alias=False):
"""Register a metadir subformat.
These all use a BzrDirMetaFormat1 bzrdir, but can be parameterized
@@ -2491,10 +2501,10 @@
bd.repository_format = _load(repository_format)
return bd
self.register(key, helper, help, native, deprecated, hidden,
- experimental)
+ experimental, alias)
def register(self, key, factory, help, native=True, deprecated=False,
- hidden=False, experimental=False):
+ hidden=False, experimental=False, alias=False):
"""Register a BzrDirFormat factory.
The factory must be a callable that takes one parameter: the key.
@@ -2505,11 +2515,15 @@
"""
registry.Registry.register(self, key, factory, help,
BzrDirFormatInfo(native, deprecated, hidden, experimental))
+ if alias:
+ self._aliases.add(key)
def register_lazy(self, key, module_name, member_name, help, native=True,
- deprecated=False, hidden=False, experimental=False):
+ deprecated=False, hidden=False, experimental=False, alias=False):
registry.Registry.register_lazy(self, key, module_name, member_name,
help, BzrDirFormatInfo(native, deprecated, hidden, experimental))
+ if alias:
+ self._aliases.add(key)
def set_default(self, key):
"""Set the 'default' key to be a clone of the supplied key.
@@ -2518,6 +2532,7 @@
"""
registry.Registry.register(self, 'default', self.get(key),
self.get_help(key), info=self.get_info(key))
+ self._aliases.add('default')
def set_default_repository(self, key):
"""Set the FormatRegistry default and Repository default.
@@ -2670,6 +2685,7 @@
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
hidden=False,
)
+# The following two formats should always just be aliases.
format_registry.register_metadir('development',
'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0',
help='Current development format. Can convert data to and from pack-0.92 '
@@ -2681,6 +2697,7 @@
branch_format='bzrlib.branch.BzrBranchFormat6',
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
experimental=True,
+ alias=True,
)
format_registry.register_metadir('development-subtree',
'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0Subtree',
@@ -2693,7 +2710,9 @@
branch_format='bzrlib.branch.BzrBranchFormat6',
tree_format='bzrlib.workingtree.WorkingTreeFormat4',
experimental=True,
+ alias=True,
)
+# And the development formats which the will have aliased one of follow:
format_registry.register_metadir('development0',
'bzrlib.repofmt.pack_repo.RepositoryFormatPackDevelopment0',
help='Trivial rename of pack-0.92 to provide a development format. '
=== modified file 'bzrlib/info.py'
--- a/bzrlib/info.py 2007-11-06 09:00:25 +0000
+++ b/bzrlib/info.py 2008-01-06 20:01:30 +0000
@@ -440,7 +440,9 @@
tree.bzrdir.root_transport.base):
branch = None
repository = None
- for key in bzrdir.format_registry.keys():
+ non_aliases = set(bzrdir.format_registry.keys())
+ non_aliases.difference_update(bzrdir.format_registry.aliases())
+ for key in non_aliases:
format = bzrdir.format_registry.make_bzrdir(key)
if isinstance(format, bzrdir.BzrDirMetaFormat1):
if (tree and format.workingtree_format !=
@@ -457,11 +459,12 @@
candidates.append(key)
if len(candidates) == 0:
return 'unnamed'
- new_candidates = [c for c in candidates if c != 'default']
- if len(new_candidates) > 0:
- candidates = new_candidates
+ candidates.sort()
new_candidates = [c for c in candidates if not
bzrdir.format_registry.get_info(c).hidden]
if len(new_candidates) > 0:
+ # If there are any non-hidden formats that match, only return those to
+ # avoid listing hidden formats except when only a hidden format will
+ # do.
candidates = new_candidates
return ' or '.join(candidates)
=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py 2007-12-21 20:32:22 +0000
+++ b/bzrlib/tests/test_bzrdir.py 2008-01-06 19:45:00 +0000
@@ -170,6 +170,16 @@
finally:
bzrdir.format_registry.set_default_repository(old_default)
+ def test_aliases(self):
+ a_registry = bzrdir.BzrDirFormatRegistry()
+ a_registry.register('weave', bzrdir.BzrDirFormat6,
+ 'Pre-0.8 format. Slower and does not support checkouts or shared'
+ ' repositories', deprecated=True)
+ a_registry.register('weavealias', bzrdir.BzrDirFormat6,
+ 'Pre-0.8 format. Slower and does not support checkouts or shared'
+ ' repositories', deprecated=True, alias=True)
+ self.assertEqual(frozenset(['weavealias']), a_registry.aliases())
+
class SampleBranch(bzrlib.branch.Branch):
"""A dummy branch for guess what, dummy use."""
=== modified file 'bzrlib/tests/test_info.py'
--- a/bzrlib/tests/test_info.py 2007-11-26 13:55:51 +0000
+++ b/bzrlib/tests/test_info.py 2008-01-06 20:02:10 +0000
@@ -126,16 +126,22 @@
def test_describe_tree_format(self):
for key in bzrdir.format_registry.keys():
- if key == 'default':
+ if key in bzrdir.format_registry.aliases():
continue
self.assertTreeDescription(key)
def test_describe_checkout_format(self):
for key in bzrdir.format_registry.keys():
- if key in ('default', 'weave', 'experimental'):
- continue
- if key.startswith('experimental-'):
- # these are typically hidden or aliases for other formats
+ if key in bzrdir.format_registry.aliases():
+ # Aliases will not describe correctly in the UI because the
+ # real format is found.
+ continue
+ # legacy: weave does not support checkouts
+ if key == 'weave':
+ continue
+ if bzrdir.format_registry.get_info(key).experimental:
+ # We don't require that experimental formats support checkouts
+ # or describe correctly in the UI.
continue
expected = None
if key in ('dirstate', 'dirstate-tags', 'dirstate-with-subtree',
@@ -149,7 +155,7 @@
def test_describe_branch_format(self):
for key in bzrdir.format_registry.keys():
- if key == 'default':
+ if key in bzrdir.format_registry.aliases():
continue
expected = None
if key in ('dirstate', 'knit'):
@@ -158,7 +164,7 @@
def test_describe_repo_format(self):
for key in bzrdir.format_registry.keys():
- if key == 'default':
+ if key in bzrdir.format_registry.aliases():
continue
expected = None
if key in ('dirstate', 'knit', 'dirstate-tags'):