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();
}
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());
}
}
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());
}
Aggregations