~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weave.py

  • Committer: Martin Pool
  • Date: 2005-09-19 10:22:06 UTC
  • Revision ID: mbp@sourcefrog.net-20050919102206-dc4a95dbbe908e2c
- caller can pass SHA-1 to Weave.add for efficiency

Show diffs side-by-side

added added

removed removed

Lines of Context:
236
236
        return self._names[version]
237
237
 
238
238
 
239
 
    def _check_repeated_add(self, name, parents, text):
 
239
    def _check_repeated_add(self, name, parents, text, sha1):
240
240
        """Check that a duplicated add is OK.
241
241
 
242
242
        If it is, return the (old) index; otherwise raise an exception.
245
245
        if sorted(self._parents[idx]) != sorted(parents):
246
246
            raise WeaveError("name \"%s\" already present in weave "
247
247
                             "with different parents" % name)
248
 
        new_sha1 = sha_strings(text)
249
 
        if new_sha1 != self._sha1s[idx]:
 
248
        if sha1 != self._sha1s[idx]:
250
249
            raise WeaveError("name \"%s\" already present in weave "
251
250
                             "with different text" % name)            
252
251
        return idx
253
252
        
254
253
 
255
254
        
256
 
    def add(self, name, parents, text):
 
255
    def add(self, name, parents, text, sha1=None):
257
256
        """Add a single text on top of the weave.
258
257
  
259
258
        Returns the index number of the newly added version.
266
265
            List or set of direct parent version numbers.
267
266
            
268
267
        text
269
 
            Sequence of lines to be added in the new version."""
 
268
            Sequence of lines to be added in the new version.
 
269
 
 
270
        sha -- SHA-1 of the file, if known.  This is trusted to be
 
271
            correct if supplied.
 
272
        """
270
273
 
271
274
        assert isinstance(name, basestring)
 
275
        if sha1 is None:
 
276
            sha1 = sha_strings(text)
272
277
        if name in self._name_map:
273
 
            return self._check_repeated_add(name, parents, text)
 
278
            return self._check_repeated_add(name, parents, text, sha1)
274
279
 
275
280
        parents = map(self.maybe_lookup, parents)
276
281
        self._check_versions(parents)
277
282
        ## self._check_lines(text)
278
283
        new_version = len(self._parents)
279
284
 
280
 
        sha1 = sha_strings(text)
281
285
 
282
286
        # if we abort after here the (in-memory) weave will be corrupt because only
283
287
        # some fields are updated