Search in sources :

Example 1 with FileSystemWatchingSettingsFinalizedProgressDetails

use of org.gradle.internal.watch.options.FileSystemWatchingSettingsFinalizedProgressDetails in project gradle by gradle.

the class FileSystemWatchingBuildActionRunner method run.

@Override
public Result run(BuildAction action, BuildTreeLifecycleController buildController) {
    StartParameterInternal startParameter = action.getStartParameter();
    WatchMode watchFileSystemMode = startParameter.getWatchFileSystemMode();
    VfsLogging verboseVfsLogging = startParameter.isVfsVerboseLogging() ? VfsLogging.VERBOSE : VfsLogging.NORMAL;
    WatchLogging debugWatchLogging = startParameter.isWatchFileSystemDebugLogging() ? WatchLogging.DEBUG : WatchLogging.NORMAL;
    LOGGER.info("Watching the file system is configured to be {}", watchFileSystemMode.getDescription());
    boolean continuousBuild = startParameter.isContinuous() || !deploymentRegistry.getRunningDeployments().isEmpty();
    if (continuousBuild && watchFileSystemMode == WatchMode.DEFAULT) {
        // Try to watch as much as possible when using continuous build.
        watchFileSystemMode = WatchMode.ENABLED;
    }
    if (watchFileSystemMode.isEnabled()) {
        dropVirtualFileSystemIfRequested(startParameter, virtualFileSystem);
    }
    if (verboseVfsLogging == VfsLogging.VERBOSE) {
        logVfsStatistics("since last build", statStatisticsCollector, fileHasherStatisticsCollector, directorySnapshotterStatisticsCollector);
    }
    if (action.getStartParameter().getProjectCacheDir() != null) {
        // See https://github.com/gradle/gradle/issues/17262
        switch(watchFileSystemMode) {
            case ENABLED:
                throw new IllegalStateException("Enabling file system watching via --watch-fs (or via the " + StartParameterBuildOptions.WatchFileSystemOption.GRADLE_PROPERTY + " property) with --project-cache-dir also specified is not supported; remove either option to fix this problem");
            case DEFAULT:
                LOGGER.info("File system watching is disabled because --project-cache-dir is specified");
                watchFileSystemMode = WatchMode.DISABLED;
                break;
            default:
                break;
        }
    }
    LOGGER.debug("Watching the file system computed to be {}", watchFileSystemMode.getDescription());
    boolean actuallyWatching = virtualFileSystem.afterBuildStarted(watchFileSystemMode, verboseVfsLogging, debugWatchLogging, buildOperationRunner);
    LOGGER.info("File system watching is {}", actuallyWatching ? "active" : "inactive");
    // noinspection Convert2Lambda
    eventEmitter.emitNowForCurrent(new FileSystemWatchingSettingsFinalizedProgressDetails() {

        @Override
        public boolean isEnabled() {
            return actuallyWatching;
        }
    });
    if (continuousBuild) {
        if (!actuallyWatching) {
            throw new IllegalStateException("Continuous build does not work when file system watching is disabled");
        }
    }
    try {
        return delegate.run(action, buildController);
    } finally {
        int maximumNumberOfWatchedHierarchies = VirtualFileSystemServices.getMaximumNumberOfWatchedHierarchies(startParameter);
        virtualFileSystem.beforeBuildFinished(watchFileSystemMode, verboseVfsLogging, debugWatchLogging, buildOperationRunner, maximumNumberOfWatchedHierarchies);
        if (verboseVfsLogging == VfsLogging.VERBOSE) {
            logVfsStatistics("during current build", statStatisticsCollector, fileHasherStatisticsCollector, directorySnapshotterStatisticsCollector);
        }
    }
}
Also used : WatchMode(org.gradle.internal.watch.registry.WatchMode) FileSystemWatchingSettingsFinalizedProgressDetails(org.gradle.internal.watch.options.FileSystemWatchingSettingsFinalizedProgressDetails) StartParameterInternal(org.gradle.api.internal.StartParameterInternal) VfsLogging(org.gradle.internal.watch.vfs.VfsLogging) WatchLogging(org.gradle.internal.watch.vfs.WatchLogging)

Aggregations

StartParameterInternal (org.gradle.api.internal.StartParameterInternal)1 FileSystemWatchingSettingsFinalizedProgressDetails (org.gradle.internal.watch.options.FileSystemWatchingSettingsFinalizedProgressDetails)1 WatchMode (org.gradle.internal.watch.registry.WatchMode)1 VfsLogging (org.gradle.internal.watch.vfs.VfsLogging)1 WatchLogging (org.gradle.internal.watch.vfs.WatchLogging)1