Certain redo post-build failures would still mark a target as built.

If we failed because:
- target dir doesn't exist
- failed to copy from stdout
- failed to rename $3

We would correctly return error 209, but the target would still be
marked as having been built, so redo-ifchange would not try to build it
next time, beause we forgot to call sf.set_failed() in those cases.

minimal/do worked correctly.

Added a test to catch this in the future.
This commit is contained in:
Avery Pennarun 2019-03-02 02:13:18 -05:00
commit 8100aa4973
6 changed files with 29 additions and 1 deletions

1
t/122-defaults-parent/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.log

View file

@ -0,0 +1,22 @@
rm -f x/shouldfail
log=$PWD/$1.log
rm -f "$log"
expect_fail() {
local rv=$1
shift
if ("$@") >>$log 2>&1; then
cat "$log" >&2
echo "unexpected success:" "$@" >&2
return $rv
else
return 0
fi
}
cd inner
expect_fail 11 redo ../x/shouldfail # should fail
expect_fail 12 redo-ifchange ../x/shouldfail # should fail again
exit 0

View file

@ -0,0 +1,2 @@
rm -f *~ .*~ */*~ */.*~ *.tmp */*.tmp x/shouldfail *.log */*.log

View file

@ -0,0 +1,2 @@
echo "inner/default.do: PWD=$PWD '$1' '$2' '$3'" >&2
echo SUSPICIOUS

View file