summaryrefslogtreecommitdiffstats
path: root/src/graph.cc
diff options
context:
space:
mode:
authorScott Graham <scottmg@chromium.org>2012-08-15 04:09:19 (GMT)
committerEvan Martin <martine@danga.com>2012-08-15 04:09:19 (GMT)
commitb56fe8082bfd59205efb55f6b1e7862045e005f2 (patch)
treec10805e66fe986d7ab3a0f4ff5f8d0a5fbaadd7d /src/graph.cc
parentac04abe2f9c87afe4e4d43ac63e5af2dd10376fb (diff)
downloadNinja-b56fe8082bfd59205efb55f6b1e7862045e005f2.zip
Ninja-b56fe8082bfd59205efb55f6b1e7862045e005f2.tar.gz
Ninja-b56fe8082bfd59205efb55f6b1e7862045e005f2.tar.bz2
if a file is missing in the log, count it as dirty
This could cause overbuilding (if the log is missing an entry and the right file is already in place) but is otherwise necessary for correctness (if a file is already in place but we don't have a log entry for it).
Diffstat (limited to 'src/graph.cc')
-rw-r--r--src/graph.cc13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/graph.cc b/src/graph.cc
index 18adeee..9654c1a 100644
--- a/src/graph.cc
+++ b/src/graph.cc
@@ -158,10 +158,15 @@ bool Edge::RecomputeOutputDirty(BuildLog* build_log,
// May also be dirty due to the command changing since the last build.
// But if this is a generator rule, the command changing does not make us
// dirty.
- if (!rule_->generator() && build_log &&
- (entry || (entry = build_log->LookupByOutput(output->path())))) {
- if (BuildLog::LogEntry::HashCommand(command) != entry->command_hash) {
- EXPLAIN("command line changed for %s", output->path().c_str());
+ if (!rule_->generator() && build_log) {
+ if (entry || (entry = build_log->LookupByOutput(output->path()))) {
+ if (BuildLog::LogEntry::HashCommand(command) != entry->command_hash) {
+ EXPLAIN("command line changed for %s", output->path().c_str());
+ return true;
+ }
+ }
+ if (!entry) {
+ EXPLAIN("command line not found in log for %s", output->path().c_str());
return true;
}
}