Implement restat rules
authorPeter Collingbourne <peter@pcc.me.uk>
Mon, 19 Sep 2011 01:56:15 +0000 (02:56 +0100)
committerPeter Collingbourne <peter@pcc.me.uk>
Mon, 24 Oct 2011 00:16:38 +0000 (01:16 +0100)
commit0efbbbf67a94452919084765e87106e7748274cb
tree21c8c5a13b70d7f287b2f569a35f6a03a7f1c19d
parent386cbf6c7e49c88b87f54619b06670ea9f66c8a5
Implement restat rules

A restat rule is a rule which is capable of pruning the build tree
depending on the timestamps of its outputs before and after a build.
After a restat rule is rebuilt, Ninja will re-stat each output file
to obtain its current timestamp.  If the timestamp is unchanged from
when Ninja initially stat'ed the file before starting the build,
Ninja will mark that output file as clean, and recursively for each
reverse dependency of the output file, recompute its dirty status.

Ninja then stores the most recent timestamp of any input file in the
build log entry associated with the output file.  This timestamp
will be treated by future invocations of Ninja as the output file's
modification time instead of the output file's actual modification
time for the purpose of deciding whether it is dirty (but not whether
its reverse dependencies are dirty).
doc/manual.asciidoc
src/build.cc
src/build.h
src/build_log.cc
src/build_log.h
src/build_log_test.cc
src/build_test.cc
src/graph.cc
src/graph.h
src/parsers.cc