Rev 44: Add a single byte to indicate whether the following text is a fulltext in http://bazaar.launchpad.net/%7Ebzr/bzr-groupcompress/internal_index
John Arbash Meinel
john at arbash-meinel.com
Thu Mar 5 04:06:25 GMT 2009
At http://bazaar.launchpad.net/%7Ebzr/bzr-groupcompress/internal_index
------------------------------------------------------------
revno: 44
revision-id: john at arbash-meinel.com-20090305040549-1egrt0x9kqzl3d7j
parent: john at arbash-meinel.com-20090305034657-t3qbsogy187yul4z
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: internal_index
timestamp: Wed 2009-03-04 22:05:49 -0600
message:
Add a single byte to indicate whether the following text is a fulltext
or a delta.
-------------- next part --------------
=== modified file 'groupcompress.py'
--- a/groupcompress.py 2009-03-05 03:46:57 +0000
+++ b/groupcompress.py 2009-03-05 04:05:49 +0000
@@ -53,6 +53,7 @@
)
from bzrlib.plugins.groupcompress import errors as gc_errors
+_NO_LABELS = False
_FAST = False
def encode_base128_int(val):
@@ -199,7 +200,7 @@
out._size = header_len + len(out._content)
return out
- def extract(self, key, sha1=None):
+ def extract(self, key, index_memo, sha1=None):
"""Extract the text for a specific key.
:param key: The label used for this content
@@ -208,9 +209,11 @@
"""
entry = self._entries[key]
if entry.type == 'fulltext':
- bytes = self._content[entry.start:entry.start + entry.length]
+ assert self._content[entry.start] == 'f'
+ bytes = self._content[entry.start+1:entry.start + entry.length]
elif entry.type == 'delta':
- delta = self._content[entry.start:entry.start + entry.length]
+ assert self._content[entry.start] == 'd'
+ delta = self._content[entry.start+1:entry.start + entry.length]
bytes = _groupcompress_pyx.apply_delta(self._content, delta)
# XXX: sha1?
return entry, bytes
@@ -348,17 +351,17 @@
delta = self._delta_index.make_delta(bytes, max_delta_size)
if (delta is None):
type = 'fulltext'
- length = len(bytes)
- self._delta_index.add_source(bytes, 0)
- new_chunks = [bytes]
+ length = len(bytes) + 1
+ self._delta_index.add_source(bytes, 1)
+ new_chunks = ['f', bytes]
else:
type = 'delta'
- length = len(delta)
- new_chunks = [delta]
+ length = len(delta) + 1
+ new_chunks = ['d', delta]
if _FAST:
self._delta_index._source_offset += len(delta)
else:
- self._delta_index.add_delta_source(delta, 0)
+ self._delta_index.add_delta_source(delta, 1)
self._block.add_entry(key, type=type, sha1=sha1,
start=self.endpoint, length=length)
delta_start = (self.endpoint, len(self.lines))
@@ -696,7 +699,7 @@
else:
index_memo, _, parents, (method, _) = locations[key]
block = self._get_block(index_memo)
- entry, bytes = block.extract(key)
+ entry, bytes = block.extract(key, index_memo)
sha1 = entry.sha1
if not _FAST and sha_string(bytes) != sha1:
raise AssertionError('sha1 sum did not match')
More information about the bazaar-commits
mailing list