From 33b3480d82057a01de8f8de5671046c26c88db4b Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 5 Oct 2015 14:17:56 -0700 Subject: Print output file on failure Modify the FAILED: output to provide the output files that failed to build, followed by the failed command on the next line. This makes the failure much easier to read, as you can immediately see much shorter name of the file that failed instead of trying to parse a very long command line. It also makes manually re-running the failed command much easier because you can copy the whole line without ending up with the FAILED: prefix. --- src/build.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/build.cc b/src/build.cc index e4820d0..8865a1d 100644 --- a/src/build.cc +++ b/src/build.cc @@ -125,8 +125,15 @@ void BuildStatus::BuildEdgeFinished(Edge* edge, PrintStatus(edge); // Print the command that is spewing before printing its output. - if (!success) - printer_.PrintOnNewLine("FAILED: " + edge->EvaluateCommand() + "\n"); + if (!success) { + string outputs; + for (vector::const_iterator o = edge->outputs_.begin(); + o != edge->outputs_.end(); ++o) + outputs += (*o)->path() + " "; + + printer_.PrintOnNewLine("FAILED: " + outputs + "\n"); + printer_.PrintOnNewLine(edge->EvaluateCommand() + "\n"); + } if (!output.empty()) { // ninja sets stdout and stderr of subprocesses to a pipe, to be able to -- cgit v0.12