Make sure StepFailedException includes full description.
Summary:
I saw this while developing and decided the error message could
have been more helpful.
Test Plan: Sandcastle builds.
diff --git a/src/com/facebook/buck/step/StepFailedException.java b/src/com/facebook/buck/step/StepFailedException.java
index 2a8785d..38bc94c 100644
--- a/src/com/facebook/buck/step/StepFailedException.java
+++ b/src/com/facebook/buck/step/StepFailedException.java
@@ -37,12 +37,12 @@
Optional<BuildTarget> buildTarget) {
String message;
if (buildTarget.isPresent()) {
- message = String.format("%s failed on step \"%s\" with exit code %d",
+ message = String.format("%s failed with exit code %d:\n%s",
buildTarget.get().getFullyQualifiedName(),
- step.getShortName(),
- exitCode);
+ exitCode,
+ step.getDescription(context));
} else {
- message = String.format("Failed with %d: %s",
+ message = String.format("Failed with exit code %d:\n%s",
exitCode,
step.getDescription(context));
}
diff --git a/test/com/facebook/buck/shell/GenruleFailingCommandIntegrationTest.java b/test/com/facebook/buck/shell/GenruleFailingCommandIntegrationTest.java
index 50c05ef..8597813 100644
--- a/test/com/facebook/buck/shell/GenruleFailingCommandIntegrationTest.java
+++ b/test/com/facebook/buck/shell/GenruleFailingCommandIntegrationTest.java
@@ -49,6 +49,7 @@
// We make sure that we failed for the right reason.
assertThat(buildResult.getStderr(),
- containsString("BUILD FAILED: //:fail failed on step \"genrule\" with exit code 1"));
+ containsString("BUILD FAILED: //:fail failed with exit code 1:\n" +
+ "/bin/bash -e -c 'false; echo >&2 hi'"));
}
}
diff --git a/test/com/facebook/buck/step/BUCK b/test/com/facebook/buck/step/BUCK
index b5c2c4a..9366392 100644
--- a/test/com/facebook/buck/step/BUCK
+++ b/test/com/facebook/buck/step/BUCK
@@ -31,6 +31,7 @@
'//lib:guava',
'//lib:junit',
'//src/com/facebook/buck/event:event',
+ '//src/com/facebook/buck/model:model',
'//src/com/facebook/buck/step:step',
'//src/com/facebook/buck/util:io',
'//src/com/facebook/buck/util:util',
diff --git a/test/com/facebook/buck/step/StepFailedExceptionTest.java b/test/com/facebook/buck/step/StepFailedExceptionTest.java
new file mode 100644
index 0000000..2bf542b
--- /dev/null
+++ b/test/com/facebook/buck/step/StepFailedExceptionTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2013-present Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License. You may obtain
+ * a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.facebook.buck.step;
+
+import static org.junit.Assert.assertEquals;
+
+import com.facebook.buck.model.BuildTarget;
+import com.google.common.base.Optional;
+
+import org.junit.Test;
+
+public class StepFailedExceptionTest {
+
+ @Test
+ public void testCreateForFailingStepWithBuildTarget() {
+ final int exitCode = 17;
+ Step step = new FakeStep("cp", "cp foo bar", exitCode);
+ ExecutionContext context = TestExecutionContext.newInstance();
+ BuildTarget buildTarget = new BuildTarget("//foo", "bar");
+ StepFailedException exception = StepFailedException.createForFailingStep(
+ step, context, exitCode, Optional.of(buildTarget));
+
+ assertEquals(step, exception.getStep());
+ assertEquals(exitCode, exception.getExitCode());
+ assertEquals("//foo:bar failed with exit code 17:\ncp foo bar", exception.getMessage());
+ }
+
+ @Test
+ public void testCreateForFailingStepWithoutBuildTarget() {
+ final int exitCode = 17;
+ Step step = new FakeStep("cp", "cp foo bar", exitCode);
+ ExecutionContext context = TestExecutionContext.newInstance();
+ StepFailedException exception = StepFailedException.createForFailingStep(
+ step, context, exitCode, Optional.<BuildTarget>absent());
+
+ assertEquals(step, exception.getStep());
+ assertEquals(exitCode, exception.getExitCode());
+ assertEquals("Failed with exit code 17:\ncp foo bar", exception.getMessage());
+ }
+}