summaryrefslogtreecommitdiff
path: root/src/main/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
parent06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e (diff)
downloadmill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.gz
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.bz2
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.zip
rename hbt -> forge
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/forge/Args.scala (renamed from src/main/scala/hbt/Args.scala)2
-rw-r--r--src/main/scala/forge/DefCtx.scala (renamed from src/main/scala/hbt/DefCtx.scala)2
-rw-r--r--src/main/scala/forge/Evaluator.scala78
-rw-r--r--src/main/scala/forge/Implicits.scala (renamed from src/main/scala/hbt/Implicits.scala)2
-rw-r--r--src/main/scala/forge/ReadWrite.scala (renamed from src/main/scala/hbt/ReadWrite.scala)2
-rw-r--r--src/main/scala/forge/Target.scala (renamed from src/main/scala/hbt/Target.scala)2
-rw-r--r--src/main/scala/forge/Tarjans.scala (renamed from src/main/scala/hbt/Tarjans.scala)2
-rw-r--r--src/main/scala/forge/Util.scala (renamed from src/main/scala/hbt/Util.scala)2
-rw-r--r--src/main/scala/hbt/Evaluator.scala64
9 files changed, 85 insertions, 71 deletions
diff --git a/src/main/scala/hbt/Args.scala b/src/main/scala/forge/Args.scala
index c87ec96b..c7cc455c 100644
--- a/src/main/scala/hbt/Args.scala
+++ b/src/main/scala/forge/Args.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import java.nio.{file => jnio}
diff --git a/src/main/scala/hbt/DefCtx.scala b/src/main/scala/forge/DefCtx.scala
index 1be06cd4..57f2e71e 100644
--- a/src/main/scala/hbt/DefCtx.scala
+++ b/src/main/scala/forge/DefCtx.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import scala.language.experimental.macros
diff --git a/src/main/scala/forge/Evaluator.scala b/src/main/scala/forge/Evaluator.scala
new file mode 100644
index 00000000..137943f7
--- /dev/null
+++ b/src/main/scala/forge/Evaluator.scala
@@ -0,0 +1,78 @@
+package forge
+
+import java.nio.{file => jnio}
+
+import sourcecode.Enclosing
+
+import scala.collection.mutable
+
+class Evaluator(workspacePath: jnio.Path,
+ enclosingBase: DefCtx){
+
+ /**
+ * Takes the given targets, finds
+ */
+ def prepareTransitiveTargets(targets: Seq[Target[_]]) = {
+
+ val targetIndices = targets.zipWithIndex.toMap
+
+ val transitiveTargetSet = mutable.Set.empty[Target[_]]
+ def rec(t: Target[_]): Unit = {
+ if (transitiveTargetSet.contains(t)) () // do nothing
+ else {
+ transitiveTargetSet.add(t)
+ t.inputs.foreach(rec)
+ }
+ }
+
+ targets.foreach(rec)
+ val transitiveTargets = transitiveTargetSet.toVector
+ val numberedEdges =
+ for(i <- transitiveTargets.indices)
+ yield targets(i).inputs.map(targetIndices)
+
+ val sortedClusters = Tarjans(numberedEdges)
+ val nonTrivialClusters = sortedClusters.filter(_.length > 1)
+ assert(nonTrivialClusters.isEmpty, nonTrivialClusters)
+ (transitiveTargets, sortedClusters.flatten)
+ }
+
+ def apply[T](t: Target[T])
+ (implicit enclosing: Enclosing): T = {
+ jnio.Files.createDirectories(workspacePath)
+
+ val (transitiveTargets, sortedTargetIndices) = prepareTransitiveTargets(Seq(t))
+ val results = mutable.Map.empty[Target[_], Any]
+ for (index <- sortedTargetIndices){
+
+ val target = transitiveTargets(index)
+ val inputResults = target.inputs.map(results)
+
+ for(enclosing <- target.defCtx.staticEnclosing){
+ val targetDestPath = workspacePath.resolve(
+ jnio.Paths.get(enclosing.stripSuffix(enclosingBase.staticEnclosing.getOrElse("")))
+ )
+ deleteRec(targetDestPath)
+ }
+
+
+
+
+
+ results(target) = target.evaluate(
+ new Args(inputResults.toIndexedSeq, targetDestPath)
+ )
+ }
+ results(t).asInstanceOf[T]
+ }
+ def deleteRec(path: jnio.Path) = {
+ if (jnio.Files.exists(path)){
+ import collection.JavaConverters._
+ jnio.Files.walk(path).iterator()
+ .asScala
+ .toArray
+ .reverseIterator
+ .map(jnio.Files.deleteIfExists)
+ }
+ }
+}
diff --git a/src/main/scala/hbt/Implicits.scala b/src/main/scala/forge/Implicits.scala
index b9b12905..3295ce38 100644
--- a/src/main/scala/hbt/Implicits.scala
+++ b/src/main/scala/forge/Implicits.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import scala.collection.mutable
diff --git a/src/main/scala/hbt/ReadWrite.scala b/src/main/scala/forge/ReadWrite.scala
index 962c0ea4..ee74f35f 100644
--- a/src/main/scala/hbt/ReadWrite.scala
+++ b/src/main/scala/forge/ReadWrite.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import java.nio.{file => jnio}
trait ReadWrite[T] {
diff --git a/src/main/scala/hbt/Target.scala b/src/main/scala/forge/Target.scala
index c5d5433b..80ff98c4 100644
--- a/src/main/scala/hbt/Target.scala
+++ b/src/main/scala/forge/Target.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import java.nio.{file => jnio}
diff --git a/src/main/scala/hbt/Tarjans.scala b/src/main/scala/forge/Tarjans.scala
index dc95b02f..78dea34a 100644
--- a/src/main/scala/hbt/Tarjans.scala
+++ b/src/main/scala/forge/Tarjans.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import collection.mutable
// Adapted from
diff --git a/src/main/scala/hbt/Util.scala b/src/main/scala/forge/Util.scala
index e1c6c4cf..89a3eafe 100644
--- a/src/main/scala/hbt/Util.scala
+++ b/src/main/scala/forge/Util.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import java.io.FileOutputStream
import java.nio.{file => jnio}
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]
- }
-}