summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-10-19 04:39:08 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2017-10-19 04:39:08 -0700
commit71ddc7e65666844e063c48c80b3ce7fecfe77a0f (patch)
tree9e03046e8c96d6d1b99e7a68ad8c3b12d8f2a434 /src
parent738104aafa8ac0f0dd09e9ef015d909b3f016158 (diff)
downloadmill-71ddc7e65666844e063c48c80b3ce7fecfe77a0f.tar.gz
mill-71ddc7e65666844e063c48c80b3ce7fecfe77a0f.tar.bz2
mill-71ddc7e65666844e063c48c80b3ce7fecfe77a0f.zip
- Convert example workflow to `javac` since `scalac` is slow
- Implement `Target.Subprocess`, and use it inside `compileAll` - Move `Main` workflow into `HbtTests`, to be run using uTest
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/hbt/Main.scala13
-rw-r--r--src/main/scala/hbt/Target.scala25
-rw-r--r--src/main/scala/hbt/Tarjans.scala11
-rw-r--r--src/main/scala/hbt/Util.scala30
-rw-r--r--src/test/resources/example/resources/hello.txt1
-rw-r--r--src/test/resources/example/src/Bar.java4
-rw-r--r--src/test/resources/example/src/Foo.java7
-rw-r--r--src/test/scala/hbt/HbtTests.scala17
-rw-r--r--src/test/scala/hbt/Main.scala7
9 files changed, 73 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]] = {
diff --git a/src/test/resources/example/resources/hello.txt b/src/test/resources/example/resources/hello.txt
new file mode 100644
index 00000000..5e1c309d
--- /dev/null
+++ b/src/test/resources/example/resources/hello.txt
@@ -0,0 +1 @@
+Hello World \ No newline at end of file
diff --git a/src/test/resources/example/src/Bar.java b/src/test/resources/example/src/Bar.java
new file mode 100644
index 00000000..4e30c89b
--- /dev/null
+++ b/src/test/resources/example/src/Bar.java
@@ -0,0 +1,4 @@
+package test;
+public class Bar{
+ static int value = 271828;
+} \ No newline at end of file
diff --git a/src/test/resources/example/src/Foo.java b/src/test/resources/example/src/Foo.java
new file mode 100644
index 00000000..a5ba9e2a
--- /dev/null
+++ b/src/test/resources/example/src/Foo.java
@@ -0,0 +1,7 @@
+package test;
+public class Foo{
+ static int value = 31337;
+ public static void main(String[] args){
+ System.out.println(value);
+ }
+} \ No newline at end of file
diff --git a/src/test/scala/hbt/HbtTests.scala b/src/test/scala/hbt/HbtTests.scala
new file mode 100644
index 00000000..0c10be58
--- /dev/null
+++ b/src/test/scala/hbt/HbtTests.scala
@@ -0,0 +1,17 @@
+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"))
+ }
+ }
+}
diff --git a/src/test/scala/hbt/Main.scala b/src/test/scala/hbt/Main.scala
new file mode 100644
index 00000000..427f1c41
--- /dev/null
+++ b/src/test/scala/hbt/Main.scala
@@ -0,0 +1,7 @@
+package hbt
+
+object Main{
+ def main(args: Array[String]): Unit = {
+
+ }
+} \ No newline at end of file