[Pkg-bazaar-commits] ./bzr/unstable r688: - add deferred patch from abentley

Martin Pool mbp at sourcefrog.net
Fri Apr 10 08:20:42 UTC 2009


------------------------------------------------------------
revno: 688
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Wed 2005-06-15 14:17:12 +1000
message:
  - add deferred patch from abentley 
    to fetch remote Revision XML only once
    when branching
added:
  patches/cache-remote-revisions.diff
-------------- next part --------------
=== added file 'patches/cache-remote-revisions.diff'
--- a/patches/cache-remote-revisions.diff	1970-01-01 00:00:00 +0000
+++ b/patches/cache-remote-revisions.diff	2005-06-15 04:17:12 +0000
@@ -0,0 +1,105 @@
+***************
+*** 738,777 ****
+          revisions = []
+          pb = ProgressBar(show_spinner=True)
+          total = len(revision_ids)
+-         for i,f in enumerate(revision_ids):
+-             revisions.append(other.get_revision(f))
+-             pb.update('retrieving revisions', i+1, total)
+-         pb.clear()
+-         
+-         needed_texts = sets.Set()
+- 
+-         for index, rev in enumerate(revisions):
+-             pb.update('Scanning revisions for file contents', index, total)
+-             inv = other.get_inventory(str(rev.inventory_id))
+-             for key, entry in inv.iter_entries():
+-                 if entry.text_id is None:
+-                     continue
+-                 if entry.text_id not in self.text_store:
+-                     needed_texts.add(entry.text_id)
+-         pb.clear()
+-         count = self.text_store.copy_multi(other.text_store, needed_texts, pb,
+-                                            "Copying file contents")
+-         pb.clear()
+-         print "Added %d file contents." % count 
+-         inventory_ids = [ f.inventory_id for f in revisions ]
+-         count = self.inventory_store.copy_multi(other.inventory_store, 
+-                                                 inventory_ids, pb,
+-                                                 "Copying inventories")
+-         pb.clear()
+-         print "Added %d inventories." % count 
+-         revision_ids = [ f.revision_id for f in revisions]
+-         count = self.revision_store.copy_multi(other.revision_store, 
+-                                                revision_ids, pb, 
+-                                                "Copying revisions")
+-         pb.clear()
+-         for revision_id in revision_ids:
+-             self.append_revision(revision_id)
+-         print "Added %d revisions." % count
+                      
+          
+      def commit(self, *args, **kw):
+--- 738,799 ----
+          revisions = []
+          pb = ProgressBar(show_spinner=True)
+          total = len(revision_ids)
++         tmp_dir = tempfile.mkdtemp(prefix = "temp-stores-")
++         try:
++             tmp_rev_dir = os.path.join(tmp_dir, "revisions")
++             os.mkdir(tmp_rev_dir)
++             tmp_revs = ImmutableStore(tmp_rev_dir)
++             count = tmp_revs.copy_multi(other.revision_store, revision_ids, pb, 
++                                         "Caching revisions")
++             #EVIL! Substituting a local partial store for a complete one
++             #This is a significant performance boost when complete one is
++             #a remote store. 
++             other.revision_store = tmp_revs
++             pb.clear()
++ 
++             for i,f in enumerate(revision_ids):
++                 revisions.append(other.get_revision(f))
++                 pb.update("Parsing revisions", i, len(revision_ids))
++             
++             needed_texts = sets.Set()
++ 
++             #Again with the EVIL.
++             tmp_rev_dir = os.path.join(tmp_dir, "inventories")
++             os.mkdir(tmp_rev_dir)
++             inv_ids = [r.inventory_id for r in revisions]
++             tmp_revs = ImmutableStore(tmp_rev_dir)
++             count = tmp_revs.copy_multi(other.inventory_store, inv_ids, pb, 
++                                         "Caching inventories")
++             other.inventory_store = tmp_revs
++             pb.clear()
++             for index, rev in enumerate(revisions):
++                 pb.update('Scanning revisions for file contents', index, total)
++                 inv = other.get_inventory(str(rev.inventory_id))
++                 for key, entry in inv.iter_entries():
++                     if entry.text_id is None:
++                         continue
++                     if entry.text_id not in self.text_store:
++                         needed_texts.add(entry.text_id)
++             pb.clear()
++             count = self.text_store.copy_multi(other.text_store, needed_texts, pb,
++                                                "Copying file contents")
++             pb.clear()
++             print "Added %d file contents." % count 
++             inventory_ids = [ f.inventory_id for f in revisions ]
++             count = self.inventory_store.copy_multi(other.inventory_store, 
++                                                     inventory_ids, pb,
++                                                     "Copying inventories")
++             pb.clear()
++             print "Added %d inventories." % count 
++             revision_ids = [ f.revision_id for f in revisions]
++             count = self.revision_store.copy_multi(other.revision_store, 
++                                                    revision_ids)
++             pb.clear()
++             for revision_id in revision_ids:
++                 self.append_revision(revision_id)
++             print "Added %d revisions." % count
++         finally:
++             shutil.rmtree(tmp_dir)
+                      
+          
+      def commit(self, *args, **kw):



More information about the Pkg-bazaar-commits mailing list