All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ammonite.interp.Watchable.scala Maven / Gradle / Ivy

There is a newer version: 3.0.0-M0-56-1bcbe7f6
Show newest version
package ammonite.interp


trait Watchable {
  def poll(): Long
}
object Watchable{
  def mtimeIfExists(p: os.Path) = if (os.exists(p)) os.mtime(p) else 0L
  /**
    * Recursively mtimes things, with the sole purpose of providing a number
    * that will change if that file changes or that folder's contents changes
    *
    * Ensure we include the file paths within a folder as part of the folder
    * signature, as file moves often do not update the mtime but we want to
    * trigger a "something changed" event anyway
    */
  def pathSignature(p: os.Path) =
    if (!os.exists(p)) 0L
    else try {
      if (os.isDir(p)) os.walk(p).map(x => x.hashCode + mtimeIfExists(x)).sum
      else os.mtime(p)
    } catch { case e: java.nio.file.NoSuchFileException =>
      0L
    }
  case class Path(p: os.Path) extends Watchable {
    def poll() = pathSignature(p)
  }
  case class Value(f: () => Long) extends Watchable {
    def poll() = f()
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy