~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to groupcompress.py

  • Committer: John Arbash Meinel
  • Date: 2009-03-04 15:27:48 UTC
  • mto: (0.17.31 trunk)
  • mto: This revision was merged to the branch mainline in revision 4280.
  • Revision ID: john@arbash-meinel.com-20090304152748-iqp4zqlzvnq5pm23
fix up the failing tests.

The new delta code needs a 16-byte window to match, so to *know* that there will
be a match, you need ~32-bytes in common. (guarantees that 16-bytes somewhere in
that 32-byte range will match.)
Also, when setting 'max_delta', it is possible that we run out of bytes before
we actually find the last match, which would make things compress better.
This is rare in practice, because texts are longer than 40 bytes. But it happens
in testing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
134
134
        self.labels_deltas = {}
135
135
        self._delta_index = _groupcompress_pyx.DeltaIndex()
136
136
 
137
 
    def compress(self, key, chunks, expected_sha, soft=False):
 
137
    def compress(self, key, bytes, expected_sha, soft=False):
138
138
        """Compress lines with label key.
139
139
 
140
140
        :param key: A key tuple. It is stored in the output
141
141
            for identification of the text during decompression. If the last
142
142
            element is 'None' it is replaced with the sha1 of the text -
143
143
            e.g. sha1:xxxxxxx.
144
 
        :param chunks: The chunks to be compressed
 
144
        :param bytes: The bytes to be compressed
145
145
        :param expected_sha: If non-None, the sha the lines are believed to
146
146
            have. During compression the sha is calculated; a mismatch will
147
147
            cause an error.
150
150
        :return: The sha1 of lines, and the number of bytes accumulated in
151
151
            the group output so far.
152
152
        """
153
 
        # TODO: Change this to a bytes interface, since the output is now a
154
 
        #       bytes interface anyway.
155
 
        bytes = ''.join(chunks)
156
153
        if not _FAST or expected_sha is None:
157
154
            sha1 = sha_string(bytes)
158
155
        else:
629
626
                        groups += 1
630
627
                last_prefix = prefix
631
628
            found_sha1, end_point = self._compressor.compress(record.key,
632
 
                [bytes], record.sha1, soft=soft)
 
629
                bytes, record.sha1, soft=soft)
633
630
            if record.key[-1] is None:
634
631
                key = record.key[:-1] + ('sha1:' + found_sha1,)
635
632
            else: