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

View file

@ -419,7 +419,8 @@ class _BuildJob(object):
sf.csum = None
sf.update_stamp()
sf.set_changed()
else:
# rv might have changed up above
if rv:
helpers.unlink(self.tmpname)
sf = self.sf
sf.set_failed()