Rev 4709: (jam) Change BTreeIndexBuilder to use a StringIO if the content is in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Tue Sep 22 05:46:33 BST 2009
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 4709 [merge]
revision-id: pqm at pqm.ubuntu.com-20090922044632-it92wd7iulmerlxa
parent: pqm at pqm.ubuntu.com-20090919230718-vm9zqiov9h3t9bzg
parent: john at arbash-meinel.com-20090922021824-j3en52uqoof7ym89
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Tue 2009-09-22 05:46:32 +0100
message:
(jam) Change BTreeIndexBuilder to use a StringIO if the content is
smaller than 1 page.
modified:
bzrlib/btree_index.py index.py-20080624222253-p0x5f92uyh5hw734-7
=== modified file 'bzrlib/btree_index.py'
--- a/bzrlib/btree_index.py 2009-09-14 01:48:28 +0000
+++ b/bzrlib/btree_index.py 2009-09-22 02:18:24 +0000
@@ -17,6 +17,7 @@
"""B+Tree indices"""
+import cStringIO
from bisect import bisect_right
import math
import tempfile
@@ -60,14 +61,20 @@
def __init__(self):
"""Create a _BuilderRow."""
self.nodes = 0
- self.spool = tempfile.TemporaryFile()
+ self.spool = None# tempfile.TemporaryFile(prefix='bzr-index-row-')
self.writer = None
def finish_node(self, pad=True):
byte_lines, _, padding = self.writer.finish()
if self.nodes == 0:
+ self.spool = cStringIO.StringIO()
# padded note:
self.spool.write("\x00" * _RESERVED_HEADER_BYTES)
+ elif self.nodes == 1:
+ # We got bigger than 1 node, switch to a temp file
+ spool = tempfile.TemporaryFile(prefix='bzr-index-row-')
+ spool.write(self.spool.getvalue())
+ self.spool = spool
skipped_bytes = 0
if not pad and padding:
del byte_lines[-1]
@@ -182,11 +189,9 @@
backing_pos) = self._spill_mem_keys_and_combine()
else:
new_backing_file, size = self._spill_mem_keys_without_combining()
- dir_path, base_name = osutils.split(new_backing_file.name)
# Note: The transport here isn't strictly needed, because we will use
# direct access to the new_backing._file object
- new_backing = BTreeGraphIndex(get_transport(dir_path),
- base_name, size)
+ new_backing = BTreeGraphIndex(get_transport('.'), '<temp>', size)
# GC will clean up the file
new_backing._file = new_backing_file
if self._combine_backing_indices:
@@ -379,13 +384,16 @@
for row in reversed(rows):
pad = (type(row) != _LeafBuilderRow)
row.finish_node(pad=pad)
- result = tempfile.NamedTemporaryFile(prefix='bzr-index-')
lines = [_BTSIGNATURE]
lines.append(_OPTION_NODE_REFS + str(self.reference_lists) + '\n')
lines.append(_OPTION_KEY_ELEMENTS + str(self._key_length) + '\n')
lines.append(_OPTION_LEN + str(key_count) + '\n')
row_lengths = [row.nodes for row in rows]
lines.append(_OPTION_ROW_LENGTHS + ','.join(map(str, row_lengths)) + '\n')
+ if row_lengths and row_lengths[-1] > 1:
+ result = tempfile.NamedTemporaryFile(prefix='bzr-index-')
+ else:
+ result = cStringIO.StringIO()
result.writelines(lines)
position = sum(map(len, lines))
root_row = True
More information about the bazaar-commits
mailing list