~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-28 02:49:46 UTC
  • Revision ID: mbp@sourcefrog.net-20050328024945-d80f4adc5dfaa9a1
More help for check command

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, fingerprint_file
 
26
     joinpath, splitpath, appendpath, isdir, isfile, file_kind
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
 
        fp = fingerprint_file(f)
77
 
        f.seek(0)
78
 
        
 
76
        # TODO: Test this check by damaging the store?
79
77
        if ie.text_size is not None:
80
 
            if ie.text_size != fp['size']:
 
78
            fs = filesize(f)
 
79
            if fs != ie.text_size:
81
80
                bailout("mismatched size for file %r in %r" % (ie.file_id, self._store),
82
81
                        ["inventory expects %d bytes" % ie.text_size,
83
 
                         "file is actually %d bytes" % fp['size'],
 
82
                         "file is actually %d bytes" % fs,
84
83
                         "store is probably damaged/corrupt"])
85
84
 
86
 
        if ie.text_sha1 != fp['sha1']:
 
85
        f_hash = sha_file(f)
 
86
        f.seek(0)
 
87
        if ie.text_sha1 != f_hash:
87
88
            bailout("wrong SHA-1 for file %r in %r" % (ie.file_id, self._store),
88
89
                    ["inventory expects %s" % ie.text_sha1,
89
 
                     "file is actually %s" % fp['sha1'],
 
90
                     "file is actually %s" % f_hash,
90
91
                     "store is probably damaged/corrupt"])
91
92
 
92
93
 
199
200
            ls = os.listdir(dp)
200
201
            ls.sort()
201
202
            for f in ls:
202
 
                ## TODO: If we find a subdirectory with its own .bzr
203
 
                ## directory, then that is a separate tree and we
204
 
                ## should exclude it.
205
203
                if bzrlib.BZRDIR == f:
206
204
                    continue
207
205
 
283
281
        """Check whether the filename matches an ignore pattern.
284
282
 
285
283
        Patterns containing '/' need to match the whole path; others
286
 
        match against only the last component.
287
 
 
288
 
        If the file is ignored, returns the pattern which caused it to
289
 
        be ignored, otherwise None.  So this can simply be used as a
290
 
        boolean if desired."""
291
 
 
292
 
        ## TODO: Use '**' to match directories, and other extended globbing stuff from cvs/rsync.
293
 
        
 
284
        match against only the last component."""
 
285
        ## TODO: Use extended zsh-style globs maybe?
 
286
        ## TODO: Use '**' to match directories?
294
287
        for pat in self.get_ignore_list():
295
288
            if '/' in pat:
296
289
                if fnmatch.fnmatchcase(filename, pat):
297
 
                    return pat
 
290
                    return True
298
291
            else:
299
292
                if fnmatch.fnmatchcase(splitpath(filename)[-1], pat):
300
 
                    return pat
301
 
        return None
 
293
                    return True
 
294
        return False
302
295
        
303
296
 
304
297
        
322
315
        ie = self._inventory[file_id]
323
316
        f = self._store[ie.text_id]
324
317
        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)
325
321
        self._check_retrieved(ie, f)
326
322
        return f
327
323