Rev 1710: Search for revision ids in revprops. in file:///data/jelmer/bzr-svn/trunk/
Jelmer Vernooij
jelmer at samba.org
Sat Aug 30 01:15:38 BST 2008
At file:///data/jelmer/bzr-svn/trunk/
------------------------------------------------------------
revno: 1710
revision-id: jelmer at samba.org-20080830001533-imwcdb8tbans5roi
parent: jelmer at samba.org-20080829235541-mxivus3f1vqp63q8
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Sat 2008-08-30 02:15:33 +0200
message:
Search for revision ids in revprops.
modified:
mapping.py mapping.py-20080128201303-6cp01phc0dmc0kiv-1
revids.py revids.py-20070416220458-36vfa0730cchevp1-1
=== modified file 'mapping.py'
--- a/mapping.py 2008-08-29 23:55:41 +0000
+++ b/mapping.py 2008-08-30 00:15:33 +0000
@@ -633,14 +633,15 @@
return []
return svn_revprops.get(SVN_REVPROP_BZR_MERGE, "").splitlines()
+ def get_branch_root(self, revprops):
+ return revprops[SVN_REVPROP_BZR_ROOT]
+
def get_revision_id(self, branch_path, revprops, fileprops):
if not is_bzr_revision_revprops(revprops):
return (None, None)
- if revprops[SVN_REVPROP_BZR_ROOT] == branch_path:
- revid = revprops[SVN_REVPROP_BZR_REVISION_ID]
- revno = int(revprops[SVN_REVPROP_BZR_REVNO])
- return (revno, revid)
- return (None, None)
+ revid = revprops[SVN_REVPROP_BZR_REVISION_ID]
+ revno = int(revprops[SVN_REVPROP_BZR_REVNO])
+ return (revno, revid)
def export_message(self, message, revprops, fileprops):
revprops[SVN_REVPROP_BZR_LOG] = message.encode("utf-8")
=== modified file 'revids.py'
--- a/revids.py 2008-08-29 23:55:41 +0000
+++ b/revids.py 2008-08-30 00:15:33 +0000
@@ -24,7 +24,7 @@
from bzrlib.plugins.svn.errors import InvalidPropertyValue, ERR_FS_NO_SUCH_REVISION, InvalidBzrSvnRevision
from bzrlib.plugins.svn.mapping import (parse_revision_id, BzrSvnMapping,
SVN_PROP_BZR_REVISION_ID, parse_revid_property,
- parse_mapping_name)
+ find_mapping, parse_mapping_name, is_bzr_revision_revprops)
class RevidMap(object):
def __init__(self, repos):
@@ -60,13 +60,25 @@
except InvalidRevisionId:
pass
- for entry_revid, branch, revno, mapping in self.discover_revids(layout, 0, self.repos.get_latest_revnum(), project):
+ for entry_revid, branch, revno, mapping in self.discover_revprop_revids(0, self.repos.get_latest_revnum()):
+ if revid == entry_revid:
+ return (branch, revno, mapping.name)
+
+ for entry_revid, branch, revno, mapping in self.discover_fileprop_revids(layout, 0, self.repos.get_latest_revnum(), project):
if revid == entry_revid:
(bp, revnum, mapping_name) = self.bisect_revid_revnum(revid, branch, 0, revno)
return (bp, revnum, mapping_name)
raise NoSuchRevision(self, revid)
- def discover_revids(self, layout, from_revnum, to_revnum, project=None):
+ def discover_revprop_revids(self, from_revnum, to_revnum):
+ for (_, revno, revprops) in self.repos._log.iter_revs(None, from_revnum, to_revnum):
+ if is_bzr_revision_revprops(revprops):
+ mapping = find_mapping(revprops, {})
+ (_, revid) = mapping.get_revision_id(None, revprops, {})
+ if revid is not None:
+ yield (revid, mapping.get_branch_root(revprops), revno, mapping)
+
+ def discover_fileprop_revids(self, layout, from_revnum, to_revnum, project=None):
reuse_policy = self.repos.get_config().get_reuse_revisions()
assert reuse_policy in ("other-branches", "removed-branches", "none")
check_removed = (reuse_policy == "removed-branches")
@@ -178,10 +190,16 @@
# layout have already been discovered. No need to
# check again.
raise e
- found = False
- for entry_revid, branch, revno, mapping in self.actual.discover_revids(layout, last_checked, last_revnum, project):
- if entry_revid == revid:
- found = True
+ found = None
+ for entry_revid, branch, revno, mapping in self.discover_revprop_revids(0, self.repos.get_latest_revnum()):
+ if entry_revid == revid:
+ found = (branch, revno, revno, mapping)
+ if entry_revid not in self.revid_seen:
+ self.cache.insert_revid(entry_revid, branch, revno, revno, mapping.name)
+ self.revid_seen.add(entry_revid)
+ for entry_revid, branch, revno, mapping in self.actual.discover_fileprop_revids(layout, last_checked, last_revnum, project):
+ if entry_revid == revid:
+ found = (branch, last_checked, revno, mapping)
if entry_revid not in self.revid_seen:
self.cache.insert_revid(entry_revid, branch, last_checked, revno, mapping.name)
self.revid_seen.add(entry_revid)
@@ -190,9 +208,9 @@
# repository, so no need to check again unless new revisions got
# added
self.cache.set_last_revnum_checked(repr((layout, project)), last_revnum)
- if not found:
+ if found is None:
raise e
- (branch_path, min_revnum, max_revnum, mapping) = self.cache.lookup_revid(revid)
+ (branch_path, min_revnum, max_revnum, mapping) = found
assert min_revnum <= max_revnum
assert isinstance(branch_path, str)
More information about the bazaar-commits
mailing list