Rev 1767: Simplify retrieval of changed properties. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Mon Sep 1 22:15:20 BST 2008


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

------------------------------------------------------------
revno: 1767
revision-id: jelmer at samba.org-20080901211518-7z0hvv4rx83ubb3t
parent: jelmer at samba.org-20080901205316-j3zktrc2yjb5166w
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2008-09-01 23:15:18 +0200
message:
  Simplify retrieval of changed properties.
modified:
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
  revids.py                      revids.py-20070416220458-36vfa0730cchevp1-1
=== modified file 'repository.py'
--- a/repository.py	2008-09-01 20:53:16 +0000
+++ b/repository.py	2008-09-01 21:15:18 +0000
@@ -73,13 +73,21 @@
 
 class RevisionMetadata(object):
 
-    def __init__(self, repository, branch_path, paths, revnum, revprops, changed_fileprops=None, consider_fileprops=False):
+    def __init__(self, repository, branch_path, revnum, paths, revprops, changed_fileprops=None, consider_fileprops=False):
         self.repository = repository
         self.branch_path = branch_path
         self.paths = paths
         self.revnum = revnum
         self.revprops = revprops
-        self.changed_fileprops = fileprops
+        if changed_fileprops is None:
+            if paths is None:
+                self.changed_fileprops = self.repository.branchprop_list.get_changed_properties(branch_path, revnum)
+            elif branch_path in paths:
+                self.changed_fileprops = self.repository.branchprop_list.get_changed_properties(branch_path, revnum, skip_check=True)
+            else:
+                self.changed_fileprops = {}
+        else:
+            self.changed_fileprops = changed_fileprops
         self.uuid = repository.uuid
         self.consider_fileprops = consider_fileprops
 
@@ -96,6 +104,12 @@
             lhs_parent = self.repository.lhs_revision_parent(self.branch_path, self.revnum, mapping)
         return lhs_parent
 
+    def has_bzr_fileprop_ancestors(self):
+        if not self.consider_fileprops:
+            # This revisions descendant doesn't have bzr fileprops set, so this one can't have them either.
+            return False
+        return is_bzr_revision_fileprops(self.repository.branchprop_list.get_properties(self.branch_path, self.revnum))
+
     def is_bzr_revision(self):
         """Determine (with as few network requests as possible) if this is a bzr revision.
 
@@ -500,12 +514,7 @@
                         if not bp in paths or paths[bp][0] != 'D':
                             assert revnum > 0 or bp == "", "%r:%r" % (bp, revnum)
                             yielded_paths.add(bp)
-                            if not bp in paths:
-                                svn_fileprops = {}
-                            else:
-                                svn_fileprops = self.branchprop_list.get_changed_properties(bp, revnum, 
-                                                                                            skip_check=True)
-                            yield self._revmeta(bp, paths, revnum, revprops, svn_fileprops)
+                            yield self._revmeta(bp, revnum, paths, revprops)
 
     def all_revision_ids(self, layout=None, mapping=None):
         if mapping is None:
@@ -625,7 +634,7 @@
             except NoSuchRevision:
                 continue
 
-            revmeta = self._revmeta(branch, None, revnum)
+            revmeta = self._revmeta(branch, revnum)
 
             parent_map[revision_id] = revmeta.get_parent_ids(mapping)
         return parent_map
@@ -645,7 +654,7 @@
             if revid is not None:
                 yield revid
 
-    def _revmeta(self, path, changes, revnum, revprops=None, fileprops=None, 
+    def _revmeta(self, path, revnum, changes, revprops=None, fileprops=None, 
                  consider_fileprops=True):
         if (path, revnum) in self._revmeta_cache:
             if changes is not None:
@@ -656,10 +665,8 @@
 
         if revprops is None:
             revprops = self._log.revprop_list(revnum)
-        if fileprops is None:
-            fileprops = self.branchprop_list.get_changed_properties(path, revnum)
 
-        revmeta = RevisionMetadata(self, path, changes, revnum, revprops, 
+        revmeta = RevisionMetadata(self, path, revnum, changes, revprops, 
                                    fileprops, consider_fileprops=consider_fileprops)
         self._revmeta_cache[path,revnum] = revmeta
         return revmeta
@@ -671,7 +678,7 @@
 
         (path, revnum, mapping) = self.lookup_revision_id(revision_id)
         
-        revmeta = self._revmeta(path, None, revnum)
+        revmeta = self._revmeta(path, revnum)
 
         return revmeta.get_revision(mapping)
 
@@ -813,15 +820,12 @@
                                          mapping, pb=pb, limit=limit)
         consider_fileprops = True
         for (bp, paths, revnum, revprops) in history_iter:
-            if not bp in paths:
-                svn_fileprops = {}
-            else:
-                svn_fileprops = self.branchprop_list.get_changed_properties(bp, revnum, skip_check=True)
+            ret = self._revmeta(bp, revnum, paths, revprops, consider_fileprops=consider_fileprops)
 
             if consider_fileprops:
-                consider_fileprops = is_bzr_revision_fileprops(svn_fileprops)
+                consider_fileprops = ret.has_bzr_fileprop_ancestors()
 
-            yield self._revmeta(bp, paths, revnum, revprops, svn_fileprops)
+            yield ret
 
     def get_config(self):
         if self._config is None:

=== modified file 'revids.py'
--- a/revids.py	2008-09-01 20:53:16 +0000
+++ b/revids.py	2008-09-01 21:15:18 +0000
@@ -248,7 +248,7 @@
         create unique index if not exists layout on revids_seen (layout);
         """)
         # Revisions ids are quite expensive
-        self._commit_interval = 100
+        self._commit_interval = 1000
 
     def set_last_revnum_checked(self, layout, revnum):
         """Remember the latest revision number that has been checked




More information about the bazaar-commits mailing list