Move warning emission on dupe edges from State to ManifestParser.
authorNico Weber <nicolasweber@gmx.de>
Tue, 24 Mar 2015 01:16:36 +0000 (18:16 -0700)
committerNico Weber <nicolasweber@gmx.de>
Tue, 24 Mar 2015 01:16:36 +0000 (18:16 -0700)
This will make it easier to optionally make this an error (because
ManifestParser has a way of printing errors), and it'll also make
it easier to make the tests quiet again.

No behavior change.

src/manifest_parser.cc
src/state.cc
src/state.h

index b747ad4..ede5adb 100644 (file)
@@ -328,7 +328,12 @@ bool ManifestParser::ParseEdge(string* err) {
     unsigned int slash_bits;
     if (!CanonicalizePath(&path, &slash_bits, &path_err))
       return lexer_.Error(path_err, err);
-    state_->AddOut(edge, path, slash_bits);
+    if (!state_->AddOut(edge, path, slash_bits)) {
+      Warning("multiple rules generate %s. "
+              "builds involving this target will not be correct; "
+              "continuing anyway",
+              path.c_str());
+    }
   }
   if (edge->outputs_.empty()) {
     // All outputs of the edge are already created by other edges. Don't add
index 0426b85..a70f211 100644 (file)
@@ -140,17 +140,13 @@ void State::AddIn(Edge* edge, StringPiece path, unsigned int slash_bits) {
   node->AddOutEdge(edge);
 }
 
-void State::AddOut(Edge* edge, StringPiece path, unsigned int slash_bits) {
+bool State::AddOut(Edge* edge, StringPiece path, unsigned int slash_bits) {
   Node* node = GetNode(path, slash_bits);
-  if (node->in_edge()) {
-    Warning("multiple rules generate %s. "
-            "builds involving this target will not be correct; "
-            "continuing anyway",
-            path.AsString().c_str());
-    return;
-  }
+  if (node->in_edge())
+    return false;
   edge->outputs_.push_back(node);
   node->set_in_edge(edge);
+  return true;
 }
 
 bool State::AddDefault(StringPiece path, string* err) {
index db0e3aa..5000138 100644 (file)
@@ -97,7 +97,7 @@ struct State {
   Node* SpellcheckNode(const string& path);
 
   void AddIn(Edge* edge, StringPiece path, unsigned int slash_bits);
-  void AddOut(Edge* edge, StringPiece path, unsigned int slash_bits);
+  bool AddOut(Edge* edge, StringPiece path, unsigned int slash_bits);
   bool AddDefault(StringPiece path, string* error);
 
   /// Reset state.  Keeps all nodes and edges, but restores them to the