Rev 2700: Use the low-level sorting facility in KnitVersionedFile.iter_records in http://people.ubuntu.com/~robertc/baz2.0/knits

Robert Collins robertc at robertcollins.net
Thu Aug 16 09:14:21 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/knits

------------------------------------------------------------
revno: 2700
revision-id: robertc at robertcollins.net-20070816081414-ps82io1cs4cij6vz
parent: robertc at robertcollins.net-20070816080814-49b7t5gghdrhcx4d
committer: Robert Collins <robertc at robertcollins.net>
branch nick: knits
timestamp: Thu 2007-08-16 18:14:14 +1000
message:
  Use the low-level sorting facility in KnitVersionedFile.iter_records
modified:
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2007-08-16 08:08:14 +0000
+++ b/bzrlib/knit.py	2007-08-16 08:14:14 +0000
@@ -2062,20 +2062,25 @@
                     yield (record[0], content, digest)
                 else:
                     needed_records.add(record)
-            needed_records = sorted(needed_records, key=operator.itemgetter(1))
         else:
-            needed_records = sorted(set(records), key=operator.itemgetter(1))
+            needed_records = records
 
         if not needed_records:
             return
 
+        # let the access object optimise lookups, so setup a mapping back to
+        # version_ids.
+        needed_memos = {}
+        for version_id, index_memo in needed_records:
+            needed_memos[index_memo] = version_id
+
         # The transport optimizes the fetching as well 
         # (ie, reads continuous ranges.)
-        raw_data = self._access.get_raw_records(
-            [index_memo for version_id, index_memo in needed_records])
+        raw_results = self._access.get_raw_records_unsorted(
+            needed_memos.iterkeys())
 
-        for (version_id, index_memo), data in \
-                izip(iter(needed_records), raw_data):
+        for index_memo, data in raw_results:
+            version_id = needed_memos[index_memo]
             content, digest = self._parse_record(version_id, data)
             if self._do_cache:
                 self._cache[version_id] = data



More information about the bazaar-commits mailing list