Rev 1704: More upgrade improvements. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Fri Aug 29 21:03:14 BST 2008


At file:///data/jelmer/bzr-svn/trunk/

------------------------------------------------------------
revno: 1704
revision-id: jelmer at samba.org-20080829200311-vz7f7enoxqc2kxvl
parent: jelmer at samba.org-20080829190227-wml9s50qb4hmfbvp
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Fri 2008-08-29 22:03:11 +0200
message:
  More upgrade improvements.
modified:
  __init__.py                    __init__.py-20051008155114-eae558e6cf149e1d
  changes.py                     changes.py-20080330205801-lh92uht2ztppvdcz-1
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  mapping.py                     mapping.py-20080128201303-6cp01phc0dmc0kiv-1
  mapping3/__init__.py           __init__.py-20080502174630-9324zh25kka98vlw-1
  mapping4.py                    mapping4.py-20080827182338-y4xzpsf43vyiwcir-1
  tests/test_changes.py          test_changes.py-20080529111734-f7fbshmnlgnvue45-1
  tests/test_mapping.py          test_mapping.py-20080201131338-0zd86eznn4bojtee-1
  upgrade.py                     upgrade.py-20070106192108-0rakplee2lzah4gs-1
  workingtree.py                 workingtree.py-20060306120941-b083cb0fdd4a69de
=== modified file '__init__.py'
--- a/__init__.py	2008-08-29 19:02:27 +0000
+++ b/__init__.py	2008-08-29 20:03:11 +0000
@@ -510,6 +510,7 @@
                                  value_switches=True)]
 
     def run(self, location=".", mapping=None):
+        from bzrlib.errors import BzrCommandError
         from bzrlib.repository import Repository
         from bzrlib.plugins.svn.upgrade import set_revprops
         from bzrlib.plugins.svn.mapping import get_default_mapping
@@ -517,6 +518,9 @@
         if mapping is None:
             mapping = get_default_mapping()
         new_mapping = mapping.from_repository(repos)
+        if not new_mapping.supports_custom_revprops():
+            raise BzrCommandError("Please specify a different mapping, %s doesn't support revision properties." % new_mapping.name)
+
         set_revprops(repos, new_mapping)
 
 

=== modified file 'changes.py'
--- a/changes.py	2008-08-29 17:24:52 +0000
+++ b/changes.py	2008-08-29 20:03:11 +0000
@@ -88,12 +88,13 @@
     """
     if paths == []:
         return None
+    paths = sorted(paths)
     root = paths[0]
     for p in paths[1:]:
-        if p.startswith("%s/" % root):
+        if p.startswith("%s/" % root): # new path is child of root
             continue
-        elif root.startswith("%s/" % p):
+        elif root.startswith("%s/" % p): # new path is parent of root
             root = p
         else:
-            return None
+            return None # Mismatch
     return root

=== modified file 'commit.py'
--- a/commit.py	2008-08-26 01:44:41 +0000
+++ b/commit.py	2008-08-29 20:03:11 +0000
@@ -26,6 +26,7 @@
 from bzrlib.trace import mutter, warning
 
 from cStringIO import StringIO
+from copy import copy
 
 from bzrlib.plugins.svn import core, properties
 from bzrlib.plugins.svn.core import SubversionException
@@ -191,9 +192,13 @@
         else:
             base_branch_props = lazy_dict({}, self.repository.branchprop_list.get_properties, self.base_path, self.base_revnum)
         self.supports_custom_revprops = self.repository.transport.has_capability("commit-revprops")
-        (self._svn_revprops, self._svnprops) = self.base_mapping.export_revision(self.supports_custom_revprops, 
+        if self.supports_custom_revprops:
+            self._svn_revprops = {}
+        else:
+            self._svnprops = copy(base_branch_props)
+        self.base_mapping.export_revision(
             self.branch.get_branch_path(), timestamp, timezone, committer, revprops, 
-            revision_id, self.base_revno+1, merges, base_branch_props)
+            revision_id, self.base_revno+1, merges, self._svn_revprops, self._svnprops)
 
         if len(merges) > 0:
             new_svk_merges = update_svk_features(base_branch_props.get(SVN_PROP_SVK_MERGE, ""), merges)
@@ -474,17 +479,15 @@
         repository_latest_revnum = self.repository.get_latest_revnum()
         lock = self.repository.transport.lock_write(".")
 
-        (fileids, text_parents) = self._determine_texts_identity()
+        if self.push_metadata:
+            (fileids, text_parents) = self._determine_texts_identity()
 
-        self.base_mapping.export_text_parents(self.supports_custom_revprops, text_parents, 
-                                              self._svn_revprops, self._svnprops)
-        self.base_mapping.export_fileid_map(self.supports_custom_revprops, fileids, 
-                                            self._svn_revprops, self._svnprops)
-        if self._config.get_log_strip_trailing_newline():
-            self.base_mapping.export_message(self.supports_custom_revprops, message, 
-                                             self._svn_revprops, self._svnprops)
-            message = message.rstrip("\n")
-        if not self.push_metadata:
+            self.base_mapping.export_text_parents(text_parents, self._svn_revprops, self._svnprops)
+            self.base_mapping.export_fileid_map(fileids, self._svn_revprops, self._svnprops)
+            if self._config.get_log_strip_trailing_newline():
+                self.base_mapping.export_message(message, self._svn_revprops, self._svnprops)
+                message = message.rstrip("\n")
+        if not self.supports_custom_revprops:
             self._svn_revprops = {}
         self._svn_revprops[properties.PROP_REVISION_LOG] = message.encode("utf-8")
 

=== modified file 'mapping.py'
--- a/mapping.py	2008-08-29 19:02:27 +0000
+++ b/mapping.py	2008-08-29 20:03:11 +0000
@@ -267,7 +267,7 @@
 
     @classmethod
     def from_revprops(cls, revprops):
-        return cls()
+        raise NotImplementedError
 
     @classmethod
     def supports_roundtripping(cls):
@@ -361,7 +361,7 @@
         """
         raise NotImplementedError(self.import_fileid_map)
 
-    def export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops):
+    def export_fileid_map(self, fileids, revprops, fileprops):
         """Adjust the properties for a file id map.
 
         :param fileids: Dictionary
@@ -378,7 +378,7 @@
         """
         raise NotImplementedError(self.import_text_parents)
 
-    def export_text_parents(self, can_use_custom_revprops, text_parents, revprops, fileprops):
+    def export_text_parents(self, text_parents, revprops, fileprops):
         """Store a text parent map.
 
         :param text_parents: Text parent map
@@ -387,13 +387,13 @@
         """
         raise NotImplementedError(self.export_text_parents)
 
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, fileprops):
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops):
         """Determines the revision properties and branch root file 
         properties.
         """
         raise NotImplementedError(self.export_revision)
 
-    def export_message(self, can_use_custom_revprops, log, revprops, fileprops):
+    def export_message(self, log, revprops, fileprops):
         raise NotImplementedError(self.export_message)
 
     def get_revision_id(self, branch_path, revprops, fileprops):
@@ -511,10 +511,10 @@
             return {}
         return parse_text_parents_property(metadata)
 
-    def export_text_parents(self, can_use_custom_revprops, text_parents, svn_revprops, fileprops):
+    def export_text_parents(self, text_parents, svn_revprops, fileprops):
         if text_parents != {}:
             fileprops[SVN_PROP_BZR_TEXT_PARENTS] = generate_text_parents_property(text_parents)
-        else:
+        elif SVN_PROP_BZR_TEXT_PARENTS in fileprops:
             fileprops[SVN_PROP_BZR_TEXT_PARENTS] = ""
 
     def get_rhs_parents(self, branch_path, revprops, fileprops):
@@ -547,25 +547,23 @@
 
         return svnprops
  
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, old_fileprops):
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops):
 
         # Keep track of what Subversion properties to set later on
-        fileprops = {}
-        fileprops[SVN_PROP_BZR_REVISION_INFO] = generate_revision_metadata(
+        svn_fileprops = {}
+        svn_fileprops[SVN_PROP_BZR_REVISION_INFO] = generate_revision_metadata(
             timestamp, timezone, committer, revprops)
 
         if len(merges) > 0:
-            fileprops.update(self.record_merges(merges, old_fileprops))
+            svn_fileprops.update(self.record_merges(merges, svn_fileprops))
 
         # Set appropriate property if revision id was specified by 
         # caller
         if revision_id is not None:
-            old = old_fileprops.get(SVN_PROP_BZR_REVISION_ID+self.name, "")
-            fileprops[SVN_PROP_BZR_REVISION_ID+self.name] = old + "%d %s\n" % (revno, revision_id)
-
-        return ({}, fileprops)
-
-    def export_message(self, can_use_custom_revprops, message, revprops, fileprops):
+            old = svn_fileprops.get(SVN_PROP_BZR_REVISION_ID+self.name, "")
+            svn_fileprops[SVN_PROP_BZR_REVISION_ID+self.name] = old + "%d %s\n" % (revno, revision_id)
+
+    def export_message(self, message, revprops, fileprops):
         fileprops[SVN_PROP_BZR_LOG] = message.encode("utf-8")
 
     def is_bzr_revision(self, revprops, fileprops):
@@ -587,11 +585,11 @@
             mutter(str(e))
             return (None, None)
 
-    def export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops):
+    def export_fileid_map(self, fileids, revprops, fileprops):
         if fileids != {}:
             file_id_text = generate_fileid_property(fileids)
             fileprops[SVN_PROP_BZR_FILEIDS] = file_id_text
-        else:
+        elif SVN_PROP_BZR_FILEIDS in fileprops:
             fileprops[SVN_PROP_BZR_FILEIDS] = ""
 
 
@@ -615,8 +613,9 @@
             return {}
         return parse_text_parents_property(svn_revprops[SVN_REVPROP_BZR_TEXT_PARENTS])
 
-    def export_text_parents(self, can_use_custom_revprops, text_parents, svn_revprops, fileprops):
-        svn_revprops[SVN_REVPROP_BZR_TEXT_PARENTS] = generate_text_parents_property(text_parents)
+    def export_text_parents(self, text_parents, svn_revprops, fileprops):
+        if text_parents != {}:
+            svn_revprops[SVN_REVPROP_BZR_TEXT_PARENTS] = generate_text_parents_property(text_parents)
 
     def get_rhs_parents(self, branch_path, svn_revprops, 
                         fileprops):
@@ -636,11 +635,10 @@
             return (revno, revid)
         return (None, None)
 
-    def export_message(self, can_use_custom_revprops, message, revprops, fileprops):
+    def export_message(self, message, revprops, fileprops):
         revprops[SVN_REVPROP_BZR_LOG] = message.encode("utf-8")
 
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, fileprops):
-        svn_revprops = {}
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops):
 
         if timestamp is not None:
             svn_revprops[SVN_REVPROP_BZR_TIMESTAMP] = format_highres_date(timestamp, timezone)
@@ -661,10 +659,9 @@
             svn_revprops[SVN_REVPROP_BZR_MERGE] = "".join([x+"\n" for x in merges])
         svn_revprops[SVN_REVPROP_BZR_REVNO] = str(revno)
 
-        return (svn_revprops, {})
-
-    def export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops):
-        revprops[SVN_REVPROP_BZR_FILEIDS] = generate_fileid_property(fileids)
+    def export_fileid_map(self, fileids, revprops, fileprops):
+        if fileids != {}:
+            revprops[SVN_REVPROP_BZR_FILEIDS] = generate_fileid_property(fileids)
 
     def get_rhs_ancestors(self, branch_path, revprops, fileprops):
         raise NotImplementedError(self.get_rhs_ancestors)
@@ -711,9 +708,16 @@
 
 def find_mapping(revprops, fileprops):
     if SVN_REVPROP_BZR_MAPPING_VERSION in revprops:
-        ret = BzrSvnMapping.from_revprops(revprops)
-        if ret is not None:
-            return ret
+        try:
+            cls = mapping_registry.get(revprops[SVN_REVPROP_BZR_MAPPING_VERSION])
+            ret = BzrSvnMapping.from_revprops(revprops)
+        except KeyError:
+            pass
+        except NotImplementedError:
+            pass
+        else:
+            if ret is not None:
+                return ret
     for k, v in fileprops.items():
         if k.startswith(SVN_PROP_BZR_REVISION_ID):
             return parse_mapping_name(k[len(SVN_PROP_BZR_REVISION_ID):])

