Search in sources :

Example 16 with BuildOperationContext

use of org.gradle.internal.operations.BuildOperationContext in project gradle by gradle.

the class RootOfNestedBuildTree method run.

@Override
public <T> T run(Function<? super BuildTreeLifecycleController, T> action) {
    final GradleInternal gradle = getBuildController().getGradle();
    ServiceRegistry services = gradle.getServices();
    BuildOperationExecutor executor = services.get(BuildOperationExecutor.class);
    return executor.call(new CallableBuildOperation<T>() {

        @Override
        public T call(BuildOperationContext context) {
            gradle.addBuildListener(new InternalBuildAdapter() {

                @Override
                public void settingsEvaluated(Settings settings) {
                    buildName = settings.getRootProject().getName();
                }
            });
            T result = action.apply(buildTreeLifecycleController);
            context.setResult(new RunNestedBuildBuildOperationType.Result() {
            });
            return result;
        }

        @Override
        public BuildOperationDescriptor.Builder description() {
            return BuildOperationDescriptor.displayName("Run nested build").details(new RunNestedBuildBuildOperationType.Details() {

                @Override
                public String getBuildPath() {
                    return gradle.getIdentityPath().getPath();
                }
            });
        }
    });
}
Also used : BuildOperationContext(org.gradle.internal.operations.BuildOperationContext) GradleInternal(org.gradle.api.internal.GradleInternal) ServiceRegistry(org.gradle.internal.service.ServiceRegistry) InternalBuildAdapter(org.gradle.internal.InternalBuildAdapter) Settings(org.gradle.api.initialization.Settings) BuildOperationExecutor(org.gradle.internal.operations.BuildOperationExecutor)

Example 17 with BuildOperationContext

use of org.gradle.internal.operations.BuildOperationContext in project gradle by gradle.

the class CleanupStaleOutputsExecuter method cleanupStaleOutputs.

private void cleanupStaleOutputs(TaskExecutionContext context) {
    Set<File> filesToDelete = new HashSet<>();
    TaskProperties properties = context.getTaskProperties();
    for (FilePropertySpec outputFileSpec : properties.getOutputFileProperties()) {
        FileCollection files = outputFileSpec.getPropertyFiles();
        for (File file : files) {
            if (cleanupRegistry.isOutputOwnedByBuild(file) && !outputFilesRepository.isGeneratedByGradle(file) && file.exists()) {
                filesToDelete.add(file);
            }
        }
    }
    if (!filesToDelete.isEmpty()) {
        outputChangeListener.beforeOutputChange(filesToDelete.stream().map(File::getAbsolutePath).collect(Collectors.toList()));
        buildOperationExecutor.run(new RunnableBuildOperation() {

            @Override
            public void run(BuildOperationContext context) throws IOException {
                for (File file : filesToDelete) {
                    if (file.exists()) {
                        logger.info("Deleting stale output file: {}", file.getAbsolutePath());
                        deleter.deleteRecursively(file);
                    }
                }
            }

            @Override
            public BuildOperationDescriptor.Builder description() {
                return BuildOperationDescriptor.displayName(CLEAN_STALE_OUTPUTS_DISPLAY_NAME).progressDisplayName("Cleaning stale outputs");
            }
        });
    }
}
Also used : BuildOperationContext(org.gradle.internal.operations.BuildOperationContext) TaskProperties(org.gradle.api.internal.tasks.properties.TaskProperties) FilePropertySpec(org.gradle.api.internal.tasks.properties.FilePropertySpec) IOException(java.io.IOException) FileCollection(org.gradle.api.file.FileCollection) File(java.io.File) RunnableBuildOperation(org.gradle.internal.operations.RunnableBuildOperation) HashSet(java.util.HashSet)

Example 18 with BuildOperationContext

use of org.gradle.internal.operations.BuildOperationContext in project gradle by gradle.

the class DefaultTaskContainer method doCreate.

private Task doCreate(Map<String, ?> options, final Action<? super Task> configureAction) {
    Map<String, ?> factoryOptions = options;
    final boolean replace;
    if (options.containsKey(Task.TASK_OVERWRITE)) {
        factoryOptions = new HashMap<String, Object>(options);
        Object replaceStr = factoryOptions.remove(Task.TASK_OVERWRITE);
        replace = "true".equals(replaceStr.toString());
    } else {
        replace = false;
    }
    final Map<String, ?> actualArgs = checkTaskArgsAndCreateDefaultValues(factoryOptions);
    final String name = actualArgs.get(Task.TASK_NAME).toString();
    if (!GUtil.isTrue(name)) {
        throw new InvalidUserDataException("The task name must be provided.");
    }
    final Class<? extends TaskInternal> type = Cast.uncheckedCast(actualArgs.get(Task.TASK_TYPE));
    final TaskIdentity<? extends TaskInternal> identity = TaskIdentity.create(name, type, project);
    return buildOperationExecutor.call(new CallableBuildOperation<Task>() {

        @Override
        public BuildOperationDescriptor.Builder description() {
            return realizeDescriptor(identity, replace, true);
        }

        @Override
        public Task call(BuildOperationContext context) {
            try {
                Object[] constructorArgs = getConstructorArgs(actualArgs);
                TaskInternal task = createTask(identity, constructorArgs);
                statistics.eagerTask(type);
                Object dependsOnTasks = actualArgs.get(Task.TASK_DEPENDS_ON);
                if (dependsOnTasks != null) {
                    task.dependsOn(dependsOnTasks);
                }
                Object description = actualArgs.get(Task.TASK_DESCRIPTION);
                if (description != null) {
                    task.setDescription(description.toString());
                }
                Object group = actualArgs.get(Task.TASK_GROUP);
                if (group != null) {
                    task.setGroup(group.toString());
                }
                Object action = actualArgs.get(Task.TASK_ACTION);
                if (action instanceof Action) {
                    Action<? super Task> taskAction = Cast.uncheckedCast(action);
                    task.doFirst(taskAction);
                } else if (action != null) {
                    Closure closure = (Closure) action;
                    task.doFirst(closure);
                }
                addTask(task, replace);
                configureAction.execute(task);
                context.setResult(REALIZE_RESULT);
                return task;
            } catch (Throwable t) {
                throw taskCreationException(name, t);
            }
        }
    });
}
Also used : BuildOperationContext(org.gradle.internal.operations.BuildOperationContext) Task(org.gradle.api.Task) DefaultTask(org.gradle.api.DefaultTask) Action(org.gradle.api.Action) Closure(groovy.lang.Closure) TaskInternal(org.gradle.api.internal.TaskInternal) InvalidUserDataException(org.gradle.api.InvalidUserDataException) DynamicObject(org.gradle.internal.metaobject.DynamicObject)

