Rev 2216: Fix set-revprops. in file:///data/jelmer/bzr-svn/mappings/
Jelmer Vernooij
jelmer at samba.org
Sun Dec 7 06:03:24 GMT 2008
At file:///data/jelmer/bzr-svn/mappings/
------------------------------------------------------------
revno: 2216
revision-id: jelmer at samba.org-20081207060322-of37cbm86yb5bvr8
parent: jelmer at samba.org-20081207052026-hfmm5p4omd5mrv81
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: mappings
timestamp: Sun 2008-12-07 07:03:22 +0100
message:
Fix set-revprops.
modified:
TODO todo-20060729211917-2kpobww0zyvvo0j2-1
commit.py commit.py-20060607190346-qvq128wgfubhhgm2-1
logwalker.py logwalker.py-20060621215743-c13fhfnyzh1xzwh2-1
mapping3/__init__.py __init__.py-20080502174630-9324zh25kka98vlw-1
mapping4.py mapping4.py-20080827182338-y4xzpsf43vyiwcir-1
upgrade.py upgrade.py-20070106192108-0rakplee2lzah4gs-1
=== modified file 'TODO'
--- a/TODO 2008-12-07 05:20:26 +0000
+++ b/TODO 2008-12-07 06:03:22 +0000
@@ -6,6 +6,7 @@
- automatically disable cache in some situations, allow partial cache?
- in-memory caching of revid mapping (LRUCache ?)
- inventory problem that shows up in bigboard, evolution
+- remove RevisionMetadata.is_bzr_revision()
more tests:
- Run all tests against repository with revprop changing allowed and without
=== modified file 'commit.py'
--- a/commit.py 2008-12-07 03:44:05 +0000
+++ b/commit.py 2008-12-07 06:03:22 +0000
@@ -132,7 +132,7 @@
return None
-def set_svn_revprops(transport, revnum, revprops):
+def set_svn_revprops(repository, revnum, revprops):
"""Attempt to change the revision properties on the
specified revision.
@@ -140,9 +140,12 @@
:param revnum: Revision number of revision to change metadata of.
:param revprops: Dictionary with revision properties to set.
"""
+ logcache = getattr(repository._log, "cache", None)
for (name, value) in revprops.iteritems():
try:
- transport.change_rev_prop(revnum, name, value)
+ repository.transport.change_rev_prop(revnum, name, value)
+ if logcache is not None:
+ logcache.insert_revprop(revnum, name, value)
except SubversionException, (_, ERR_REPOS_DISABLED_FEATURE):
raise RevpropChangeFailed(name)
@@ -397,7 +400,7 @@
self._svn_revprops = {}
self._svnprops = lazy_dict({}, lambda: dict(self._base_branch_props.iteritems()))
- (self.set_custom_revprops, self.set_custom_fileprops) = self.repository._properties_to_set(mapping)
+ (self.set_custom_revprops, self.set_custom_fileprops) = self.repository._properties_to_set(self.mapping)
if self.supports_custom_revprops:
# If possible, submit signature directly
if opt_signature is not None:
@@ -660,7 +663,7 @@
new_revprops[properties.PROP_REVISION_AUTHOR] = self._committer.encode("utf-8")
if properties.PROP_REVISION_DATE in self._override_svn_revprops:
new_revprops[properties.PROP_REVISION_DATE] = properties.time_to_cstring(1000000*self._timestamp)
- set_svn_revprops(self.repository.transport, result_revision, new_revprops)
+ set_svn_revprops(self.repository, result_revision, new_revprops)
self._svn_revprops.update(new_revprops)
self.revmeta = self.repository._revmeta_provider.get_revision(self.branch_path, result_revision,
=== modified file 'logwalker.py'
--- a/logwalker.py 2008-12-02 13:03:38 +0000
+++ b/logwalker.py 2008-12-07 06:03:22 +0000
@@ -98,6 +98,10 @@
self._ensure_init()
return self.dict.__iter__()
+ def __str__(self):
+ self._ensure_init()
+ return str(self.dict)
+
def __repr__(self):
self._ensure_init()
return repr(self.dict)
=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py 2008-12-07 05:20:26 +0000
+++ b/mapping3/__init__.py 2008-12-07 06:03:22 +0000
@@ -320,9 +320,10 @@
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, revision_id, revno, parent_ids, svn_revprops)
+ svn_revprops[mapping.SVN_REVPROP_BZR_MAPPING_VERSION] = self.name
def revprops_complete(self, revprops):
- return (self.get_revision_id_revprops(revprops) is not None)
+ return (mapping.SVN_REVPROP_BZR_MAPPING_VERSION in revprops)
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 05:20:26 +0000
+++ b/mapping4.py 2008-12-07 06:03:22 +0000
@@ -195,4 +195,4 @@
fileprops[mapping.SVN_PROP_BZR_REVPROP_REDIRECT] = str(revnum)
def revprops_complete(self, revprops):
- return (self.get_revision_id_revprops(revprops) is not None)
+ return (mapping.SVN_REVPROP_BZR_MAPPING_VERSION in revprops)
=== modified file 'upgrade.py'
--- a/upgrade.py 2008-12-07 05:20:26 +0000
+++ b/upgrade.py 2008-12-07 06:03:22 +0000
@@ -16,20 +16,25 @@
"""Upgrading revisions made with older versions of the mapping."""
from bzrlib import ui
+from bzrlib.trace import mutter
from itertools import ifilter
-from subvertpy import SubversionException, ERR_FS_NOT_DIRECTORY
-
-
-def export_as_mapping(revmeta, revno, old_mapping, new_mapping):
+from subvertpy import SubversionException, ERR_FS_NOT_DIRECTORY, properties
+
+from bzrlib.plugins.svn import changes, logwalker, mapping
+from bzrlib.plugins.svn.commit import set_svn_revprops
+
+
+def export_as_mapping(revmeta, graph, 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)
+ revno = graph.find_distance_to_null(rev.revision_id, [])
+ new_mapping.export_revision_revprops(revmeta.branch_path, 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)):
+ if rev.message != mapping.parse_svn_log(revmeta.get_revprops().get(properties.PROP_REVISION_LOG)):
new_mapping.export_message_revprops(rev.message, new_revprops)
return new_revprops
@@ -40,26 +45,23 @@
raise NotImplementedError()
-def set_revprops_current(repository, from_revnum=0, to_revnum=None):
+def set_revprops(repository, from_revnum=0, to_revnum=None):
"""Set bzr-svn revision properties for existing bzr-svn revisions.
:param repository: Subversion Repository object.
:param new_mapping: Mapping to upgrade to
"""
- from bzrlib.plugins.svn import changes, logwalker, mapping
- from subvertpy import properties
num_changed = 0
def set_skip_revprop(revnum, revprops):
if not mapping.SVN_REVPROP_BZR_SKIP in revprops:
- repository.transport.change_rev_prop(revnum, mapping.SVN_REVPROP_BZR_SKIP, "")
+ set_svn_revprops(repository, revnum, {mapping.SVN_REVPROP_BZR_SKIP: ""})
return 1
- return 1
+ return 0
if to_revnum is None:
to_revnum = repository.get_latest_revnum()
graph = repository.get_graph()
assert from_revnum <= to_revnum
pb = ui.ui_factory.nested_progress_bar()
- logcache = getattr(repository._log, "cache", None)
try:
for (paths, revnum, revprops) in repository._log.iter_changes(None, to_revnum, from_revnum, pb=pb):
if revnum == 0:
@@ -76,7 +78,7 @@
continue
revmeta = repository._revmeta_provider.get_revision(bp, revnum, paths, revprops)
try:
- old_mapping = revmeta.get_original_mapping()
+ old_mapping = mapping.find_mapping_fileprops(revmeta.get_changed_fileprops())
except SubversionException, (_, ERR_FS_NOT_DIRECTORY):
num_changed += set_skip_revprop(revnum, revprops)
continue
@@ -85,13 +87,9 @@
continue
assert old_mapping.can_use_revprops or bp is not None
assert bp is not None
- revno = graph.find_distance_to_null(rev.revision_id, [])
- 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)
- for k, v in changed_revprops.iteritems():
- repository.transport.change_rev_prop(revnum, k, v)
+ new_revprops = export_as_mapping(revmeta, graph, old_mapping, old_mapping)
+ changed_revprops = dict(((k,v) for k,v in new_revprops.iteritems() if k not in revprops or revprops[k] != v))
+ set_svn_revprops(repository, revnum, changed_revprops)
if changed_revprops != {}:
num_changed += 1
# Might as well update the cache while we're at it
More information about the bazaar-commits
mailing list