diff options
author | Scott Graham <scottmg@chromium.org> | 2012-08-15 04:09:19 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2012-08-15 04:09:19 (GMT) |
commit | b56fe8082bfd59205efb55f6b1e7862045e005f2 (patch) | |
tree | c10805e66fe986d7ab3a0f4ff5f8d0a5fbaadd7d /src/graph.cc | |
parent | ac04abe2f9c87afe4e4d43ac63e5af2dd10376fb (diff) | |
download | Ninja-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.cc | 13 |
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; } } |