If a checksummed file is deleted, we should still use redo-oob.

We were giving up and rebuilding the toplevel object, which did eventually
rebuild our checksummed file, but then the file turned out to be identical
to what it was before, so that nobody *else* who depended on it ended up
getting rebuilt.  So the results were indeterminate.

Now we treat it as if its dirtiness is unknown, so we build it using
redo-oob before building any of its dependencies.
This commit is contained in:
Avery Pennarun 2010-12-11 05:43:02 -08:00
commit e7f7119f2e
5 changed files with 35 additions and 6 deletions

View file

@ -28,9 +28,16 @@ def dirty_deps(f, depth, max_changed):
if not f.stamp:
debug('%s-- DIRTY (no stamp)\n' % depth)
return DIRTY
if f.stamp != f.read_stamp():
debug('%s-- DIRTY (mtime)\n' % depth)
return DIRTY
newstamp = f.read_stamp()
if f.stamp != newstamp:
if newstamp == state.STAMP_MISSING:
debug('%s-- DIRTY (missing)\n' % depth)
else:
debug('%s-- DIRTY (mtime)\n' % depth)
if f.csum:
return [f]
else:
return DIRTY
must_build = []
for mode,f2 in f.deps():