From 139afd965ea072f8216b56126fb08dc8a44ebac4 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 24 Feb 2018 15:35:24 -0800 Subject: Implement `-i` flag to allow interactive usage --- main/src/mill/Main.scala | 18 ++++++++++++++++-- main/src/mill/modules/Jvm.scala | 6 +++++- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'main') diff --git a/main/src/mill/Main.scala b/main/src/mill/Main.scala index ee055d64..4adb8d9c 100644 --- a/main/src/mill/Main.scala +++ b/main/src/mill/Main.scala @@ -2,7 +2,7 @@ package mill import java.io.{InputStream, OutputStream, PrintStream} -import ammonite.main.Cli.{formatBlock, genericSignature, replSignature} +import ammonite.main.Cli._ import ammonite.ops._ import ammonite.util.Util import mill.clientserver.{Client, FileLocks} @@ -102,12 +102,26 @@ object Main { import ammonite.main.Cli val removed = Set("predef-code", "home", "no-home-predef") - val millArgSignature = Cli.genericSignature.filter(a => !removed(a.name)) + var interactive = false + val interactiveSignature = Arg[Config, Unit]( + "interactive", Some('i'), + "Run Mill in interactive mode, suitable for opening REPLs and taking user input", + (c, v) =>{ + interactive = true + c + } + ) + val millArgSignature = + Cli.genericSignature.filter(a => !removed(a.name)) :+ interactiveSignature + Cli.groupArgs( args.toList, millArgSignature, Cli.Config(remoteLogging = false) ) match{ + case _ if interactive => + stderr.println("-i/--interactive must be passed in as the first argument") + (false, None) case Left(msg) => System.err.println(msg) (false, None) diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index 2d351c18..fb2661e1 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -35,7 +35,11 @@ object Jvm { jvmArgs ++ Vector("-cp", classPath.mkString(":"), mainClass) ++ mainArgs - + baseInteractiveSubprocess(commandArgs, envArgs, workingDir) + } + def baseInteractiveSubprocess(commandArgs: Seq[String], + envArgs: Map[String, String], + workingDir: Path) = { val builder = new java.lang.ProcessBuilder() import collection.JavaConverters._ for ((k, v) <- envArgs){ -- cgit v1.2.3