Search in sources :

Example 1 with CachingDisabledReason

use of org.gradle.internal.execution.caching.CachingDisabledReason in project gradle by gradle.

the class DefaultTaskCacheabilityResolver method shouldDisableCaching.

@Override
public Optional<CachingDisabledReason> shouldDisableCaching(TaskInternal task, TaskProperties taskProperties, Collection<SelfDescribingSpec<TaskInternal>> cacheIfSpecs, Collection<SelfDescribingSpec<TaskInternal>> doNotCacheIfSpecs, @Nullable OverlappingOutputs overlappingOutputs) {
    if (cacheIfSpecs.isEmpty()) {
        if (task.getClass().isAnnotationPresent(DisableCachingByDefault.class)) {
            DisableCachingByDefault doNotCacheAnnotation = task.getClass().getAnnotation(DisableCachingByDefault.class);
            String reason = doNotCacheAnnotation.because();
            if (reason.isEmpty()) {
                return Optional.of(CACHING_DISABLED);
            } else {
                return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.NOT_CACHEABLE, reason));
            }
        }
        return Optional.of(CACHING_NOT_ENABLED);
    }
    if (!taskProperties.hasDeclaredOutputs()) {
        return Optional.of(NO_OUTPUTS_DECLARED);
    }
    if (overlappingOutputs != null) {
        String relativePath = relativeFilePathResolver.resolveForDisplay(overlappingOutputs.getOverlappedFilePath());
        return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.OVERLAPPING_OUTPUTS, "Gradle does not know how file '" + relativePath + "' was created (output property '" + overlappingOutputs.getPropertyName() + "'). Task output caching requires exclusive access to output paths to guarantee correctness (i.e. multiple tasks are not allowed to produce output in the same location)."));
    }
    Optional<String> reasonNotToTrackState = task.getReasonNotToTrackState();
    if (reasonNotToTrackState.isPresent()) {
        return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.DISABLE_CONDITION_SATISFIED, "Task is untracked because: " + reasonNotToTrackState.get()));
    }
    for (OutputFilePropertySpec spec : taskProperties.getOutputFileProperties()) {
        if (!(spec instanceof CacheableOutputFilePropertySpec)) {
            return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.NON_CACHEABLE_OUTPUT, "Output property '" + spec.getPropertyName() + "' contains a file tree"));
        }
    }
    for (SelfDescribingSpec<TaskInternal> cacheIfSpec : cacheIfSpecs) {
        if (!cacheIfSpec.isSatisfiedBy(task)) {
            return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.ENABLE_CONDITION_NOT_SATISFIED, "'" + cacheIfSpec.getDisplayName() + "' not satisfied"));
        }
    }
    for (SelfDescribingSpec<TaskInternal> doNotCacheIfSpec : doNotCacheIfSpecs) {
        if (doNotCacheIfSpec.isSatisfiedBy(task)) {
            return Optional.of(new CachingDisabledReason(CachingDisabledReasonCategory.DISABLE_CONDITION_SATISFIED, "'" + doNotCacheIfSpec.getDisplayName() + "' satisfied"));
        }
    }
    return Optional.empty();
}
Also used : CachingDisabledReason(org.gradle.internal.execution.caching.CachingDisabledReason) OutputFilePropertySpec(org.gradle.api.internal.tasks.properties.OutputFilePropertySpec) CacheableOutputFilePropertySpec(org.gradle.api.internal.tasks.properties.CacheableOutputFilePropertySpec) DisableCachingByDefault(org.gradle.work.DisableCachingByDefault) TaskInternal(org.gradle.api.internal.TaskInternal) CacheableOutputFilePropertySpec(org.gradle.api.internal.tasks.properties.CacheableOutputFilePropertySpec)

Example 2 with CachingDisabledReason

use of org.gradle.internal.execution.caching.CachingDisabledReason in project gradle by gradle.

the class ResolveCachingStateStep method logDisabledReasons.

private void logDisabledReasons(List<CachingDisabledReason> reasons, UnitOfWork work) {
    if (LOGGER.isInfoEnabled()) {
        Formatter formatter = new Formatter();
        formatter.format("Caching disabled for %s because:", work.getDisplayName());
        for (CachingDisabledReason reason : reasons) {
            formatter.format("%n  %s", reason.getMessage());
        }
        LOGGER.info(formatter.toString());
    }
}
Also used : CachingDisabledReason(org.gradle.internal.execution.caching.CachingDisabledReason) Formatter(java.util.Formatter)

Example 3 with CachingDisabledReason

use of org.gradle.internal.execution.caching.CachingDisabledReason in project gradle by gradle.

the class ResolveCachingStateStep method calculateCachingState.

private CachingState calculateCachingState(UnitOfWork work, BeforeExecutionState beforeExecutionState) {
    Logger logger = buildCache.isEmitDebugLogging() ? LOGGER : NOPLogger.NOP_LOGGER;
    CachingStateFactory cachingStateFactory = new DefaultCachingStateFactory(logger);
    ImmutableList.Builder<CachingDisabledReason> cachingDisabledReasonsBuilder = ImmutableList.builder();
    if (!buildCache.isEnabled()) {
        cachingDisabledReasonsBuilder.add(BUILD_CACHE_DISABLED_REASON);
    }
    OverlappingOutputs detectedOverlappingOutputs = beforeExecutionState.getDetectedOverlappingOutputs().orElse(null);
    work.shouldDisableCaching(detectedOverlappingOutputs).ifPresent(cachingDisabledReasonsBuilder::add);
    return cachingStateFactory.createCachingState(beforeExecutionState, cachingDisabledReasonsBuilder.build());
}
Also used : CachingDisabledReason(org.gradle.internal.execution.caching.CachingDisabledReason) OverlappingOutputs(org.gradle.internal.execution.history.OverlappingOutputs) CachingStateFactory(org.gradle.internal.execution.caching.CachingStateFactory) DefaultCachingStateFactory(org.gradle.internal.execution.caching.impl.DefaultCachingStateFactory) ImmutableList(com.google.common.collect.ImmutableList) Logger(org.slf4j.Logger) NOPLogger(org.slf4j.helpers.NOPLogger) DefaultCachingStateFactory(org.gradle.internal.execution.caching.impl.DefaultCachingStateFactory)

Aggregations

CachingDisabledReason (org.gradle.internal.execution.caching.CachingDisabledReason)3 ImmutableList (com.google.common.collect.ImmutableList)1 Formatter (java.util.Formatter)1 TaskInternal (org.gradle.api.internal.TaskInternal)1 CacheableOutputFilePropertySpec (org.gradle.api.internal.tasks.properties.CacheableOutputFilePropertySpec)1 OutputFilePropertySpec (org.gradle.api.internal.tasks.properties.OutputFilePropertySpec)1 CachingStateFactory (org.gradle.internal.execution.caching.CachingStateFactory)1 DefaultCachingStateFactory (org.gradle.internal.execution.caching.impl.DefaultCachingStateFactory)1 OverlappingOutputs (org.gradle.internal.execution.history.OverlappingOutputs)1 DisableCachingByDefault (org.gradle.work.DisableCachingByDefault)1 Logger (org.slf4j.Logger)1 NOPLogger (org.slf4j.helpers.NOPLogger)1