summaryrefslogtreecommitdiff
path: root/build.sc
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-02-24 15:35:24 -0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-02-24 17:13:03 -0800
commit139afd965ea072f8216b56126fb08dc8a44ebac4 (patch)
treee0e54b719479cf5d0be311887433a4e8d4d48c0f /build.sc
parente76a4eda93e96e6817ab4f337f567fd325efe545 (diff)
downloadmill-139afd965ea072f8216b56126fb08dc8a44ebac4.tar.gz
mill-139afd965ea072f8216b56126fb08dc8a44ebac4.tar.bz2
mill-139afd965ea072f8216b56126fb08dc8a44ebac4.zip
Implement `-i` flag to allow interactive usage
Diffstat (limited to 'build.sc')
-rwxr-xr-xbuild.sc62
1 files changed, 47 insertions, 15 deletions
diff --git a/build.sc b/build.sc
index bd06c7db..32c77310 100755
--- a/build.sc
+++ b/build.sc
@@ -201,23 +201,56 @@ object integration extends MillModule{
def forkArgs = testArgs()
}
+def launcherScript(jvmArgs: Seq[String],
+ classPath: Agg[String]) = {
+ val jvmArgsStr = jvmArgs.mkString(" ")
+ val classPathStr = classPath.mkString(":")
+ s"""#!/usr/bin/env sh
+ |
+ |case "$$1" in
+ | -i | --interactive )
+ | exec java $jvmArgsStr $$JAVA_OPTS -cp "$classPathStr" mill.Main "$${@:2}"
+ | ;;
+ | *)
+ | exec java $jvmArgsStr $$JAVA_OPTS -cp "$classPathStr" mill.ClientMain "$$@"
+ | ;;
+ |esac
+ """.stripMargin
+}
object dev extends MillModule{
def moduleDeps = Seq(scalalib, scalajslib)
def forkArgs = T{
scalalib.testArgs() ++ scalajslib.testArgs() ++ scalaworker.testArgs()
}
- def mainClass = Some("mill.ClientMain")
-
- def run(wd: Path, args: String*) = T.command{
- mill.modules.Jvm.interactiveSubprocess(
- finalMainClass(),
- runClasspath().map(_.path),
- forkArgs(),
- forkEnv(),
- args,
- workingDir = ammonite.ops.pwd
- )
+ def launcher = T{
+ val outputPath = T.ctx().dest / "run"
+
+ write(outputPath, prependShellScript())
+
+ val perms = java.nio.file.Files.getPosixFilePermissions(outputPath.toNIO)
+ perms.add(PosixFilePermission.GROUP_EXECUTE)
+ perms.add(PosixFilePermission.OWNER_EXECUTE)
+ perms.add(PosixFilePermission.OTHERS_EXECUTE)
+ java.nio.file.Files.setPosixFilePermissions(outputPath.toNIO, perms)
+ PathRef(outputPath)
+ }
+ def prependShellScript = launcherScript(forkArgs(), runClasspath().map(_.path.toString))
+
+ def run(args: String*) = T.command{
+ args match{
+ case Nil => mill.eval.Result.Failure("Need to pass in cwd as first argument to dev.run")
+ case wd0 +: rest =>
+ val wd = Path(wd0, pwd)
+ mkdir(wd)
+ mill.modules.Jvm.baseInteractiveSubprocess(
+ Seq(launcher().path.toString) ++ rest,
+ forkEnv(),
+ workingDir = wd
+ )
+ mill.eval.Result.Success(())
+ }
+
}
}
@@ -225,10 +258,9 @@ object dev extends MillModule{
def release = T{
createAssembly(
dev.runClasspath().map(_.path),
- prependShellScript = mill.modules.Jvm.launcherShellScript(
- dev.mainClass().get,
- Agg("$0"),
- Seq("-DMILL_VERSION=" + publishVersion()._2)
+ prependShellScript = launcherScript(
+ Seq("-DMILL_VERSION=" + publishVersion()._2),
+ Agg("$0")
)
)