mirror of https://github.com/sbt/sbt.git
Merge pull request #3438 from Duhemm/source-appender
[1.0.x] `Append` instance to add `File` to `Seq[Source]`
This commit is contained in:
commit
33d3ba9d7c
|
|
@ -6,11 +6,12 @@ package sbt
|
|||
import BasicCommandStrings.ClearOnFailure
|
||||
import State.FailureWall
|
||||
import annotation.tailrec
|
||||
import java.io.File
|
||||
import java.nio.file.FileSystems
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
import sbt.io.WatchService
|
||||
import sbt.io.{ AllPassFilter, NothingFilter, FileFilter, WatchService }
|
||||
import sbt.internal.io.{ Source, SourceModificationWatch, WatchState }
|
||||
import sbt.internal.util.AttributeKey
|
||||
import sbt.internal.util.Types.const
|
||||
|
|
@ -18,7 +19,7 @@ import sbt.internal.util.Types.const
|
|||
trait Watched {
|
||||
|
||||
/** The files watched when an action is run with a preceeding ~ */
|
||||
def watchSources(s: State): Seq[Source] = Nil
|
||||
def watchSources(s: State): Seq[Watched.WatchSource] = Nil
|
||||
def terminateWatch(key: Int): Boolean = Watched.isEnter(key)
|
||||
|
||||
/**
|
||||
|
|
@ -44,6 +45,30 @@ object Watched {
|
|||
val clearWhenTriggered: WatchState => String = const(clearScreen)
|
||||
def clearScreen: String = "\u001b[2J\u001b[0;0H"
|
||||
|
||||
type WatchSource = Source
|
||||
object WatchSource {
|
||||
|
||||
/**
|
||||
* Creates a new `WatchSource` for watching files, with the given filters.
|
||||
*
|
||||
* @param base The base directory from which to include files.
|
||||
* @param includeFilter Choose what children of `base` to include.
|
||||
* @param excludeFilter Choose what children of `base` to exclude.
|
||||
* @return An instance of `Source`.
|
||||
*/
|
||||
def apply(base: File, includeFilter: FileFilter, excludeFilter: FileFilter): Source =
|
||||
new Source(base, includeFilter, excludeFilter)
|
||||
|
||||
/**
|
||||
* Creates a new `WatchSource` for watching files.
|
||||
*
|
||||
* @param base The base directory from which to include files.
|
||||
* @return An instance of `Source`.
|
||||
*/
|
||||
def apply(base: File): Source =
|
||||
apply(base, AllPassFilter, NothingFilter)
|
||||
}
|
||||
|
||||
private[this] class AWatched extends Watched
|
||||
|
||||
def multi(base: Watched, paths: Seq[Watched]): Watched =
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import scala.annotation.implicitNotFound
|
|||
import sbt.internal.util.Attributed
|
||||
import Def.Initialize
|
||||
import reflect.internal.annotations.compileTimeOnly
|
||||
import sbt.internal.io.Source
|
||||
import sbt.io.{ AllPassFilter, NothingFilter }
|
||||
|
||||
object Append {
|
||||
@implicitNotFound(
|
||||
|
|
@ -96,4 +98,11 @@ object Append {
|
|||
def appendValue(a: Seq[T], b: Option[T]): Seq[T] = b.fold(a)(a :+ _)
|
||||
def appendValues(a: Seq[T], b: Option[T]): Seq[T] = b.fold(a)(a :+ _)
|
||||
}
|
||||
implicit def appendSource: Sequence[Seq[Source], Seq[File], File] =
|
||||
new Sequence[Seq[Source], Seq[File], File] {
|
||||
def appendValue(a: Seq[Source], b: File): Seq[Source] =
|
||||
appendValues(a, Seq(b))
|
||||
def appendValues(a: Seq[Source], b: Seq[File]): Seq[Source] =
|
||||
a ++ b.map(new Source(_, AllPassFilter, NothingFilter))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ import sbt.internal.{
|
|||
LogManager
|
||||
}
|
||||
import sbt.io.{ FileFilter, WatchService }
|
||||
import sbt.internal.io.{ Source, WatchState }
|
||||
import sbt.internal.io.WatchState
|
||||
import sbt.internal.util.{ AttributeKey, SourcePosition }
|
||||
|
||||
import sbt.librarymanagement.Configurations.CompilerPlugin
|
||||
|
|
@ -132,8 +132,8 @@ object Keys {
|
|||
val suppressSbtShellNotification = settingKey[Boolean]("""True to suppress the "Executing in batch mode.." message.""").withRank(CSetting)
|
||||
val pollInterval = settingKey[FiniteDuration]("Interval between checks for modified sources by the continuous execution command.").withRank(BMinusSetting)
|
||||
val watchService = settingKey[() => WatchService]("Service to use to monitor file system changes.").withRank(BMinusSetting)
|
||||
val watchSources = taskKey[Seq[Source]]("Defines the sources in this project for continuous execution to watch for changes.").withRank(BMinusSetting)
|
||||
val watchTransitiveSources = taskKey[Seq[Source]]("Defines the sources in all projects for continuous execution to watch.").withRank(CSetting)
|
||||
val watchSources = taskKey[Seq[Watched.WatchSource]]("Defines the sources in this project for continuous execution to watch for changes.").withRank(BMinusSetting)
|
||||
val watchTransitiveSources = taskKey[Seq[Watched.WatchSource]]("Defines the sources in all projects for continuous execution to watch.").withRank(CSetting)
|
||||
val watchingMessage = settingKey[WatchState => String]("The message to show when triggered execution waits for sources to change.").withRank(DSetting)
|
||||
val triggeredMessage = settingKey[WatchState => String]("The message to show before triggered execution executes an action after sources change.").withRank(DSetting)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue