From 1f996185e15b56e287e46992e14a33da95c9bab8 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Sat, 6 Oct 2018 11:39:05 -0700 Subject: [PATCH] Only use a file repository for interactive sessions I realized that using the cache has the potential to cause issues for batch processing in CI if some tasks assume that a file created by one task will immediately be visible in the other. With the cache, there is typically on O(10ms) latency between a file being created and appearing in the cache (at least on OSX). When manually running commands, that latency doesn't matter. --- main/src/main/scala/sbt/Defaults.scala | 6 ++---- main/src/main/scala/sbt/internal/FileManagement.scala | 10 ++++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 212d02442..2c4bf38e3 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -272,8 +272,7 @@ object Defaults extends BuildCommon { None }, watchStartMessage := Watched.defaultStartWatch, - fileTreeViewConfig := FileTreeViewConfig - .default(watchAntiEntropy.value, pollInterval.value, pollingDirectories.value), + fileTreeViewConfig := FileManagement.defaultFileTreeView.value, fileTreeView := state.value .get(BasicKeys.globalFileTreeView) .getOrElse(FileTreeView.DEFAULT.asDataView(StampedFile.converter)), @@ -657,8 +656,7 @@ object Defaults extends BuildCommon { }, watchStartMessage := Watched.projectOnWatchMessage(thisProjectRef.value.project), watch := watchSetting.value, - fileTreeViewConfig := FileTreeViewConfig - .default(watchAntiEntropy.value, pollInterval.value, pollingDirectories.value) + fileTreeViewConfig := FileManagement.defaultFileTreeView.value ) def generate(generators: SettingKey[Seq[Task[Seq[File]]]]): Initialize[Task[Seq[File]]] = diff --git a/main/src/main/scala/sbt/internal/FileManagement.scala b/main/src/main/scala/sbt/internal/FileManagement.scala index bbdbb346c..127fd4a1d 100644 --- a/main/src/main/scala/sbt/internal/FileManagement.scala +++ b/main/src/main/scala/sbt/internal/FileManagement.scala @@ -13,10 +13,16 @@ import java.nio.file.Path import sbt.Keys._ import sbt.io.FileTreeDataView.Entry import sbt.io.syntax.File -import sbt.io.{ FileFilter, FileTreeRepository, FileTreeDataView } -import sbt.{ Def, ScopedTaskable, StampedFile, Task } +import sbt.io.{ FileFilter, FileTreeDataView, FileTreeRepository } +import sbt._ private[sbt] object FileManagement { + private[sbt] def defaultFileTreeView: Def.Initialize[Task[FileTreeViewConfig]] = Def.task { + if (state.value.remainingCommands.exists(_.commandLine == "shell")) { + FileTreeViewConfig + .default(watchAntiEntropy.value, pollInterval.value, pollingDirectories.value) + } else FileTreeViewConfig.sbt1_2_compat(pollInterval.value, watchAntiEntropy.value) + } private[sbt] implicit class FileTreeDataViewOps[+T](val fileTreeDataView: FileTreeDataView[T]) { def register(path: Path, maxDepth: Int): Either[IOException, Boolean] = { fileTreeDataView match {