From 28674af0d2fa9aa5bafaccc300a2be623bece71f Mon Sep 17 00:00:00 2001 From: mmcbride Date: Fri, 20 Jan 2012 14:16:23 -0800 Subject: [PATCH] add setting to pass command line opts to scripted launcher --- scripted/plugin/ScriptedPlugin.scala | 10 ++++++---- scripted/sbt/SbtHandler.scala | 6 +++--- scripted/sbt/ScriptedTests.scala | 16 ++++++++-------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/scripted/plugin/ScriptedPlugin.scala b/scripted/plugin/ScriptedPlugin.scala index 7002268c0..c94f8bded 100644 --- a/scripted/plugin/ScriptedPlugin.scala +++ b/scripted/plugin/ScriptedPlugin.scala @@ -22,6 +22,7 @@ object ScriptedPlugin extends Plugin { val scriptedClasspath = TaskKey[PathFinder]("scripted-classpath") val scriptedTests = TaskKey[AnyRef]("scripted-tests") val scriptedRun = TaskKey[Method]("scripted-run") + val scriptedLaunchOpts = SettingKey[Seq[String]]("scripted-launch-opts", "options to pass to jvm launching scripted tasks") val scriptedDependencies = TaskKey[Unit]("scripted-dependencies") val scripted = InputKey[Unit]("scripted") @@ -33,13 +34,13 @@ object ScriptedPlugin extends Plugin { def scriptedRunTask: Initialize[Task[Method]] = (scriptedTests) map { (m) => - m.getClass.getMethod("run", classOf[File], classOf[Boolean], classOf[String], classOf[String], classOf[String], classOf[Array[String]], classOf[File]) + m.getClass.getMethod("run", classOf[File], classOf[Boolean], classOf[String], classOf[String], classOf[String], classOf[Array[String]], classOf[File], classOf[Seq[String]]) } def scriptedTask: Initialize[InputTask[Unit]] = InputTask(_ => complete.Parsers.spaceDelimited("")) { result => - (scriptedDependencies, scriptedTests, scriptedRun, sbtTestDirectory, scriptedBufferLog, scriptedSbt, scriptedScalas, sbtLauncher, result) map { - (deps, m, r, testdir, bufferlog, version, scriptedScalas, launcher, args) => - try { r.invoke(m, testdir, bufferlog: java.lang.Boolean, version.toString, scriptedScalas.build, scriptedScalas.versions, args.toArray, launcher) } + (scriptedDependencies, scriptedTests, scriptedRun, sbtTestDirectory, scriptedBufferLog, scriptedSbt, scriptedScalas, sbtLauncher, scriptedLaunchOpts, result) map { + (deps, m, r, testdir, bufferlog, version, scriptedScalas, launcher, launchOpts, args) => + try { r.invoke(m, testdir, bufferlog: java.lang.Boolean, version.toString, scriptedScalas.build, scriptedScalas.versions, args.toArray, launcher, launchOpts) } catch { case e: java.lang.reflect.InvocationTargetException => throw e.getCause } } } @@ -56,6 +57,7 @@ object ScriptedPlugin extends Plugin { scriptedTests <<= scriptedTestsTask, scriptedRun <<= scriptedRunTask, scriptedDependencies <<= (compile in Test, publishLocal) map { (analysis, pub) => Unit }, + scriptedLaunchOpts := Seq(), scripted <<= scriptedTask ) } diff --git a/scripted/sbt/SbtHandler.scala b/scripted/sbt/SbtHandler.scala index b455f136e..3e27d721c 100644 --- a/scripted/sbt/SbtHandler.scala +++ b/scripted/sbt/SbtHandler.scala @@ -10,9 +10,9 @@ package test import Logger._ -final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC.Server) extends StatementHandler +final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC.Server, launchOpts: Seq[String] = Seq()) extends StatementHandler { - def this(directory: File, launcher: File, log: xsbti.Logger, server: IPC.Server) = this(directory, launcher, log: Logger, server) + def this(directory: File, launcher: File, log: xsbti.Logger, server: IPC.Server, launchOpts: Seq[String]) = this(directory, launcher, log: Logger, server, launchOpts) type State = Process def initialState = newRemote def apply(command: String, arguments: List[String], p: Process): Process = @@ -38,7 +38,7 @@ final class SbtHandler(directory: File, launcher: File, log: Logger, server: IPC { val launcherJar = launcher.getAbsolutePath val globalBase = "-Dsbt.global.base=" + (new File(directory, "global")).getAbsolutePath - val args = "java" :: globalBase :: "-jar" :: launcherJar :: ( "<" + server.port) :: Nil + val args = "java" :: (launchOpts.toList ++ (globalBase :: "-jar" :: launcherJar :: ( "<" + server.port) :: Nil)) val io = BasicIO(log, false).withInput(_.close()) val p = Process(args, directory) run( io ) Spawn { p.exitValue(); server.close() } diff --git a/scripted/sbt/ScriptedTests.scala b/scripted/sbt/ScriptedTests.scala index 63a9345ce..c22925e42 100644 --- a/scripted/sbt/ScriptedTests.scala +++ b/scripted/sbt/ScriptedTests.scala @@ -12,7 +12,7 @@ import xsbt.IPC import xsbt.test.{CommentHandler, FileCommands, ScriptRunner, TestScriptParser} import IO.wrapNull -final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, launcher: File) +final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, launcher: File, launchOpts: Seq[String]) { private val testResources = new Resources(resourceBaseDirectory) @@ -46,7 +46,7 @@ final class ScriptedTests(resourceBaseDirectory: File, bufferLog: Boolean, sbtVe def createParser() = { val fileHandler = new FileCommands(testDirectory) - val sbtHandler = new SbtHandler(testDirectory, launcher, buffered, server) + val sbtHandler = new SbtHandler(testDirectory, launcher, buffered, server, launchOpts) new TestScriptParser(Map('$' -> fileHandler, '>' -> sbtHandler, '#' -> CommentHandler)) } def runTest() = @@ -92,14 +92,14 @@ object ScriptedTests val bootProperties = new File(args(5)) val tests = args.drop(6) val logger = ConsoleLogger() - run(directory, buffer, sbtVersion, defScalaVersion, buildScalaVersions, tests, logger, bootProperties) + run(directory, buffer, sbtVersion, defScalaVersion, buildScalaVersions, tests, logger, bootProperties, Seq()) } - def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], bootProperties: File): Unit = - run(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, tests, ConsoleLogger(), bootProperties)//new FullLogger(Logger.xlog2Log(log))) + def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], bootProperties: File, launchOpts: Seq[String]): Unit = + run(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, tests, ConsoleLogger(), bootProperties, launchOpts)//new FullLogger(Logger.xlog2Log(log))) - def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], logger: AbstractLogger, bootProperties: File) + def run(resourceBaseDirectory: File, bufferLog: Boolean, sbtVersion: String, defScalaVersion: String, buildScalaVersions: String, tests: Array[String], logger: AbstractLogger, bootProperties: File, launchOpts: Seq[String]) { - val runner = new ScriptedTests(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, bootProperties) + val runner = new ScriptedTests(resourceBaseDirectory, bufferLog, sbtVersion, defScalaVersion, buildScalaVersions, bootProperties, launchOpts) for( ScriptedTest(group, name) <- get(tests, resourceBaseDirectory, logger) ) runner.scriptedTest(group, name, logger) } @@ -171,4 +171,4 @@ object CompatibilityLevel extends Enumeration case Minimal27 => "2.7.7" case Minimal28 => "2.8.1" } -} \ No newline at end of file +}