builder.py: atomically replace the log for a given target.

Previously we were truncating the log if it existed.  This would cause
redo-log to produce invalid output if you had the following (admittedly
rare) sequence in a single session:
- start building X
- redo-log starts showing the log for X
- finish building X
- redo-log has not finished showing the log for X yet
- start building X again for some reason
- redo-log sees a truncated logfile.

Now, redo-log can finish reading the original file (which no longer has
a filename since it was overwritten) while the new file is being
created.
This commit is contained in:
Avery Pennarun 2019-03-02 03:45:35 -05:00
commit 63230a1ae3
2 changed files with 14 additions and 4 deletions

View file

@ -1,3 +1,3 @@
exec >&2
redo-ifchange ../redo/version/all ../redo/py list redo-sh
redo-ifchange ../redo/version/all ../redo/py ../redo/sh list
xargs redo-ifchange <list