Merge pull request #4899 from eatkins/watch-symlink-scripted

Add scripted test for symlink source monitoring
This commit is contained in:
eugene yokota 2019-07-30 17:39:27 -04:00 committed by GitHub
commit 96d6e0d52a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 66 additions and 0 deletions

View File

@ -0,0 +1,46 @@
import java.nio.file.{ Files, Paths }
import java.nio.file.StandardCopyOption.REPLACE_EXISTING
val createSymlinks = taskKey[Unit]("create symlinks to source files and directories")
createSymlinks := {
val base = baseDirectory.value.toPath
val srcDir = base / "src" / "main" / "scala"
val foo = Files.createDirectories(srcDir / "file-source") / "Foo.scala"
Files.createSymbolicLink(srcDir / "sources", Files.createDirectories(base / "sources"))
Files.deleteIfExists(foo)
Files.createSymbolicLink(foo, base / "file-source" / "Foo.scala")
}
ThisBuild / watchOnFileInputEvent := {
val srcDir = baseDirectory.value.toPath / "src" / "main" / "scala"
(_: Int, event: Watch.Event) =>
event.path match {
case p if p == (srcDir / "file-source" / "Foo.scala") => Watch.CancelWatch
case p if p == (srcDir / "sources" / "Bar.scala") => Watch.CancelWatch
case _ => Watch.Ignore
}
}
val copySource = inputKey[Unit]("copy a source file from changes")
copySource := {
val relative = Def.spaceDelimited("").parsed.head.split("/") match {
case Array(head) => Paths.get(head)
case Array(head, tail @ _*) => tail.foldLeft(Paths.get(head))(_ / _)
}
val base = baseDirectory.value.toPath
Files.copy((base / "changes").resolve(relative), base.resolve(relative), REPLACE_EXISTING)
}
val removeLink = inputKey[Unit]("remove a symlink")
removeLink := {
val relative = Def.spaceDelimited("").parsed.head.split("/") match {
case Array(head) => Paths.get(head)
case Array(head, tail @ _*) => tail.foldLeft(Paths.get(head))(_ / _)
}
val srcDir = baseDirectory.value.toPath / "src" / "main" / "scala"
Files.deleteIfExists(srcDir.resolve(relative))
}
commands += Command.single("skipWindows") { (state, command) =>
if (scala.util.Properties.isWin) state else command :: state
}

View File

@ -0,0 +1 @@
class Foo {}

View File

@ -0,0 +1,3 @@
package sources
class Bar

View File

@ -0,0 +1 @@
class Foo

View File

@ -0,0 +1,15 @@
> createSymlinks
> skipWindows ~compile; copySource file-source/Foo.scala
> ~compile; copySource sources/Bar.scala
> skipWindows ~compile; removeLink file-source/Foo.scala
> ~compile; removeLink sources
> ~compile; createSymlinks
> copySource sources/Bar.scala
> ~compile; removeLink sources/Bar.scala