=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py	2008-08-29 19:02:27 +0000
+++ b/mapping3/__init__.py	2008-08-29 20:03:11 +0000
@@ -351,34 +351,31 @@
         self.name = "v3-" + str(scheme)
         self.revprop_map = mapping.BzrSvnMappingRevProps()
 
-    def export_text_parents(self, can_use_custom_revprops, text_parents, svn_revprops, fileprops):
-        mapping.BzrSvnMappingFileProps.export_text_parents(self, can_use_custom_revprops, text_parents, svn_revprops, fileprops)
-        if can_use_custom_revprops:
-            self.revprop_map.export_text_parents(can_use_custom_revprops, text_parents, svn_revprops, fileprops)
-
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, old_fileprops):
-        (svn_revprops, fileprops) = mapping.BzrSvnMappingFileProps.export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, old_fileprops)
-        if can_use_custom_revprops:
-            (extra_svn_revprops, _) = self.revprop_map.export_revision(can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, None, revno, merges, old_fileprops)
-            svn_revprops.update(extra_svn_revprops)
-        return (svn_revprops, fileprops)
-
-    def export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops):
-        mapping.BzrSvnMappingFileProps.export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops)
-        if can_use_custom_revprops:
-            self.revprop_map.export_fileid_map(can_use_custom_revprops, fileids, revprops, fileprops)
-
-    def export_message(self, can_use_custom_revprops, log, revprops, fileprops):
-        mapping.BzrSvnMappingFileProps.export_message(self, can_use_custom_revprops, log, revprops, fileprops)
-        if can_use_custom_revprops:
-            self.revprop_map.export_message(can_use_custom_revprops, log, revprops, fileprops)
+    def export_text_parents(self, text_parents, svn_revprops, fileprops):
+        mapping.BzrSvnMappingFileProps.export_text_parents(self, text_parents, svn_revprops, fileprops)
+        if svn_revprops is not None:
+            self.revprop_map.export_text_parents(text_parents, svn_revprops, fileprops)
+
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops):
+        mapping.BzrSvnMappingFileProps.export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops)
+        if svn_revprops is not None:
+            self.revprop_map.export_revision(branch_root, timestamp, timezone, committer, revprops, None, revno, merges, svn_revprops, svn_fileprops)
+
+    def export_fileid_map(self, fileids, revprops, fileprops):
+        mapping.BzrSvnMappingFileProps.export_fileid_map(self, fileids, revprops, fileprops)
+        if revprops is not None:
+            self.revprop_map.export_fileid_map(fileids, revprops, fileprops)
+
+    def export_message(self, log, revprops, fileprops):
+        mapping.BzrSvnMappingFileProps.export_message(self, log, revprops, fileprops)
+        if revprops is not None:
+            self.revprop_map.export_message(log, revprops, fileprops)
 
 
 class BzrSvnMappingv3RevProps(mapping.BzrSvnMappingRevProps, BzrSvnMappingv3):
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, fileprops):
-        (revprops, fileprops) = mapping.BzrSvnMappingRevProps.export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, fileprops)
-        revprops[mapping.SVN_REVPROP_BZR_MAPPING_VERSION] = "3"
-        return (revprops, fileprops)
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops):
+        mapping.BzrSvnMappingRevProps.export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, revno, merges, svn_revprops, svn_fileprops)
+        svn_revprops[mapping.SVN_REVPROP_BZR_MAPPING_VERSION] = "3"
 
 
 

=== modified file 'mapping4.py'
--- a/mapping4.py	2008-08-29 16:00:52 +0000
+++ b/mapping4.py	2008-08-29 20:03:11 +0000
@@ -41,6 +41,14 @@
         return True
 
     @classmethod
+    def from_revprops(cls, revprops):
+        return cls()
+
+    @staticmethod
+    def supports_custom_revprops():
+        return True
+
+    @classmethod
     def revision_id_bzr_to_foreign(cls, revid):
         assert isinstance(revid, str)
 
@@ -95,28 +103,27 @@
         else:
             return self.fileprops.import_fileid_map(svn_revprops, fileprops)
 
