[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