~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

  • Committer: Robert Collins
  • Date: 2008-09-19 06:53:41 UTC
  • mto: (3696.5.1 commit-updates)
  • mto: This revision was merged to the branch mainline in revision 3741.
  • Revision ID: robertc@robertcollins.net-20080919065341-5t5w1p2gi926nfia
First cut - make it work - at updating the tree stat cache during commit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
241
241
            content - stat, length, exec, sha/link target. This is only
242
242
            accessed when the entry has a revision of None - that is when it is
243
243
            a candidate to commit.
244
 
        :return: A tuple (change_delta, version_recorded). change_delta is 
245
 
            an inventory_delta change for this entry against the basis tree of
246
 
            the commit, or None if no change occured against the basis tree.
 
244
        :return: A tuple (change_delta, version_recorded, fs_hash).
 
245
            change_delta is an inventory_delta change for this entry against
 
246
            the basis tree of the commit, or None if no change occured against
 
247
            the basis tree.
247
248
            version_recorded is True if a new version of the entry has been
248
249
            recorded. For instance, committing a merge where a file was only
249
250
            changed on the other side will return (delta, False).
 
251
            fs_hash is either None, or the hash of the path. (Currently we 
 
252
            use sha1 hashes of the entire file content, and only calculate
 
253
            these for regular files).
250
254
        """
251
255
        if self.new_inventory.root is None:
252
256
            if ie.parent_id is not None:
287
291
                else:
288
292
                    # add
289
293
                    delta = (None, path, ie.file_id, ie)
290
 
                return delta, False
 
294
                return delta, False, None
291
295
            else:
292
296
                # we don't need to commit this, because the caller already
293
297
                # determined that an existing revision of this file is
298
302
                    raise AssertionError("Impossible situation, a skipped "
299
303
                        "inventory entry (%r) claims to be modified in this "
300
304
                        "commit (%r).", (ie, self._new_revision_id))
301
 
                return None, False
 
305
                return None, False, None
302
306
        # XXX: Friction: parent_candidates should return a list not a dict
303
307
        #      so that we don't have to walk the inventories again.
304
308
        parent_candiate_entries = ie.parent_candidates(parent_invs)
350
354
                    ie.text_size = parent_entry.text_size
351
355
                    ie.text_sha1 = parent_entry.text_sha1
352
356
                    ie.executable = parent_entry.executable
353
 
                    return self._get_delta(ie, basis_inv, path), False
 
357
                    return self._get_delta(ie, basis_inv, path), False, None
354
358
                else:
355
359
                    # Either there is only a hash change(no hash cache entry,
356
360
                    # or same size content change), or there is no change on
375
379
                ie.text_size = parent_entry.text_size
376
380
                ie.text_sha1 = parent_entry.text_sha1
377
381
                ie.executable = parent_entry.executable
378
 
                return self._get_delta(ie, basis_inv, path), False
 
382
                return self._get_delta(ie, basis_inv, path), False, None
379
383
        elif kind == 'directory':
380
384
            if not store:
381
385
                # all data is meta here, nothing specific to directory, so
382
386
                # carry over:
383
387
                ie.revision = parent_entry.revision
384
 
                return self._get_delta(ie, basis_inv, path), False
 
388
                return self._get_delta(ie, basis_inv, path), False, None
385
389
            lines = []
386
390
            self._add_text_to_weave(ie.file_id, lines, heads, None)
387
391
        elif kind == 'symlink':
395
399
                # unchanged, carry over.
396
400
                ie.revision = parent_entry.revision
397
401
                ie.symlink_target = parent_entry.symlink_target
398
 
                return self._get_delta(ie, basis_inv, path), False
 
402
                return self._get_delta(ie, basis_inv, path), False, None
399
403
            ie.symlink_target = current_link_target
400
404
            lines = []
401
405
            self._add_text_to_weave(ie.file_id, lines, heads, None)
407
411
                # unchanged, carry over.
408
412
                ie.reference_revision = parent_entry.reference_revision
409
413
                ie.revision = parent_entry.revision
410
 
                return self._get_delta(ie, basis_inv, path), False
 
414
                return self._get_delta(ie, basis_inv, path), False, None
411
415
            ie.reference_revision = content_summary[3]
412
416
            lines = []
413
417
            self._add_text_to_weave(ie.file_id, lines, heads, None)
414
418
        else:
415
419
            raise NotImplementedError('unknown kind')
416
420
        ie.revision = self._new_revision_id
417
 
        return self._get_delta(ie, basis_inv, path), True
 
421
        return self._get_delta(ie, basis_inv, path), True, ie.text_sha1
418
422
 
419
423
    def _add_text_to_weave(self, file_id, new_lines, parents, nostore_sha):
420
424
        # Note: as we read the content directly from the tree, we know its not