apenwarr-redo/t/360-symlinks/all.do
Avery Pennarun ec72beb343 minimal/do: don't create a .did file until after a file is actually built.
With the new "continue" feature on by default, it turned out that
ctrl-c during a build, or a .do file returning an error, would mark a
target as "built" even though it hadn't been.  This would prevent
retrying it when you started minimal/do again.  Use a temp file
instead.

It's a little tricky: to prevent accidental recursion, we want to
create a file *before* building, but clean up that file when starting
the next session.  And we rename that file to the actual .did file
*after* building successfully.
2018-11-02 04:25:35 -04:00

34 lines
930 B
Text

rm -f a a.extra b b.ran
d0=""
redo a
redo-ifchange b
d1=$(cat b.ran)
[ "$d0" != "$d1" ] || exit 11
# b only rebuilds if a changes
../flush-cache
redo-ifchange b
d2=$(cat b.ran)
[ "$d1" = "$d2" ] || exit 12
. ../skip-if-minimal-do.sh
# forcibly changing a should rebuild b.
# a is already symlink to a.extra, but redo shouldn't care about the
# target of symlinks, so it shouldn't freak out that a.extra has changed.
# Anyway, b should still rebuild because a was rebuilt.
../flush-cache
redo a
redo-ifchange b
d3=$(cat b.ran)
[ "$d2" != "$d3" ] || exit 13
# Explicitly check that changing a's symlink target (a.extra) does *not*
# trigger a rebuild of b, because b depends on the stamp of the symlink,
# not what the symlink points to. In redo, you declare dependencies on
# specific filenames, not the things they happen to refer to.
../flush-cache
touch a.extra
redo-ifchange b
d4=$(cat b.ran)
[ "$d3" = "$d4" ] || exit 14