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