~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revfile.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-09 05:06:36 UTC
  • Revision ID: mbp@sourcefrog.net-20050409050636-fc5d6b1af98acb3f61d18276
Revfile: compress data going into datafile if that would be worthwhile

Show diffs side-by-side

added added

removed removed

Lines of Context:
88
88
I_OFFSET = 3
89
89
I_LEN = 4
90
90
 
 
91
FL_GZIP = 1
 
92
 
91
93
 
92
94
class RevfileError(Exception):
93
95
    pass
132
134
                                   % (h, self.basename))
133
135
 
134
136
 
135
 
        
136
 
 
137
137
 
138
138
    def revision(self, rev):
139
139
        base = self.index[rev][0]
172
172
            return _NO_RECORD        
173
173
 
174
174
 
175
 
    def _add_common(self, text_sha, data, flags, base):
176
 
        """Add pre-processed data, can be either full text or delta."""
 
175
    def _add_common(self, text_sha, data, base):
 
176
        """Add pre-processed data, can be either full text or delta.
 
177
 
 
178
        This does the compression if that makes sense."""
 
179
 
 
180
        flags = 0
 
181
        if len(data) > 50:
 
182
            # don't do compression if it's too small; it's unlikely to win
 
183
            # enough to be worthwhile
 
184
            compr_data = zlib.compress(data)
 
185
            if len(compr_data) < len(data):
 
186
                data = compr_data
 
187
                flags = FL_GZIP
 
188
        
177
189
        idx = len(self)
178
190
        self.datafile.seek(0, 2)        # to end
179
191
        self.idxfile.seek(0, 2)
203
215
        This is not compressed against any reference version.
204
216
 
205
217
        Returns the index for that text."""
206
 
        return self._add_common(text_sha, text, 0, _NO_RECORD)
 
218
        return self._add_common(text_sha, text, _NO_RECORD)
207
219
 
208
220
 
209
221
    def _add_delta(self, text, text_sha, base):
211
223
        self._check_index(base)
212
224
        base_text = self.get(base)
213
225
        data = mdiff.bdiff(base_text, text)
214
 
        return self._add_common(text_sha, data, 0, base)
 
226
        return self._add_common(text_sha, data, base)
215
227
 
216
228
 
217
229
    def add(self, text, base=_NO_RECORD):
224
236
        if base == _NO_RECORD:
225
237
            return self._add_full_text(text, text_sha)
226
238
        else:
227
 
            return self._add_delta(self, text, text_sha, base)
 
239
            return self._add_delta(text, text_sha, base)
228
240
 
229
241
 
230
242
    def addrevision(self, text, changeset):
376
388
        new_idx = r.add(sys.stdin.read())
377
389
        print 'added idx %d' % new_idx
378
390
    elif cmd == 'add-delta':
379
 
        new_idx = r._add_delta(sys.stdin.read(), int(argv[2]))
 
391
        new_idx = r.add(sys.stdin.read(), int(argv[2]))
380
392
        print 'added idx %d' % new_idx
381
393
    elif cmd == 'dump':
382
394
        r.dump()