summaryrefslogtreecommitdiff
path: root/src/main/scala/hbt/Evaluator.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-10-22 09:37:50 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2017-10-22 09:37:50 -0700
commitd5b903d44cbd29f838db3ea475d1efa101ad810f (patch)
tree3cb29f86f7be07ab2aaf3cf74fc66e41e9d3ed94 /src/main/scala/hbt/Evaluator.scala
parent06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e (diff)
downloadmill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.gz
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.bz2
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.zip
rename hbt -> forge
Diffstat (limited to 'src/main/scala/hbt/Evaluator.scala')
-rw-r--r--src/main/scala/hbt/Evaluator.scala64
1 files changed, 0 insertions, 64 deletions
diff --git a/src/main/scala/hbt/Evaluator.scala b/src/main/scala/hbt/Evaluator.scala
deleted file mode 100644
index 2931662a..00000000
--- a/src/main/scala/hbt/Evaluator.scala
+++ /dev/null
@@ -1,64 +0,0 @@
-package hbt
-
-import java.nio.{file => jnio}
-
-import sourcecode.Enclosing
-
-import scala.collection.mutable
-
-object Evaluator{
-
-
- def apply[T](t: Target[T],
- workspacePath: jnio.Path)
- (implicit enclosing: Enclosing): T = {
- jnio.Files.createDirectories(workspacePath)
- val targetPaths = mutable.Map.empty[Target[_], List[String]]
- def rec(t: Target[_], path: List[String]): Unit = {
- if (targetPaths.contains(t)) () // do nothing
- else {
- val currentPath = t.defCtx.staticEnclosing match{
- case None => path.reverse
- case Some(s) => s.stripPrefix(enclosing.value).drop(1).split('.').toList
- }
-
- targetPaths(t) = currentPath
- t.inputs.zipWithIndex.foreach{case (c, i) => rec(c, i.toString :: currentPath)}
- }
- }
- rec(t, Nil)
- val targets = targetPaths.keys.toIndexedSeq
- val targetIndices = targets.zipWithIndex.toMap
-
- val numberedEdges =
- for(i <- targets.indices)
- yield targets(i).inputs.map(targetIndices)
-
- val sortedClusters = Tarjans(numberedEdges)
- val nonTrivialClusters = sortedClusters.filter(_.length > 1)
- assert(nonTrivialClusters.isEmpty, nonTrivialClusters)
-
- val results = mutable.Map.empty[Target[_], Any]
- for (cluster <- sortedClusters){
- val Seq(singletonIndex) = cluster
- val target = targets(singletonIndex)
- val inputResults = target.inputs.map(results)
- val targetDestPath = workspacePath.resolve(
- jnio.Paths.get(targetPaths(target).mkString("/"))
- )
- import collection.JavaConverters._
- if (jnio.Files.exists(targetDestPath)){
- jnio.Files.walk(targetDestPath).iterator()
- .asScala
- .toArray
- .reverseIterator
- .map(jnio.Files.deleteIfExists)
- }
-
- results(target) = target.evaluate(
- new Args(inputResults.toIndexedSeq, targetDestPath)
- )
- }
- results(t).asInstanceOf[T]
- }
-}