-    def export_revision(self, can_use_custom_revprops, branch_root, timestamp, timezone, committer, revprops, revision_id, 
-                        revno, merges, fileprops):
-        if can_use_custom_revprops:
-            (svn_revprops, fileprops) = self.revprops.export_revision(can_use_custom_revprops, branch_root, timestamp, timezone, committer, 
-                                          revprops, revision_id, revno, merges, fileprops)
-            svn_revprops[mapping.SVN_REVPROP_BZR_MAPPING_VERSION] = "4"
-            return (svn_revprops, fileprops)
-        else:
-            return self.fileprops.export_revision(can_use_custom_revprops, branch_root, timestamp, timezone, committer, 
-                                      revprops, revision_id, revno, merges, fileprops)
-
-    def export_fileid_map(self, can_use_custom_revprops, fileids, revprops, fileprops):
-        if can_use_custom_revprops:
-            self.revprops.export_fileid_map(can_use_custom_revprops, fileids, revprops, fileprops)
-        else:
-            self.fileprops.export_fileid_map(can_use_custom_revprops, fileids, revprops, fileprops)
-
-    def export_text_parents(self, can_use_custom_revprops, text_parents, revprops, fileprops):
-        if can_use_custom_revprops:
-            self.revprops.export_text_parents(can_use_custom_revprops, text_parents, revprops, fileprops)
-        else:
-            self.fileprops.export_text_parents(can_use_custom_revprops, text_parents, revprops, fileprops)
+    def export_revision(self, branch_root, timestamp, timezone, committer, revprops, revision_id, 
+                        revno, merges, svn_revprops, svn_fileprops):
+        if svn_revprops is not None:
+            self.revprops.export_revision(branch_root, timestamp, timezone, committer, 
+                                          revprops, revision_id, revno, merges, svn_revprops, svn_fileprops)
+            svn_revprops[mapping.SVN_REVPROP_BZR_MAPPING_VERSION] = "v4"
+        else:
+            self.fileprops.export_revision(branch_root, timestamp, timezone, committer, 
+                                      revprops, revision_id, revno, merges, svn_revprops, svn_fileprops)
+
+    def export_fileid_map(self, fileids, revprops, fileprops):
+        if revprops is not None:
+            self.revprops.export_fileid_map(fileids, revprops, fileprops)
+        else:
+            self.fileprops.export_fileid_map(fileids, revprops, fileprops)
+
+    def export_text_parents(self, text_parents, revprops, fileprops):
+        if revprops is not None:
+            self.revprops.export_text_parents(text_parents, revprops, fileprops)
+        else:
+            self.fileprops.export_text_parents(text_parents, revprops, fileprops)
 
     def import_revision(self, svn_revprops, fileprops, uuid, branch, revnum, rev):
         if svn_revprops.has_key(mapping.SVN_REVPROP_BZR_REQUIRED_FEATURES):

=== modified file 'tests/test_changes.py'
--- a/tests/test_changes.py	2008-08-29 17:24:52 +0000
+++ b/tests/test_changes.py	2008-08-29 20:03:11 +0000
@@ -63,6 +63,9 @@
     def test_simple(self):
         self.assertEquals("bla", changes_root(["bla", "bla/blie"]))
 
+    def test_siblings(self):
+        self.assertEquals("bla", changes_root(["bla/blie", "bla/bloe", "bla"]))
+
     def test_simple_other(self):
         self.assertEquals("bla", changes_root(["bla/blie", "bla"]))
 

=== modified file 'tests/test_mapping.py'
--- a/tests/test_mapping.py	2008-08-29 16:35:32 +0000
+++ b/tests/test_mapping.py	2008-08-29 20:03:11 +0000
@@ -154,7 +154,7 @@
             raise TestNotApplicable
         fileids = {"": "some-id", "bla/blie": "other-id"}
         (revprops, fileprops) = self.mapping.export_revision(True, "branchp", 432432432.0, 0, "somebody", {}, "arevid", 4, ["merge1"], dict())
