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