summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/src/mill/Main.scala18
-rw-r--r--main/src/mill/modules/Jvm.scala6
2 files changed, 21 insertions, 3 deletions
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){