use of org.gradle.launcher.exec.BuildActionResult in project gradle by gradle.
the class InProcessGradleExecuter method executeBuild.
private BuildResult executeBuild(GradleInvocation invocation, OutputStream outputStream, OutputStream errorStream, BuildListenerImpl listener) {
// Augment the environment for the execution
System.setIn(connectStdIn());
processEnvironment.maybeSetProcessDir(getWorkingDir());
for (Map.Entry<String, String> entry : invocation.environmentVars.entrySet()) {
processEnvironment.maybeSetEnvironmentVariable(entry.getKey(), entry.getValue());
}
Map<String, String> implicitJvmSystemProperties = getImplicitJvmSystemProperties();
System.getProperties().putAll(implicitJvmSystemProperties);
// TODO: Reuse more of CommandlineActionFactory
CommandLineParser parser = new CommandLineParser();
FileCollectionFactory fileCollectionFactory = TestFiles.fileCollectionFactory();
ParametersConverter parametersConverter = new ParametersConverter(new BuildLayoutFactory(), fileCollectionFactory);
parametersConverter.configure(parser);
Parameters parameters = parametersConverter.convert(parser.parse(getAllArgs()), getWorkingDir());
BuildActionExecuter<BuildActionParameters, BuildRequestContext> actionExecuter = GLOBAL_SERVICES.get(BuildActionExecuter.class);
ListenerManager listenerManager = GLOBAL_SERVICES.get(ListenerManager.class);
listenerManager.addListener(listener);
try {
// TODO: Reuse more of BuildActionsFactory
StartParameterInternal startParameter = parameters.getStartParameter();
BuildAction action = new ExecuteBuildAction(startParameter);
BuildActionParameters buildActionParameters = createBuildActionParameters(startParameter);
BuildRequestContext buildRequestContext = createBuildRequestContext();
LoggingManagerInternal loggingManager = createLoggingManager(startParameter, outputStream, errorStream);
loggingManager.start();
try {
startMeasurement();
try {
BuildActionResult result = actionExecuter.execute(action, buildActionParameters, buildRequestContext);
if (result.getException() != null) {
return new BuildResult(null, result.getException());
}
if (result.getFailure() != null) {
PayloadSerializer payloadSerializer = new PayloadSerializer(new TestClassLoaderRegistry());
return new BuildResult(null, (RuntimeException) payloadSerializer.deserialize(result.getFailure()));
}
return new BuildResult(null, null);
} finally {
stopMeasurement();
}
} finally {
loggingManager.stop();
}
} finally {
listenerManager.removeListener(listener);
}
}
use of org.gradle.launcher.exec.BuildActionResult in project gradle by gradle.
the class ExecuteBuild method doBuild.
@Override
protected void doBuild(final DaemonCommandExecution execution, Build build) {
LOGGER.debug(DaemonMessages.STARTED_BUILD);
LOGGER.debug("Executing build with daemon context: {}", execution.getDaemonContext());
runningStats.buildStarted();
DaemonConnectionBackedEventConsumer buildEventConsumer = new DaemonConnectionBackedEventConsumer(execution);
try {
BuildCancellationToken cancellationToken = execution.getDaemonStateControl().getCancellationToken();
BuildRequestContext buildRequestContext = new DefaultBuildRequestContext(build.getBuildRequestMetaData(), cancellationToken, buildEventConsumer);
if (!build.getAction().getStartParameter().isContinuous()) {
buildRequestContext.getCancellationToken().addCallback(new Runnable() {
@Override
public void run() {
LOGGER.info(DaemonMessages.CANCELED_BUILD);
}
});
}
BuildActionResult result = actionExecuter.execute(build.getAction(), build.getParameters(), buildRequestContext);
execution.setResult(result);
} finally {
buildEventConsumer.waitForFinish();
runningStats.buildFinished();
LOGGER.debug(DaemonMessages.FINISHED_BUILD);
}
// ExecuteBuild should be the last action, but in case we want to decorate the result in the future
execution.proceed();
}
use of org.gradle.launcher.exec.BuildActionResult in project gradle by gradle.
the class DaemonClient method executeBuild.
protected BuildActionResult executeBuild(Build build, DaemonClientConnection connection, BuildCancellationToken cancellationToken, BuildEventConsumer buildEventConsumer) throws DaemonInitialConnectException {
Object result;
try {
LOGGER.debug("Connected to daemon {}. Dispatching request {}.", connection.getDaemon(), build);
connection.dispatch(build);
result = connection.receive();
} catch (StaleDaemonAddressException e) {
LOGGER.debug("Connected to a stale daemon address.", e);
// However, since we haven't yet started running the build, we can recover by just trying again.
throw new DaemonInitialConnectException("Connected to a stale daemon address.", e);
}
if (result == null) {
// If the response from the daemon is unintelligible, mark the daemon as unavailable so other
// clients won't try to communicate with it. We'll attempt to recovery by trying again.
connector.markDaemonAsUnavailable(connection.getDaemon());
throw new DaemonInitialConnectException("The first result from the daemon was empty. The daemon process may have died or a non-daemon process is reusing the same port.");
}
LOGGER.debug("Received result {} from daemon {} (build should be starting).", result, connection.getDaemon());
DaemonDiagnostics diagnostics = null;
if (result instanceof BuildStarted) {
diagnostics = ((BuildStarted) result).getDiagnostics();
result = monitorBuild(build, diagnostics, connection, cancellationToken, buildEventConsumer);
}
LOGGER.debug("Received result {} from daemon {} (build should be done).", result, connection.getDaemon());
connection.dispatch(new Finished());
if (result instanceof Failure) {
Throwable failure = ((Failure) result).getValue();
if (failure instanceof DaemonStoppedException && cancellationToken.isCancellationRequested()) {
return BuildActionResult.cancelled(new BuildCancelledException("Daemon was stopped to handle build cancel request.", failure));
}
throw UncheckedException.throwAsUncheckedException(failure);
} else if (result instanceof DaemonUnavailable) {
throw new DaemonInitialConnectException("The daemon we connected to was unavailable: " + ((DaemonUnavailable) result).getReason());
} else if (result instanceof Result) {
return (BuildActionResult) ((Result) result).getValue();
} else {
throw invalidResponse(result, build, diagnostics);
}
}
use of org.gradle.launcher.exec.BuildActionResult in project gradle by gradle.
the class ProviderConnection method run.
private Object run(BuildAction action, BuildCancellationToken cancellationToken, ProgressListenerConfiguration progressListenerConfiguration, BuildEventConsumer buildEventConsumer, ProviderOperationParameters providerParameters, Parameters parameters) {
try {
BuildActionExecuter<ConnectionOperationParameters, BuildRequestContext> executer = createExecuter(providerParameters, parameters);
boolean interactive = providerParameters.getStandardInput() != null;
BuildRequestContext buildRequestContext = new DefaultBuildRequestContext(new DefaultBuildRequestMetaData(providerParameters.getStartTime(), interactive), cancellationToken, buildEventConsumer);
BuildActionResult result = executer.execute(action, new ConnectionOperationParameters(parameters.daemonParams, providerParameters), buildRequestContext);
throwFailure(result);
return payloadSerializer.deserialize(result.getResult());
} finally {
progressListenerConfiguration.failsafeWrapper.rethrowErrors();
}
}
Aggregations