~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to groupcompress.py

  • Committer: John Arbash Meinel
  • Date: 2009-02-19 20:55:17 UTC
  • mto: (0.22.4 experimental)
  • mto: This revision was merged to the branch mainline in revision 4280.
  • Revision ID: john@arbash-meinel.com-20090219205517-drw89424koe6h1da
Play around a bit.

1) Empty texts are no-op inserted, to avoid ever trying to match against their text.
2) If we find a new file-id and the compressor is more than half full, we go
ahead and start a new compressor.

Show diffs side-by-side

added added

removed removed

Lines of Context:
204
204
            key = key[:-1] + ('sha1:' + sha1,)
205
205
        label = '\x00'.join(key)
206
206
        # setup good encoding for trailing \n support.
 
207
        if not lines:
 
208
            lines_is_empty = True
 
209
        else:
 
210
            lines_is_empty = False
207
211
        if not lines or lines[-1].endswith('\n'):
208
212
            lines.append('\n')
209
213
        else:
218
222
        flush_range = self.flush_range
219
223
        copy_ends = None
220
224
        blocks = None
221
 
        if len(key) > 1:
 
225
        if lines_is_empty:
 
226
            # Empty texts are given a simple 'i1\n\n' insertion instruction.
 
227
            # This prevents us from trying to match against an empty text.
 
228
            blocks = [(0, len(lines), 0)]
 
229
        if blocks is None and len(key) > 1:
222
230
            prefix = key[0]
223
231
            if prefix not in self._present_prefixes:
224
232
                self._present_prefixes.add(prefix)
642
650
                bytes = adapter.get_bytes(record,
643
651
                    record.get_bytes_as(record.storage_kind))
644
652
                lines = osutils.split_lines(bytes)
 
653
            if len(record.key) > 1:
 
654
                prefix = record.key[0]
 
655
                if (prefix not in self._compressor._present_prefixes
 
656
                    and basis_end > 1024 * 1024 * 10):
 
657
                    # This is a new file id we are inserting.
 
658
                    # And the file is already more than half full. This record
 
659
                    # would be added as full lines, so go ahead and start a new
 
660
                    # group
 
661
                    flush()
 
662
                    self._compressor = GroupCompressor(self._delta)
 
663
                    self._unadded_refs = {}
 
664
                    keys_to_add = []
 
665
                    basis_end = 0
 
666
                    groups += 1
645
667
            found_sha1, end_point = self._compressor.compress(record.key,
646
668
                lines, record.sha1)
647
669
            if record.key[-1] is None: