diff options
author | Colin Cross <ccross@android.com> | 2021-04-21 10:04:44 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2021-10-11 17:23:22 -0700 |
commit | d2dae79908e890222d4fd4fa81c669c40f102c47 (patch) | |
tree | b6ed850654411c8cf11ebdfa37e7c4f84c21e526 | |
parent | 0cd88287a4cd77d11c92c7a9b44bb15fb787a1ee (diff) | |
download | ninja-d2dae79908e890222d4fd4fa81c669c40f102c47.tar.gz |
Remove early return from Builder::AddTarget
Refactor Builder::AddTarget to remove an early return in a non-error
case. The next CL will add code that needs to be executed even if the
node is clean.
Change-Id: I953dc54b60b635dd75d75f8f3931970faefc5ecf
-rw-r--r-- | src/build.cc | 10 | ||||
-rw-r--r-- | src/build_test.cc | 8 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/build.cc b/src/build.cc index cf07846..735922b 100644 --- a/src/build.cc +++ b/src/build.cc @@ -556,13 +556,13 @@ bool Builder::AddTarget(Node* target, string* err) { if (!scan_.RecomputeDirty(target, err)) return false; - if (Edge* in_edge = target->in_edge()) { - if (in_edge->outputs_ready()) - return true; // Nothing to do. + Edge* in_edge = target->in_edge(); + if (!in_edge || !in_edge->outputs_ready()) { + if (!plan_.AddTarget(target, err)) { + return false; + } } - if (!plan_.AddTarget(target, err)) - return false; return true; } diff --git a/src/build_test.cc b/src/build_test.cc index 8b6dca2..8da4698 100644 --- a/src/build_test.cc +++ b/src/build_test.cc @@ -897,6 +897,14 @@ TEST_F(BuildTest, MissingTarget) { EXPECT_EQ("unknown target: 'meow'", err); } +TEST_F(BuildTest, MissingInputTarget) { + // Target is a missing input file + string err; + Dirty("in1"); + EXPECT_FALSE(builder_.AddTarget("in1", &err)); + EXPECT_EQ("'in1' missing and no known rule to make it", err); +} + TEST_F(BuildTest, MakeDirs) { string err; |