// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants;
import com.intellij.execution.process.ProcessOutput;
import com.intellij.execution.process.UnixProcessManager;
import com.intellij.openapi.application.ApplicationManager;
import org.jetbrains.annotations.NotNull;
public class PantsExecutionException extends PantsException {
private final ProcessOutput myProcessOutput;
private final String myCommand;
public PantsExecutionException(@NotNull String message, @NotNull String command, @NotNull ProcessOutput processOutput) {
super(message);
myCommand = command;
myProcessOutput = processOutput;
}
@NotNull
public String getCommand() {
return myCommand;
}
public boolean isTerminated() {
// check if exit code contains SIGTERM bits
// some scripts may return (exit code + 128) indicating some special conditions
return (getProcessOutput().getExitCode() & UnixProcessManager.SIGTERM) == UnixProcessManager.SIGTERM;
}
@NotNull
public ProcessOutput getProcessOutput() {
return myProcessOutput;
}
@Override
public String getMessage() {
final String originalMessage = super.getMessage();
if (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isInternal()) {
return originalMessage + "\n" + getExecutionDetails();
}
return originalMessage;
}
@NotNull
public String getExecutionDetails() {
return getCommand() + "\n" +
"Exit code: " + getProcessOutput().getExitCode() + "\n" +
getProcessOutput().getStdout() + "\n" +
getProcessOutput().getStderr();
}
}