Rev 600: Set bzr revision properties if possible. in file:///data/jelmer/bzr-svn/revprops/

Jelmer Vernooij jelmer at samba.org
Sun Dec 9 23:33:13 GMT 2007


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

------------------------------------------------------------
revno: 600
revision-id:jelmer at samba.org-20071209233312-v06yc1jn6k5285gu
parent: jelmer at samba.org-20071209224920-5b1zd0635l2o7end
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: revprops
timestamp: Mon 2007-12-10 00:33:12 +0100
message:
  Set bzr revision properties if possible.
modified:
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  transport.py                   transport.py-20060406231150-b3472d06b3a0818d
=== modified file 'commit.py'
--- a/commit.py	2007-12-06 20:52:02 +0000
+++ b/commit.py	2007-12-09 23:33:12 +0000
@@ -59,14 +59,13 @@
     return []
 
 
-def set_svn_revprops(transport, revnum, author, timestamp):
+def set_svn_revprops(transport, revnum, revprops):
     """Attempt to change the revision properties on the
     specified revision.
 
     :param transport: SvnRaTransport connected to target repository
     :param revnum: Revision number of revision to change metadata of.
-    :param author: New author
-    :param timestamp: UTC timestamp
+    :param revprops: Dictionary with revision properties to set.
     """
     for (name, value) in revprops.items():
         try:
@@ -107,8 +106,8 @@
 
         self._svn_revprops = {
             SVN_REVPROP_BZR_FILEIDS: "",
-            SVN_REVPROP_BZR_TIMESTAMP: timestamp,
-            SVN_REVPROP_BZR_TIMEZONE: timezone,
+            SVN_REVPROP_BZR_TIMESTAMP: str(timestamp),
+            SVN_REVPROP_BZR_TIMEZONE: str(timezone),
             SVN_REVPROP_BZR_COMMITTER: committer
         }
 
@@ -466,13 +465,25 @@
         repository_latest_revnum = self.repository.transport.get_latest_revnum()
         lock = self.repository.transport.lock_write(".")
         set_revprops = self.repository.get_config().get_set_revprops()
+        remaining_revprops = self._svn_revprops # Keep track of the revprops that haven't been set yet
 
         try:
             existing_bp_parts = _check_dirs_exist(self.repository.transport, 
                                               bp_parts, -1)
             self.revnum = None
             self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG] = message.encode("utf-8")
-            self.editor = self.repository.transport.get_commit_editor(self._svn_revprops, done, None, False)
+            try:
+                self.editor = self.repository.transport.get_commit_editor(self._svn_revprops, 
+                                                                          done, None, False)
+                self._svn_revprops = {}
+            except NotImplementedError:
+                if set_revprops:
+                    raise
+                # Try without bzr: revprops
+                self.editor = self.repository.transport.get_commit_editor({
+                    svn.core.SVN_PROP_REVISION_LOG: self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG]},
+                    done, None, False)
+                del self._svn_revprops[svn.core.SVN_PROP_REVISION_LOG]
 
             root = self.editor.open_root(self.base_revnum)
 
@@ -532,7 +543,11 @@
                 svn.core.SVN_PROP_REVISION_DATE: svn_time_to_cstring(1000000*self._timestamp)
                 })
 
-        # FIXME: Set bzr: revision properties if we haven't done so yet
+        try:
+            set_svn_revprops(self.repository.transport, self.revnum, 
+                         self._svn_revprops) 
+        except RevpropChangeFailed:
+            pass # Ignore for now
 
         return revid
 
@@ -542,7 +557,9 @@
         :param ie: Inventory entry.
         :param path: Path of the inventory entry.
         """
-        self._svnprops[SVN_PROP_BZR_FILEIDS] += "%s\t%s\n" % (urllib.quote(path), ie.file_id)
+        file_id_entry = "%s\t%s\n" % (urllib.quote(path), ie.file_id)
+        self._svnprops[SVN_PROP_BZR_FILEIDS] += file_id_entry
+        self._svn_revprops[SVN_REVPROP_BZR_FILEIDS]+= file_id_entry
 
     def record_entry_contents(self, ie, parent_invs, path, tree,
                               content_summary):

=== modified file 'transport.py'
--- a/transport.py	2007-12-09 22:49:20 +0000
+++ b/transport.py	2007-12-09 23:33:12 +0000
@@ -370,6 +370,7 @@
 
     @convert_svn_error
     def change_rev_prop(self, revnum, name, value, pool=None):
+        self.mutter('svn revprop -r%d --set %s=%s' % (revnum, name, value))
         svn.ra.change_rev_prop(self._ra, revnum, name, value)
 
     @convert_svn_error
@@ -511,17 +512,21 @@
     def get_commit_editor(self, revprops, done_cb, lock_token, keep_locks):
         self._open_real_transport()
         self._mark_busy()
-        if has_attr(svn.ra, 'get_commit_editor3'):
-            editor = svn.ra.get_commit_editor3(self._ra, revprops, done_cb, 
-                                              lock_token, keep_locks)
-        elif revprops.keys() != [svn.core.SVN_PROP_REVISION_LOG]:
-            raise NotImplementedError()
-        else:
-            editor = svn.ra.get_commit_editor(self._ra, 
-                        revprops[svn.core.SVN_PROP_REVISION_LOG],
-                        done_cb, lock_token, keep_locks)
+        try:
+            if hasattr(svn.ra, 'get_commit_editor3'):
+                editor = svn.ra.get_commit_editor3(self._ra, revprops, done_cb, 
+                                                  lock_token, keep_locks)
+            elif revprops.keys() != [svn.core.SVN_PROP_REVISION_LOG]:
+                raise NotImplementedError()
+            else:
+                editor = svn.ra.get_commit_editor(self._ra, 
+                            revprops[svn.core.SVN_PROP_REVISION_LOG],
+                            done_cb, lock_token, keep_locks)
 
-        return Editor(self, editor)
+            return Editor(self, editor)
+        except:
+            self._unmark_busy()
+            raise
 
     def listable(self):
         """See Transport.listable().




More information about the bazaar-commits mailing list