diff options
Diffstat (limited to 'src/main/scala/hbt')
-rw-r--r-- | src/main/scala/hbt/Main.scala | 13 | ||||
-rw-r--r-- | src/main/scala/hbt/Target.scala | 25 | ||||
-rw-r--r-- | src/main/scala/hbt/Tarjans.scala | 11 | ||||
-rw-r--r-- | src/main/scala/hbt/Util.scala | 30 |
4 files changed, 37 insertions, 42 deletions
diff --git a/src/main/scala/hbt/Main.scala b/src/main/scala/hbt/Main.scala deleted file mode 100644 index db5e2820..00000000 --- a/src/main/scala/hbt/Main.scala +++ /dev/null @@ -1,13 +0,0 @@ -package hbt -import java.nio.{file => jnio} -import Util._ -object Main{ - def main(args: Array[String]): Unit = { - val sourceRoot = Target.path(jnio.Paths.get("test/src")) - val resourceRoot = Target.path(jnio.Paths.get("test/resources")) - val allSources = list(sourceRoot) - val classFiles = compileAll(allSources) - val jar = jarUp(resourceRoot, classFiles) - Evaluator.apply(jar, jnio.Paths.get("target/workspace")) - } -}
\ No newline at end of file diff --git a/src/main/scala/hbt/Target.scala b/src/main/scala/hbt/Target.scala index 99f6e27d..fa2fbbe5 100644 --- a/src/main/scala/hbt/Target.scala +++ b/src/main/scala/hbt/Target.scala @@ -1,5 +1,6 @@ package hbt +import java.io.InputStreamReader import java.nio.{file => jnio} import sourcecode.Enclosing @@ -50,12 +51,20 @@ object Target{ def evaluate(args: Args) = path val inputs = Nil } -// case class Command(inputs: Seq[Target[jnio.Path]], -// output: Seq[Target[jnio.Path]], -// label: String) extends Target[Command.Result] -// object Command{ -// case class Result(stdout: String, -// stderr: String, -// writtenFiles: Seq[jnio.Path]) -// } + case class Subprocess(inputs: Seq[Target[_]], + command: Args => Seq[String], + label: String) extends Target[Subprocess.Result] { + + def evaluate(args: Args) = { + jnio.Files.createDirectories(args.dest) + import ammonite.ops._ + implicit val path = ammonite.ops.Path(args.dest, pwd) + val output = %%(command(args)) + assert(output.exitCode == 0) + Subprocess.Result(output, args.dest) + } + } + object Subprocess{ + case class Result(result: ammonite.ops.CommandResult, dest: jnio.Path) + } } diff --git a/src/main/scala/hbt/Tarjans.scala b/src/main/scala/hbt/Tarjans.scala index 7518080c..dc95b02f 100644 --- a/src/main/scala/hbt/Tarjans.scala +++ b/src/main/scala/hbt/Tarjans.scala @@ -4,7 +4,16 @@ import collection.mutable // Adapted from // https://github.com/indy256/codelibrary/blob/c52247216258e84aac442a23273b7d8306ef757b/java/src/SCCTarjan.java object Tarjans { - + def main(args: Array[String]) = { + val components = Tarjans( + Vector( + Vector(1), + Vector(0), + Vector(0, 1) + ) + ) + println(components) + } def apply(graph0: Seq[Seq[Int]]): Seq[Seq[Int]] = { val graph = graph0.map(_.toArray).toArray diff --git a/src/main/scala/hbt/Util.scala b/src/main/scala/hbt/Util.scala index fef4009b..7f8ccbcf 100644 --- a/src/main/scala/hbt/Util.scala +++ b/src/main/scala/hbt/Util.scala @@ -7,28 +7,18 @@ import java.util.jar.JarEntry import sourcecode.Enclosing import scala.collection.JavaConverters._ -import scala.collection.mutable object Util{ - case class compileAll(sources: Target[Seq[jnio.Path]]) - (implicit path: Enclosing) extends Target[jnio.Path]{ - val label = path.value - val inputs = Seq(sources) - def evaluate(args: Args): jnio.Path = { - - jnio.Files.createDirectories(args.dest) - val command = - Seq("scalac") ++ - args[Seq[jnio.Path]](0).map(_.toString) ++ - Seq("-d", args.dest.toString) - - val result = new java.lang.ProcessBuilder() - .command(command: _*) - .start() - .waitFor() - - args.dest - } + def compileAll(sources: Target[Seq[jnio.Path]]) + (implicit path: Enclosing) = { + Target.Subprocess( + Seq(sources), + args => + Seq("javac") ++ + args[Seq[jnio.Path]](0).map(_.toAbsolutePath.toString) ++ + Seq("-d", args.dest.toAbsolutePath.toString), + path.value + ).map(_.dest) } def list(root: Target[jnio.Path]): Target[Seq[jnio.Path]] = { |