apenwarr-redo/t/stamp
Avery Pennarun f702417ef3 The second half of redo-stamp: out-of-order building.
If a depends on b depends on c, and c is dirty but b uses redo-stamp
checksums, then 'redo-ifchange a' is indeterminate: we won't know if we need
to run a.do unless we first build b, but the script that *normally* runs
'redo-ifchange b' is a.do, and we don't want to run that yet, because we
don't know for sure if b is dirty, and we shouldn't build a unless one of
its dependencies is dirty.  Eek!

Luckily, there's a safe solution.  If we *know* a is dirty - eg. because
a.do or one of its children has definitely changed - then we can just run
a.do immediately and there's no problem, even if b is indeterminate, because
we were going to run a.do anyhow.

If a's dependencies are *not* definitely dirty, and all we have is
indeterminate ones like b, then that means a's build process *hasn't
changed*, which means its tree of dependencies still includes b, which means
we can deduce that if we *did* run a.do, it would end up running b.do.

Since we know that anyhow, we can safely just run b.do, which will either
b.set_checked() or b.set_changed().  Once that's done, we can re-parse a's
dependencies and this time conclusively tell if it needs to be redone or
not.  Even if it does, b is already up-to-date, so the 'redo-ifchange b'
line in a.do will be fast.

...now take all the above and do it recursively to handle nested
dependencies, etc, and you're done.
2010-12-11 05:54:39 -08:00
..
.gitignore Correctly handle a checksummed file that depends on a non-checksummed file. 2010-12-11 05:54:39 -08:00
bob.do Correctly handle a checksummed file that depends on a non-checksummed file. 2010-12-11 05:54:39 -08:00
clean.do Correctly handle a checksummed file that depends on a non-checksummed file. 2010-12-11 05:54:39 -08:00
stamptest.do The second half of redo-stamp: out-of-order building. 2010-12-11 05:54:39 -08:00
stampy.do Correctly handle a checksummed file that depends on a non-checksummed file. 2010-12-11 05:54:39 -08:00
test.do Half-support for using file checksums instead of stamps. 2010-12-11 05:54:37 -08:00
usestamp.do Half-support for using file checksums instead of stamps. 2010-12-11 05:54:37 -08:00