summaryrefslogtreecommitdiff
path: root/src
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
parent06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e (diff)
downloadmill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.gz
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.tar.bz2
mill-d5b903d44cbd29f838db3ea475d1efa101ad810f.zip
rename hbt -> forge
Diffstat (limited to 'src')
-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
-rw-r--r--src/test/scala/forge/ForgeTests.scala45
-rw-r--r--src/test/scala/forge/Main.scala (renamed from src/test/scala/hbt/Main.scala)2
-rw-r--r--src/test/scala/forge/StaticContextTests.scala (renamed from src/test/scala/hbt/StaticContextTests.scala)2
-rw-r--r--src/test/scala/forge/TarjanTests.scala (renamed from src/test/scala/hbt/TarjanTests.scala)2
-rw-r--r--src/test/scala/hbt/HbtTests.scala17
14 files changed, 133 insertions, 91 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]
- }
-}
diff --git a/src/test/scala/forge/ForgeTests.scala b/src/test/scala/forge/ForgeTests.scala
new file mode 100644
index 00000000..91e20f45
--- /dev/null
+++ b/src/test/scala/forge/ForgeTests.scala
@@ -0,0 +1,45 @@
+package forge
+
+import utest._
+import Target.noop
+
+object ForgeTests extends TestSuite{
+ object Singleton {
+ val single = noop()
+ }
+ object Pair {
+ val up = noop()
+ val down = noop(up)
+ }
+ object Diamond{
+ val up = noop()
+ val left = noop(up)
+ val right = noop(up)
+ val down = noop(left, right)
+ }
+ object AnonymousDiamond{
+ val up = noop()
+ val down = noop(noop(up), noop(up))
+ }
+ val tests = Tests{
+ 'singleton - {
+// Evaluator.labelTargets(Singleton.single)
+ }
+ 'pair - {
+// Evaluator.labelTargets(Pair.up, Pair.down)
+ }
+ 'diamond - {
+// Evaluator.labelTargets(
+// Diamond.up, Diamond.left, Diamond.right, Diamond.down
+// )
+ }
+// 'full - {
+// val sourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/src"))
+// val resourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/resources"))
+// val allSources = list(sourceRoot)
+// val classFiles = compileAll(allSources)
+// val jar = jarUp(resourceRoot, classFiles)
+// Evaluator.apply(jar, jnio.Paths.get("target/workspace"))
+// }
+ }
+}
diff --git a/src/test/scala/hbt/Main.scala b/src/test/scala/forge/Main.scala
index 427f1c41..745a9029 100644
--- a/src/test/scala/hbt/Main.scala
+++ b/src/test/scala/forge/Main.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
object Main{
def main(args: Array[String]): Unit = {
diff --git a/src/test/scala/hbt/StaticContextTests.scala b/src/test/scala/forge/StaticContextTests.scala
index c7fcdcd7..0e764fef 100644
--- a/src/test/scala/hbt/StaticContextTests.scala
+++ b/src/test/scala/forge/StaticContextTests.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import DefCtx.StaticContext
import utest._
class Helper{
diff --git a/src/test/scala/hbt/TarjanTests.scala b/src/test/scala/forge/TarjanTests.scala
index 48314cf4..5b118368 100644
--- a/src/test/scala/hbt/TarjanTests.scala
+++ b/src/test/scala/forge/TarjanTests.scala
@@ -1,4 +1,4 @@
-package hbt
+package forge
import utest._
object TarjanTests extends TestSuite{
def check(input: Seq[Seq[Int]], expected: Seq[Seq[Int]]) = {
diff --git a/src/test/scala/hbt/HbtTests.scala b/src/test/scala/hbt/HbtTests.scala
deleted file mode 100644
index 0c10be58..00000000
--- a/src/test/scala/hbt/HbtTests.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package hbt
-
-import hbt.Util.{compileAll, jarUp, list}
-import utest._
-import java.nio.{file => jnio}
-object HbtTests extends TestSuite{
- val tests = Tests{
- 'simple - {
- val sourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/src"))
- val resourceRoot = Target.path(jnio.Paths.get("src/test/resources/example/resources"))
- val allSources = list(sourceRoot)
- val classFiles = compileAll(allSources)
- val jar = jarUp(resourceRoot, classFiles)
- Evaluator.apply(jar, jnio.Paths.get("target/workspace"))
- }
- }
-}