Rev 1813: Create revmeta object in commit. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Fri Sep 5 22:14:25 BST 2008


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

------------------------------------------------------------
revno: 1813
revision-id: jelmer at samba.org-20080905211420-gjbkm40v1c14c454
parent: jelmer at samba.org-20080905202424-sly3zcrjqau7srak
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Fri 2008-09-05 23:14:20 +0200
message:
  Create revmeta object in commit.
modified:
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  revmeta.py                     revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
=== modified file 'commit.py'
--- a/commit.py	2008-09-04 11:47:09 +0000
+++ b/commit.py	2008-09-05 21:14:20 +0000
@@ -452,10 +452,8 @@
                     ret += _dir_process_file_id(old_inv, new_inv, new_child_path, child_ie.file_id)
             return ret
 
-
         fileids = {}
         text_parents = {}
-
         changes = []
 
         if (self.old_inv.root is None or 
@@ -488,6 +486,8 @@
         repository_latest_revnum = self.repository.get_latest_revnum()
         lock = self.repository.transport.lock_write(".")
 
+        self._changed_fileprops = {}
+
         if self.push_metadata:
             (fileids, text_parents) = self._determine_texts_identity()
 
@@ -541,6 +541,7 @@
                     for prop, value in self._svnprops.items():
                         if value == self._base_branch_props.get(prop):
                             continue
+                        self._changed_fileprops[prop] = value
                         if not properties.is_valid_property_name(prop):
                             warning("Setting property %r with invalid characters in name", prop)
                         assert isinstance(value, str)
@@ -562,16 +563,15 @@
         assert self.revision_metadata is not None
 
         (result_revision, result_date, result_author) = self.revision_metadata
+        
+        self._svn_revprops[properties.PROP_REVISION_AUTHOR] = result_author
+        self._svn_revprops[properties.PROP_REVISION_DATE] = result_date
 
         self.repository._clear_cached_state(result_revision)
 
-        revid = self.branch.generate_revision_id(result_revision)
-
-        assert not self.push_metadata or self._new_revision_id is None or self._new_revision_id == revid
-
-        self.mutter('commit %d finished. author: %r, date: %r, revid: %r',
+        self.mutter('commit %d finished. author: %r, date: %r',
                result_revision, result_author, 
-                   result_date, revid)
+                   result_date)
 
         override_svn_revprops = self._config.get_override_svn_revprops()
         if override_svn_revprops is not None:
@@ -581,7 +581,19 @@
             if properties.PROP_REVISION_DATE in 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)
-
+            self._svn_revprops.update(new_revprops)
+
+        self.revmeta = self.repository._revmeta_provider.get_revision(self.branch.get_branch_path(), result_revision, 
+                None, # FIXME: Generate changes dictionary
+                revprops=self._svn_revprops,
+                changed_fileprops=self._changed_fileprops,
+                fileprops=self._svnprops,
+                metabranch=None # FIXME: Determine from base_revmeta ?
+                )
+
+        revid = self.revmeta.get_revision_id(self.base_mapping)
+
+        assert not self.push_metadata or self._new_revision_id is None or self._new_revision_id == revid
         return revid
 
     def record_entry_contents(self, ie, parent_invs, path, tree,
@@ -773,7 +785,6 @@
         raise
     except ChangesRootLHSHistory:
         raise BzrError("Unable to push revision %r because it would change the ordering of existing revisions on the Subversion repository root. Use rebase and try again or push to a non-root path" % revision_id)
-    
 
     return revid
 

=== modified file 'revmeta.py'
--- a/revmeta.py	2008-09-05 20:24:24 +0000
+++ b/revmeta.py	2008-09-05 21:14:20 +0000
@@ -39,8 +39,10 @@
 class RevisionMetadata(object):
     """Object describing a revision with bzr semantics in a Subversion repository."""
 
-    def __init__(self, repository, check_revprops, get_fileprops_fn, logwalker, uuid, 
-                 branch_path, revnum, paths, revprops, changed_fileprops=None, metabranch=None):
+    def __init__(self, repository, check_revprops, get_fileprops_fn, logwalker, 
+                 uuid, branch_path, revnum, paths, revprops, 
+                 changed_fileprops=None, fileprops=None, 
+                 metabranch=None):
         self.repository = repository
         self.check_revprops = check_revprops
         self._get_fileprops_fn = get_fileprops_fn
@@ -50,6 +52,7 @@
         self.revnum = revnum
         self._revprops = revprops
         self._changed_fileprops = changed_fileprops
+        self._fileprops = fileprops
         self.metabranch = metabranch
         self.uuid = uuid
 
@@ -86,7 +89,9 @@
         return revid
 
     def get_fileprops(self):
-        return self._get_fileprops_fn(self.branch_path, self.revnum)
+        if self._fileprops is None:
+            self._fileprops = self._get_fileprops_fn(self.branch_path, self.revnum)
+        return self._fileprops
 
     def get_revprops(self):
         if self._revprops is None:
@@ -352,18 +357,20 @@
             self._revmeta_cls = RevisionMetadata
 
     def get_revision(self, path, revnum, changes=None, revprops=None, changed_fileprops=None, 
-                     metabranch=None):
+                     fileprops=None, metabranch=None):
         if (path, revnum) in self._revmeta_cache:
             cached = self._revmeta_cache[path,revnum]
             if changes is not None:
                 cached.paths = changes
             if cached._changed_fileprops is None:
                 cached._changed_fileprops = changed_fileprops
+            if cached._fileprops is None:
+                cached._fileprops = fileprops
             return self._revmeta_cache[path,revnum]
 
         ret = self._revmeta_cls(self.repository, self.check_revprops, self._get_fileprops_fn,
                                self._log, self.repository.uuid, path, revnum, changes, revprops, 
-                               changed_fileprops=changed_fileprops, 
+                               changed_fileprops=changed_fileprops, fileprops=fileprops,
                                metabranch=metabranch)
         self._revmeta_cache[path,revnum] = ret
         return ret




More information about the bazaar-commits mailing list