-        self.mapping.export_fileid_map(True, fileids, revprops, fileprops)
+        self.mapping.export_fileid_map(fileids, revprops, fileprops)
         revprops["svn:date"] = "2008-11-03T09:33:00.716938Z"
         self.assertEquals(fileids, 
                 self.mapping.import_fileid_map(revprops, fileprops))
@@ -165,7 +165,7 @@
         revprops = {}
         fileprops = {}
         text_parents = {"bla": "bloe", "ll": "12"}
-        self.mapping.export_text_parents(True, text_parents, revprops, fileprops)
+        self.mapping.export_text_parents(text_parents, revprops, fileprops)
         self.assertEquals(text_parents,
             self.mapping.import_text_parents(revprops, fileprops))
 
@@ -176,7 +176,7 @@
                                      {"arevprop": "val"}, "arevid", 4, ["merge1"], dict())
         revprops["svn:date"] = "2008-11-03T09:33:00.716938Z"
         try:
-            self.mapping.export_message(True, "My Commit message", revprops, fileprops)
+            self.mapping.export_message("My Commit message", revprops, fileprops)
         except NotImplementedError:
             raise TestNotApplicable
         targetrev = Revision(None)

=== modified file 'upgrade.py'
--- a/upgrade.py	2008-08-29 19:02:27 +0000
+++ b/upgrade.py	2008-08-29 20:03:11 +0000
@@ -229,6 +229,7 @@
     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):
             # Find the root path of the change
@@ -239,19 +240,24 @@
             else:
                 fileprops = logwalker.lazy_dict({}, repository.branchprop_list.get_properties, bp, revnum)
             old_mapping = mapping.find_mapping(revprops, fileprops)
-            if old_mapping is None:
+            if old_mapping is None or old_mapping == new_mapping:
                 continue
+            assert old_mapping.supports_custom_revprops() or bp is not None
+            new_revprops = dict(revprops.items())
             rev = Revision(old_mapping.get_revision_id(bp, revprops, fileprops)[1])
             old_mapping.import_revision(revprops, fileprops, repository.uuid, bp, revnum, rev)
             revno = graph.find_distance_to_null(rev.revision_id, [])
-            (new_revprops, new_fileprops) = new_mapping.export_revision(True, bp, rev.timestamp, rev.timezone, rev.committer, rev.properties, rev.revision_id, revno, old_mapping.get_rhs_parents(bp, revprops, fileprops), fileprops)
-            new_mapping.export_fileid_map(True, old_mapping.import_fileid_map(revprops, fileprops), 
-                new_revprops, new_fileprops)
-            new_mapping.export_text_parents(True, old_mapping.import_text_parents(revprops, fileprops),
-                new_revprops, new_fileprops)
+            new_mapping.export_revision(bp, rev.timestamp, rev.timezone, rev.committer, rev.properties, rev.revision_id, revno, old_mapping.get_rhs_parents(bp, revprops, fileprops), new_revprops, None)
+            new_mapping.export_fileid_map(old_mapping.import_fileid_map(revprops, fileprops), 
+                new_revprops, None)
+            new_mapping.export_text_parents(old_mapping.import_text_parents(revprops, fileprops),
+                new_revprops, None)
             # new_mapping.export_message
-            assert new_fileprops == fileprops, "expected %r got %r" % (new_fileprops, fileprops)
             for k, v in new_revprops.items():
-                repository.transport.change_rev_prop(revnum, k, v)
+                if v != revprops.get(k):
+                    repository.transport.change_rev_prop(revnum, k, v)
+            # Might as well update the cache while we're at it
+            if logcache is not None:
+                logcache.insert_revprops(revnum, new_revprops)
     finally:
         pb.finished()

=== modified file 'workingtree.py'
--- a/workingtree.py	2008-08-28 02:07:43 +0000
+++ b/workingtree.py	2008-08-29 20:03:11 +0000
@@ -613,9 +613,8 @@
         else:
             assert isinstance(id, str)
             new_entries[path] = id
-        revprops = {}
         fileprops = self._get_branch_props()
-        self.branch.mapping.export_fileid_map(False, new_entries, revprops, fileprops)
+        self.branch.mapping.export_fileid_map(new_entries, None, fileprops)
         self._set_branch_props(subwc, fileprops)
         if wc is None:
             subwc.close()




More information about the bazaar-commits mailing list