Example 19 with BuildOperationContext

use of org.gradle.internal.operations.BuildOperationContext in project gradle by gradle.

the class BuildOperationScriptPlugin method apply.

@Override
public void apply(final Object target) {
    TextResource resource = getSource().getResource();
    if (resource.isContentCached() && resource.getHasEmptyContent()) {
        // no operation, if there is no script code provided
        decorated.apply(target);
    } else {
        userCodeApplicationContext.apply(getSource().getShortDisplayName(), userCodeApplicationId -> buildOperationExecutor.run(new RunnableBuildOperation() {

            @Override
            public void run(BuildOperationContext context) {
                decorated.apply(target);
                context.setResult(OPERATION_RESULT);
            }

            @Override
            public BuildOperationDescriptor.Builder description() {
                final ScriptSource source = getSource();
                final ResourceLocation resourceLocation = source.getResource().getLocation();
                final File file = resourceLocation.getFile();
                String name = "Apply " + source.getShortDisplayName();
                final String displayName = name + " to " + target;
                return BuildOperationDescriptor.displayName(displayName).name(name).details(new OperationDetails(file, resourceLocation, ConfigurationTargetIdentifier.of(target), userCodeApplicationId));
            }
        }));
    }
}
Also used : TextResource(org.gradle.internal.resource.TextResource) BuildOperationContext(org.gradle.internal.operations.BuildOperationContext) BuildOperationDescriptor(org.gradle.internal.operations.BuildOperationDescriptor) ResourceLocation(org.gradle.internal.resource.ResourceLocation) RunnableBuildOperation(org.gradle.internal.operations.RunnableBuildOperation) ScriptSource(org.gradle.groovy.scripts.ScriptSource) File(java.io.File)

Example 20 with BuildOperationContext

use of org.gradle.internal.operations.BuildOperationContext in project gradle by gradle.

the class NotifyingBuildLoader method load.

@Override
public void load(final SettingsInternal settings, final GradleInternal gradle) {
    final String buildPath = gradle.getIdentityPath().toString();
    buildOperationExecutor.call(new CallableBuildOperation<Void>() {

        @Override
        public BuildOperationDescriptor.Builder description() {
            // noinspection Convert2Lambda
            return BuildOperationDescriptor.displayName("Load projects").progressDisplayName("Loading projects").details(new LoadProjectsBuildOperationType.Details() {

                @Override
                public String getBuildPath() {
                    return buildPath;
                }
            });
        }

        @Override
        public Void call(BuildOperationContext context) {
            buildLoader.load(settings, gradle);
            context.setResult(createOperationResult(gradle, buildPath));
            return null;
        }
    });
    buildOperationExecutor.run(new RunnableBuildOperation() {

        @Override
        public void run(BuildOperationContext context) {
            gradle.getBuildListenerBroadcaster().projectsLoaded(gradle);
            context.setResult(PROJECTS_LOADED_OP_RESULT);
        }

        @Override
        public BuildOperationDescriptor.Builder description() {
            // noinspection Convert2Lambda
            return BuildOperationDescriptor.displayName(gradle.contextualize("Notify projectsLoaded listeners")).details(new NotifyProjectsLoadedBuildOperationType.Details() {

                @Override
                public String getBuildPath() {
                    return buildPath;
                }
            });
        }
    });
}
Also used : BuildOperationContext(org.gradle.internal.operations.BuildOperationContext) RunnableBuildOperation(org.gradle.internal.operations.RunnableBuildOperation)

Aggregations

BuildOperationContext (org.gradle.internal.operations.BuildOperationContext)20 RunnableBuildOperation (org.gradle.internal.operations.RunnableBuildOperation)12 File (java.io.File)8 BuildOperationDescriptor (org.gradle.internal.operations.BuildOperationDescriptor)5 Action (org.gradle.api.Action)3 BuildOperationExecutor (org.gradle.internal.operations.BuildOperationExecutor)3 IOException (java.io.IOException)2 HashSet (java.util.HashSet)2 List (java.util.List)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 FileCollection (org.gradle.api.file.FileCollection)2 BuildOperationDetails (org.gradle.internal.progress.BuildOperationDetails)2 ImmutableList (com.google.common.collect.ImmutableList)1 LinkedHashMultimap (com.google.common.collect.LinkedHashMultimap)1 Multimap (com.google.common.collect.Multimap)1 Queues (com.google.common.collect.Queues)1 Sets (com.google.common.collect.Sets)1 Closure (groovy.lang.Closure)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1