Rev 2066: Remove mapping from RevisionMetadataBranch. in http://people.samba.org/bzr/jelmer/bzr-svn/0.5
Jelmer Vernooij
jelmer at samba.org
Mon Nov 24 20:30:20 GMT 2008
At http://people.samba.org/bzr/jelmer/bzr-svn/0.5
------------------------------------------------------------
revno: 2066
revision-id: jelmer at samba.org-20081124203008-lv1y11f34ppn8ye6
parent: jelmer at samba.org-20081124184019-zpwlxasnspt7bome
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Mon 2008-11-24 21:30:08 +0100
message:
Remove mapping from RevisionMetadataBranch.
modified:
__init__.py __init__.py-20051008155114-eae558e6cf149e1d
fileids.py fileids.py-20060714013623-u5iiyqqnko11grcf-1
mapping.py mapping.py-20080128201303-6cp01phc0dmc0kiv-1
mapping2.py mapping.py-20080904055555-lw057kjuadn0r2ma-2
mapping3/__init__.py __init__.py-20080502174630-9324zh25kka98vlw-1
mapping4.py mapping4.py-20080827182338-y4xzpsf43vyiwcir-1
revids.py revids.py-20070416220458-36vfa0730cchevp1-1
revmeta.py revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
tests/mapping_implementations/test_repository.py test_repository.py-20080902013845-ity7d1ymye69sobm-2
=== modified file '__init__.py'
--- a/__init__.py 2008-11-18 01:02:56 +0000
+++ b/__init__.py 2008-11-24 20:30:08 +0000
@@ -249,6 +249,7 @@
raise BzrCommandError("%s appears to contain a branch. "
"For individual branches, use 'bzr branch'." %
from_location)
+ # FIXME: Hint about is_tag()
elif guessed_overall_layout.is_branch_parent(prefix):
self.outf.write("Importing branches with prefix /%s\n" %
urlutils.unescape_for_display(prefix, self.outf.encoding))
=== modified file 'fileids.py'
--- a/fileids.py 2008-11-21 14:59:07 +0000
+++ b/fileids.py 2008-11-24 20:30:08 +0000
@@ -127,7 +127,7 @@
:param mapping: Mapping
"""
renames = revmeta.get_fileid_map(mapping)
- changes = get_local_changes(revmeta.get_paths(), revmeta.branch_path, mapping,
+ changes = get_local_changes(revmeta.get_paths(mapping), revmeta.branch_path, mapping,
self.repos.get_layout(),
self.repos.generate_revision_id, find_children)
if find_children is not None:
=== modified file 'mapping.py'
--- a/mapping.py 2008-11-24 17:18:00 +0000
+++ b/mapping.py 2008-11-24 20:30:08 +0000
@@ -311,6 +311,7 @@
can_use_revprops = False
can_use_fileprops = False
supports_hidden = False
+ restricts_branch_paths = False
def __init__(self):
if (version_info[3] == 'exp' or self.experimental) and not BzrSvnMapping._warned_experimental:
@@ -373,6 +374,9 @@
def is_tag(self, tag_path):
raise NotImplementedError(self.is_tag)
+ def is_branch_or_tag(self, path):
+ return self.is_branch(path) or self.is_tag(path)
+
@staticmethod
def generate_file_id(uuid, revnum, branch, inv_path):
"""Create a file id identifying a Subversion file.
=== modified file 'mapping2.py'
--- a/mapping2.py 2008-11-18 22:33:09 +0000
+++ b/mapping2.py 2008-11-24 20:30:08 +0000
@@ -38,6 +38,7 @@
name = "v1"
roundtripping = False
revid_prefix = "svn-v1"
+ restricts_branch_paths = True
def __init__(self, layout):
super(BzrSvnMappingv1, self).__init__()
@@ -128,6 +129,7 @@
name = "v2"
roundtripping = False
revid_prefix = "svn-v2"
+ restricts_branch_paths = True
@classmethod
def revision_id_bzr_to_foreign(cls, revid):
=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py 2008-11-19 00:54:21 +0000
+++ b/mapping3/__init__.py 2008-11-24 20:30:08 +0000
@@ -170,6 +170,7 @@
revid_prefix = "svn-v3-"
roundtripping = True
can_use_fileprops = True
+ restricts_branch_paths = True
def __init__(self, scheme, guessed_scheme=None):
mapping.BzrSvnMapping.__init__(self)
=== modified file 'mapping4.py'
--- a/mapping4.py 2008-11-19 13:04:52 +0000
+++ b/mapping4.py 2008-11-24 20:30:08 +0000
@@ -34,6 +34,7 @@
can_use_revprops = True
can_use_fileprops = True
supports_hidden = True
+ restricts_branch_paths = False
def __init__(self):
self.name = "v4"
=== modified file 'revids.py'
--- a/revids.py 2008-11-21 16:13:14 +0000
+++ b/revids.py 2008-11-24 20:30:08 +0000
@@ -137,8 +137,7 @@
if entry_revid == revid:
mapping_name = propname[len(SVN_PROP_BZR_REVISION_ID):]
mapping = mapping_registry.parse_mapping_name("svn-" + mapping_name)
- assert (mapping.is_tag(revmeta.branch_path) or
- mapping.is_branch(revmeta.branch_path))
+ assert mapping.is_branch_or_tag(revmeta.branch_path)
return (revmeta.branch_path, revmeta.revnum, mapping)
raise InvalidBzrSvnRevision(revid)
=== modified file 'revmeta.py'
--- a/revmeta.py 2008-11-24 18:40:19 +0000
+++ b/revmeta.py 2008-11-24 20:30:08 +0000
@@ -112,11 +112,20 @@
def get_foreign_revid(self):
return (self.uuid, self.branch_path, self.revnum)
- def get_paths(self):
+ def get_paths(self, mapping=None):
"""Fetch the changed paths dictionary for this revision.
"""
if self._paths is None:
self._paths = self._log.get_revision_paths(self.revnum)
+ if mapping is not None and mapping.restricts_branch_paths:
+ next = changes.find_prev_location(self._paths, self.branch_path, self.revnum)
+ if next is not None and not mapping.is_branch_or_tag(next[0]):
+ # Make it look like the branch started here if the mapping (anything < v4)
+ # restricts what paths can be valid branches
+ paths = dict(self._paths.items())
+ lazypaths = logwalker.lazy_dict(paths, full_paths, self.repository._log.find_children, paths, self.branch_path, next[0], next[1])
+ paths[self.branch_path] = ('A', None, -1)
+ return lazypaths
return self._paths
def get_revision_id(self, mapping):
@@ -200,10 +209,9 @@
:note: Returns None when there is no parent (parent is NULL_REVISION)
"""
- assert (mapping.is_branch(self.branch_path) or
- mapping.is_tag(self.branch_path)), "%s not valid in %r" % (self.branch_path, mapping)
+ assert mapping.is_branch_or_tag(self.branch_path), "%s not valid in %r" % (self.branch_path, mapping)
def get_next_parent(rm):
- if rm.metabranch is not None and rm.metabranch.mapping == mapping:
+ if rm.metabranch is not None:
# Perhaps the metabranch already has the parent?
try:
parentrevmeta = rm.metabranch.get_lhs_parent(rm)
@@ -463,7 +471,7 @@
(uuid, bp, revnum) = parse_svk_feature(feature)
except svn_errors.InvalidPropertyValue:
return None
- if not mapping.is_branch(bp) and not mapping.is_tag(bp):
+ if not mapping.is_branch_or_tag(bp):
return None
return mapping.revision_id_foreign_to_bzr((uuid, bp, revnum))
@@ -471,11 +479,10 @@
class RevisionMetadataBranch(object):
"""Describes a Bazaar-like branch in a Subversion repository."""
- def __init__(self, mapping, next=None, revmeta_provider=None,
+ def __init__(self, next=None, revmeta_provider=None,
history_limit=None):
self._revs = []
self._revnums = []
- self.mapping = mapping
self._get_next = next
self._history_limit = history_limit
self._revmeta_provider = revmeta_provider
@@ -618,15 +625,13 @@
self._revmeta_cache[path,revnum] = ret
return ret
- def iter_changes(self, branch_path, from_revnum, to_revnum, mapping=None, pb=None, limit=0):
+ def iter_changes(self, branch_path, from_revnum, to_revnum, pb=None, limit=0):
"""Iterate over all revisions backwards.
:return: iterator that returns tuples with branch path,
changed paths, revision number, changed file properties and
"""
assert isinstance(branch_path, str)
- assert mapping is None or mapping.is_branch(branch_path) or mapping.is_tag(branch_path), \
- "Mapping %r doesn't accept %s as branch or tag" % (mapping, branch_path)
assert from_revnum >= to_revnum
bp = branch_path
@@ -641,19 +646,7 @@
assert bp is not None
next = changes.find_prev_location(paths, bp, revnum)
assert revnum > 0 or bp == ""
- assert mapping is None or mapping.is_branch(bp) or mapping.is_tag(bp), "%r is not a valid path" % bp
-
- if (next is not None and
- not (mapping is None or mapping.is_branch(next[0]) or mapping.is_tag(next[0]))):
- # Make it look like the branch started here if the mapping
- # doesn't support weird paths as branches
- # TODO: Make this quicker - it can be very slow for large repos.
- lazypaths = logwalker.lazy_dict(paths, full_paths, self._log.find_children, paths, bp, next[0], next[1])
- paths[bp] = ('A', None, -1)
-
- yield (bp, lazypaths, revnum, revprops)
- return
-
+
if changes.changes_path(paths, bp, False):
yield (bp, paths, revnum, revprops)
i += 1
@@ -666,6 +659,7 @@
bp = next[0]
def get_mainline(self, branch_path, revnum, mapping, pb=None):
+ """Get a list with all the RevisionMetadata elements on a branch mainline."""
return list(self.iter_reverse_branch_changes(branch_path, revnum, to_revnum=0, mapping=mapping, pb=pb))
def branch_prev_location(self, revmeta, mapping):
@@ -673,11 +667,7 @@
firstrevmeta = iterator.next()
assert revmeta == firstrevmeta
try:
- parentrevmeta = iterator.next()
- if (not mapping.is_branch(parentrevmeta.branch_path) and
- not mapping.is_tag(parentrevmeta.branch_path)):
- return None
- return parentrevmeta
+ return iterator.next()
except StopIteration:
return None
@@ -688,16 +678,16 @@
:return: iterator that returns RevisionMetadata objects.
"""
- assert (mapping is None or
- mapping.is_branch(branch_path) or
- mapping.is_tag(branch_path))
+ assert mapping is None or mapping.is_branch_or_tag(branch_path)
history_iter = self.iter_changes(branch_path, from_revnum,
- to_revnum, mapping, pb=pb,
+ to_revnum, pb=pb,
limit=limit)
- metabranch = RevisionMetadataBranch(mapping, history_iter.next, self,
+ metabranch = RevisionMetadataBranch(history_iter.next, self,
limit)
self._open_metabranches.append(metabranch)
for ret in metabranch:
+ if mapping is not None and not mapping.is_branch_or_tag(ret.branch_path):
+ break
yield ret
def iter_all_changes(self, layout, mapping, from_revnum, to_revnum=0,
@@ -710,14 +700,14 @@
assert from_revnum >= to_revnum
metabranches = {}
if mapping is None:
- mapping_check_path = lambda x:True
+ mapping_check_path = lambda x: True
else:
- mapping_check_path = lambda x: mapping.is_branch(x) or mapping.is_tag(x)
+ mapping_check_path = mapping.is_branch_or_tag
# Layout decides which ones to pick up
# Mapping decides which ones to keep
def get_metabranch(bp):
if not bp in metabranches:
- metabranches[bp] = RevisionMetadataBranch(mapping)
+ metabranches[bp] = RevisionMetadataBranch()
return metabranches[bp]
if project is not None:
=== modified file 'tests/mapping_implementations/test_repository.py'
--- a/tests/mapping_implementations/test_repository.py 2008-11-21 12:55:46 +0000
+++ b/tests/mapping_implementations/test_repository.py 2008-11-24 20:30:08 +0000
@@ -74,12 +74,9 @@
repos.set_layout(CustomLayout(["bla/bar"]))
except svn_errors.LayoutUnusable:
raise TestNotApplicable
- ret = list(repos._revmeta_provider.iter_changes('bla/bar', 2, 0, repos.get_mapping()))
+ ret = list(repos._revmeta_provider.iter_changes('bla/bar', 2, 0))
self.assertEquals(1, len(ret))
- if repos.get_mapping().is_branch("foo/bar"):
- self.assertEquals("foo/bar", ret[0][0])
- else:
- self.assertEquals("bla/bar", ret[0][0])
+ self.assertEquals("foo/bar", ret[0][0])
def test_set_make_working_trees(self):
repos_url = self.make_repository("a")
@@ -185,12 +182,12 @@
{'pygments': ('A', 'pykleur', 1)},
2),
('pykleur', {'pykleur': ('A', None, -1), 'pykleur/bla': ('A', None, -1)}, 1)],
- [(l.branch_path, l.get_paths(), l.revnum) for l in changes])
+ [(l.branch_path, l.get_paths(repos.get_mapping()), l.revnum) for l in changes])
else:
self.assertEquals([('pygments',
{'pygments/bla': ('A', None, -1), 'pygments': ('A', None, -1)},
2)],
- [(l.branch_path, l.get_paths(), l.revnum) for l in changes])
+ [(l.branch_path, l.get_paths(repos.get_mapping()), l.revnum) for l in changes])
def test_history_all(self):
repos_url = self.make_repository("a")
More information about the bazaar-commits
mailing list