~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tree.py

  • Committer: mbp at sourcefrog
  • Date: 2005-03-29 01:26:19 UTC
  • Revision ID: mbp@sourcefrog.net-20050329012619-dd8959fc63b3a074
- fixup checks on retrieved files to cope with compression,
  and have less checks now there's a check command again

- move code to destroy stores into the ScratchStore subclass

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
from inventory import Inventory
24
24
from trace import mutter, note
25
25
from osutils import pumpfile, compare_files, filesize, quotefn, sha_file, \
26
 
     joinpath, splitpath, appendpath, isdir, isfile, file_kind
 
26
     joinpath, splitpath, appendpath, isdir, isfile, file_kind, fingerprint_file
27
27
from errors import bailout
28
28
import branch
29
29
from stat import S_ISREG, S_ISDIR, ST_MODE, ST_SIZE
73
73
                         doc="Inventory of this Tree")
74
74
 
75
75
    def _check_retrieved(self, ie, f):
76
 
        # TODO: Test this check by damaging the store?
 
76
        fp = fingerprint_file(f)
 
77
        f.seek(0)
 
78
        
77
79
        if ie.text_size is not None:
78
 
            fs = filesize(f)
79
 
            if fs != ie.text_size:
 
80
            if fs != fp['size']:
80
81
                bailout("mismatched size for file %r in %r" % (ie.file_id, self._store),
81
82
                        ["inventory expects %d bytes" % ie.text_size,
82
 
                         "file is actually %d bytes" % fs,
 
83
                         "file is actually %d bytes" % fp['size'],
83
84
                         "store is probably damaged/corrupt"])
84
85
 
85
 
        f_hash = sha_file(f)
86
 
        f.seek(0)
87
 
        if ie.text_sha1 != f_hash:
 
86
        if ie.text_sha1 != fp['sha1']:
88
87
            bailout("wrong SHA-1 for file %r in %r" % (ie.file_id, self._store),
89
88
                    ["inventory expects %s" % ie.text_sha1,
90
 
                     "file is actually %s" % f_hash,
 
89
                     "file is actually %s" % fp['sha1'],
91
90
                     "store is probably damaged/corrupt"])
92
91
 
93
92
 
315
314
        ie = self._inventory[file_id]
316
315
        f = self._store[ie.text_id]
317
316
        mutter("  get fileid{%s} from %r" % (file_id, self))
318
 
        fs = filesize(f)
319
 
        if ie.text_size is None:
320
 
            note("warning: no text size recorded on %r" % ie)
321
 
        self._check_retrieved(ie, f)
 
317
        ## self._check_retrieved(ie, f)
322
318
        return f
323
319
 
324
320
    def get_file_size(self, file_id):