summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2021-04-21 10:04:44 -0700
committerColin Cross <ccross@android.com>2021-10-11 17:23:22 -0700
commitd2dae79908e890222d4fd4fa81c669c40f102c47 (patch)
treeb6ed850654411c8cf11ebdfa37e7c4f84c21e526
parent0cd88287a4cd77d11c92c7a9b44bb15fb787a1ee (diff)
downloadninja-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.cc10
-rw-r--r--src/build_test.cc8
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;