Rev 2215: More various fixes. in file:///data/jelmer/bzr-svn/mappings/
Jelmer Vernooij
jelmer at samba.org
Sun Dec 7 05:20:30 GMT 2008
At file:///data/jelmer/bzr-svn/mappings/
------------------------------------------------------------
revno: 2215
revision-id: jelmer at samba.org-20081207052026-hfmm5p4omd5mrv81
parent: jelmer at samba.org-20081207042006-gg02bnson2u612sg
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: mappings
timestamp: Sun 2008-12-07 06:20:26 +0100
message:
More various fixes.
modified:
TODO todo-20060729211917-2kpobww0zyvvo0j2-1
__init__.py __init__.py-20051008155114-eae558e6cf149e1d
mapping.py mapping.py-20080128201303-6cp01phc0dmc0kiv-1
mapping3/__init__.py __init__.py-20080502174630-9324zh25kka98vlw-1
mapping4.py mapping4.py-20080827182338-y4xzpsf43vyiwcir-1
revmeta.py revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
upgrade.py upgrade.py-20070106192108-0rakplee2lzah4gs-1
=== modified file 'TODO'
--- a/TODO 2008-12-07 04:20:06 +0000
+++ b/TODO 2008-12-07 05:20:26 +0000
@@ -2,10 +2,7 @@
- fix update_after_commit test
- handle upgrades from v3 properly
- cope with old mappings in find_tags_between_*
- - set-revprops upgrades v3 stuff as well?
- - set-revprops should refuse to work when there is no commit-revprops capability
- use special fileproperty bzr:use-revprops for when log-revprops is not available
-- make distinction between "don't know" and "empty" in _import_from_properties
- automatically disable cache in some situations, allow partial cache?
- in-memory caching of revid mapping (LRUCache ?)
- inventory problem that shows up in bigboard, evolution
=== modified file '__init__.py'
--- a/__init__.py 2008-12-05 17:23:40 +0000
+++ b/__init__.py 2008-12-07 05:20:26 +0000
@@ -506,12 +506,13 @@
help="New mapping to upgrade to.",
registry=mapping_registry,
title="Subversion mapping",
- value_switches=True)]
+ value_switches=True),
+ Option('upgrade', help='Upgrade to new mapping version rather than setting revision properties for the current mapping')]
- def run(self, location=".", mapping=None):
+ def run(self, location=".", upgrade=False, mapping=None):
from bzrlib.errors import BzrCommandError
from bzrlib.repository import Repository
- from bzrlib.plugins.svn.upgrade import set_revprops
+ from bzrlib.plugins.svn.upgrade import set_revprops, upgrade_revprops
from bzrlib.plugins.svn.mapping import mapping_registry
repos = Repository.open(location)
if not repos.transport.has_capability("commit-revprops"):
@@ -522,7 +523,10 @@
if not new_mapping.can_use_revprops:
raise BzrCommandError("Please specify a different mapping, %s doesn't support revision properties." % new_mapping.name)
- num = set_revprops(repos, new_mapping)
+ if upgrade:
+ num = upgrade_revprops(repos, new_mapping)
+ else:
+ num = set_revprops(repos)
self.outf.write("Revision properties set for %d revisions.\n" % num)
self.outf.write("Please restore the hooks/pre-revprop-change script "
"to refuse changes to most revision properties.\n")
=== modified file 'mapping.py'
--- a/mapping.py 2008-12-07 02:58:26 +0000
+++ b/mapping.py 2008-12-07 05:20:26 +0000
@@ -417,8 +417,6 @@
"""
return None
-
-
def get_rhs_parents_fileprops(self, fileprops):
"""Obtain the right-hand side parents for a revision.
@@ -564,6 +562,9 @@
def export_revprop_redirect(self, revnum, fileprops):
raise NotImplementedError(self.export_revprop_redirect)
+ def revprops_complete(self, revprops):
+ raise NotImplementedError(self.revprops_complete)
+
def parse_fileid_property(text):
"""Pares a fileid file or revision property.
=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py 2008-12-07 02:58:26 +0000
+++ b/mapping3/__init__.py 2008-12-07 05:20:26 +0000
@@ -319,7 +319,10 @@
self.revprop_map.export_text_revisions_revprops(text_revisions, svn_revprops)
def export_revision_revprops(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, parent_ids, svn_revprops):
- self.revprop_map.export_revision_revprops(branch_root, timestamp, timezone, committer, revprops, None, revno, parent_ids, svn_revprops)
+ self.revprop_map.export_revision_revprops(branch_root, timestamp, timezone, committer, revprops, revision_id, revno, parent_ids, svn_revprops)
+
+ def revprops_complete(self, revprops):
+ return (self.get_revision_id_revprops(revprops) is not None)
def export_fileid_map_revprops(self, fileids, revprops):
self.revprop_map.export_fileid_map_revprops(fileids, revprops)
=== modified file 'mapping4.py'
--- a/mapping4.py 2008-12-07 02:58:26 +0000
+++ b/mapping4.py 2008-12-07 05:20:26 +0000
@@ -193,3 +193,6 @@
def export_revprop_redirect(self, revnum, fileprops):
if not mapping.SVN_PROP_BZR_REVPROP_REDIRECT in fileprops:
fileprops[mapping.SVN_PROP_BZR_REVPROP_REDIRECT] = str(revnum)
+
+ def revprops_complete(self, revprops):
+ return (self.get_revision_id_revprops(revprops) is not None)
=== modified file 'revmeta.py'
--- a/revmeta.py 2008-12-07 04:20:06 +0000
+++ b/revmeta.py 2008-12-07 05:20:26 +0000
@@ -179,7 +179,7 @@
(_, revid) = self._import_from_props(mapping,
mapping.get_revision_id_fileprops,
mapping.get_revision_id_revprops,
- (None, None))
+ (None, None), self.consider_bzr_fileprops)
else:
revid = None
@@ -359,13 +359,13 @@
return self._import_from_props(None,
find_mapping_fileprops,
find_mapping_revprops,
- None)
+ None, self.consider_bzr_fileprops)
def _get_stored_lhs_parent_revid(self, mapping):
return self._import_from_props(mapping,
mapping.get_lhs_parent_fileprops,
mapping.get_lhs_parent_revprops,
- None)
+ None, self.consider_bzr_fileprops)
def get_lhs_parent_revid(self, mapping):
"""Find the revid of the left hand side parent of this revision."""
@@ -414,7 +414,7 @@
"""Estimate how many svk ancestors this revision has."""
return self._estimate_fileprop_ancestors("svk:merge", estimate_svk_ancestors)
- def estimate_bzr_hidden_fileprop_ancestors(self, mapping):
+ def estimate_bzr_hidden_fileprop_ancestors(self):
return self._estimate_fileprop_ancestors("bzr:hidden", estimate_bzr_ancestors)
def is_changes_root(self):
@@ -433,7 +433,7 @@
return self._import_from_props(mapping,
mapping.is_bzr_revision_hidden_fileprops,
mapping.is_bzr_revision_hidden_revprops,
- False)
+ False, consider_fileprops_fn=self.consider_bzr_hidden_fileprops)
def is_bzr_revision(self):
"""Determine if this is a bzr revision.
@@ -462,7 +462,7 @@
"""Check what Bazaar revisions were merged in this revision."""
return self._import_from_props(mapping,
mapping.get_rhs_parents_fileprops,
- mapping.get_rhs_parents_revprops, ())
+ mapping.get_rhs_parents_revprops, (), self.consider_bzr_fileprops)
def get_svk_merges(self, mapping):
"""Check what SVK revisions were merged in this revision."""
@@ -496,7 +496,7 @@
(bzr_revno, _) = self._import_from_props(mapping,
mapping.get_revision_id_fileprops,
mapping.get_revision_id_revprops,
- (None, None))
+ (None, None), self.consider_bzr_fileprops)
if bzr_revno is not None:
return bzr_revno
return None
@@ -567,23 +567,25 @@
self._import_from_props(mapping,
lambda changed_fileprops: mapping.import_revision_fileprops(changed_fileprops, rev),
lambda revprops: mapping.import_revision_revprops(revprops, rev),
- False, check_branch_root=False)
+ False, self.consider_bzr_fileprops, check_branch_root=False)
rev.svn_meta = self
return rev
def _import_from_props(self, mapping, fileprop_fn, revprop_fn, default,
- check_branch_root=True):
+ consider_fileprops_fn, check_branch_root=True):
can_use_revprops = (mapping is None or mapping.can_use_revprops)
can_use_fileprops = (mapping is None or mapping.can_use_fileprops)
+
# Check revprops if self.knows_revprops() and can_use_revprops
if can_use_revprops and self.knows_revprops():
- if (mapping is None or not check_branch_root or
- mapping.get_branch_root(self.get_revprops()) == self.branch_path):
- ret = revprop_fn(self.get_revprops())
- if ret != default:
- return ret
+ revprops = self.get_revprops()
+ if (mapping is None or
+ (not check_branch_root and mapping.revprops_complete(revprops)) or
+ mapping.get_branch_root(revprops) == self.branch_path):
+ return revprop_fn(revprops)
+ can_use_revprops = False
# Check changed_fileprops if self.knows_changed_fileprops() and
# can_use_fileprops
@@ -591,20 +593,21 @@
ret = fileprop_fn(self.get_changed_fileprops())
if ret != default:
return ret
+ can_use_fileprops = False
# Check revprops if the last descendant has bzr:check-revprops set;
# if it has and the revnum there is < self.revnum
if can_use_revprops and self.consider_bzr_revprops():
warn_slow_revprops()
- if (mapping is None or not check_branch_root or
- mapping.get_branch_root(self.get_revprops()) == self.branch_path):
- ret = revprop_fn(self.get_revprops())
- if ret != default:
- return ret
+ revprops = self.get_revprops()
+ if (mapping is None or
+ (not check_branch_root and mapping.revprops_complete(revprops)) or
+ mapping.get_branch_root(revprops) == self.branch_path):
+ return revprop_fn(revprops)
# Check whether we should consider file properties at all
# for this revision, if we should -> check fileprops
- if can_use_fileprops and self.consider_bzr_fileprops():
+ if can_use_fileprops and consider_fileprops_fn():
ret = fileprop_fn(self.get_changed_fileprops())
if ret != default:
return ret
@@ -615,19 +618,21 @@
"""Find the file id override map for this revision."""
return self._import_from_props(mapping,
mapping.import_fileid_map_fileprops,
- mapping.import_fileid_map_revprops, {})
+ mapping.import_fileid_map_revprops, {}, self.consider_bzr_fileprops)
def get_text_revisions(self, mapping):
"""Return text revision override map for this revision."""
return self._import_from_props(mapping,
mapping.import_text_revisions_fileprops,
- mapping.import_text_revisions_revprops, {})
+ mapping.import_text_revisions_revprops, {},
+ self.consider_bzr_fileprops)
def get_text_parents(self, mapping):
"""Return text revision override map for this revision."""
return self._import_from_props(mapping,
mapping.import_text_parents_fileprops,
- mapping.import_text_parents_revprops, {})
+ mapping.import_text_parents_revprops, {},
+ self.consider_bzr_fileprops)
def consider_bzr_revprops(self):
"""See if bzr revision properties should be checked at all.
@@ -637,12 +642,19 @@
return self._consider_bzr_revprops
if not self.is_changes_root():
self._consider_bzr_revprops = False
+ elif not self._log._transport.has_capability("commit-revprops"):
+ self._consider_bzr_revprops = False
else:
# FIXME: Check nearest descendant with bzr:see-revprops set
# and return True if revnum in that property < self.revnum
self._consider_bzr_revprops = True
return self._consider_bzr_revprops
+ def consider_bzr_hidden_fileprops(self):
+ if not self.is_changes_root():
+ return False
+ return (self.estimate_bzr_hidden_fileprop_ancestors() > 0)
+
def consider_bzr_fileprops(self):
"""See if any bzr file properties should be checked at all.
@@ -661,10 +673,7 @@
This will try to avoid extra network traffic if at all possible.
"""
- if self._consider_svk_fileprops is not None:
- return self._consider_svk_fileprops
- self._consider_svk_fileprops = (self.estimate_svk_fileprop_ancestors() > 0)
- return self._consider_svk_fileprops
+ return (self.estimate_svk_fileprop_ancestors() > 0)
def get_roundtrip_ancestor_revids(self):
"""Return the number of fileproperty roundtrip ancestors.
=== modified file 'upgrade.py'
--- a/upgrade.py 2008-12-07 00:32:28 +0000
+++ b/upgrade.py 2008-12-07 05:20:26 +0000
@@ -22,7 +22,25 @@
from subvertpy import SubversionException, ERR_FS_NOT_DIRECTORY
-def set_revprops(repository, new_mapping, from_revnum=0, to_revnum=None):
+def export_as_mapping(revmeta, revno, old_mapping, new_mapping):
+ new_revprops = dict(revmeta.get_revprops().iteritems())
+ rev = revmeta.get_revision(old_mapping)
+ new_mapping.export_revision_revprops(bp, rev.timestamp, rev.timezone, rev.committer, rev.properties, rev.revision_id, revno, rev.parent_ids, new_revprops)
+ new_mapping.export_fileid_map_revprops(revmeta.get_fileid_map(new_mapping), new_revprops)
+ new_mapping.export_text_parents_revprops(revmeta.get_text_parents(new_mapping), new_revprops)
+ new_mapping.export_text_revisions_revprops(revmeta.get_text_revisions(new_mapping), new_revprops)
+ if rev.message != mapping.parse_svn_log(revprops.get(properties.PROP_REVISION_LOG)):
+ new_mapping.export_message_revprops(rev.message, new_revprops)
+ return new_revprops
+
+
+def upgrade_revprops(repository, new_mapping, from_revnum=0, to_revnum=None):
+ # FIXME: Check that repository has log-revprops capability
+ # (otherwise the new revprops might not be seen by the clients)
+ raise NotImplementedError()
+
+
+def set_revprops_current(repository, from_revnum=0, to_revnum=None):
"""Set bzr-svn revision properties for existing bzr-svn revisions.
:param repository: Subversion Repository object.
@@ -65,20 +83,10 @@
if old_mapping is None:
num_changed += set_skip_revprop(revnum, revprops)
continue
- if old_mapping == new_mapping:
- # Already the latest mapping
- continue
assert old_mapping.can_use_revprops or bp is not None
- new_revprops = dict(revprops.iteritems())
- rev = revmeta.get_revision(old_mapping)
+ assert bp is not None
revno = graph.find_distance_to_null(rev.revision_id, [])
- assert bp is not None
- new_mapping.export_revision_revprops(bp, rev.timestamp, rev.timezone, rev.committer, rev.properties, rev.revision_id, revno, rev.parent_ids, new_revprops)
- new_mapping.export_fileid_map_revprops(revmeta.get_fileid_map(old_mapping), new_revprops)
- new_mapping.export_text_parents_revprops(revmeta.get_text_parents(old_mapping), new_revprops)
- new_mapping.export_text_revisions_revprops(revmeta.get_text_revisions(old_mapping), new_revprops)
- if rev.message != mapping.parse_svn_log(revprops.get(properties.PROP_REVISION_LOG)):
- new_mapping.export_message_revprops(rev.message, new_revprops)
+ new_revprops = export_as_mapping(revmeta, revno, old_mapping, old_mapping)
changed_revprops = dict(ifilter(lambda (k,v): k not in revprops or revprops[k] != v, new_revprops.iteritems()))
if logcache is not None:
logcache.drop_revprops(revnum)
More information about the bazaar-commits
mailing list