javap, test-javap, sh, exec tasks

This commit is contained in:
Mark Harrah 2010-12-02 21:56:15 -05:00
parent e68f133c7f
commit bc11837ccc
4 changed files with 39 additions and 4 deletions

View File

@ -216,6 +216,7 @@ object ClasspathProject
(cp map extractAnalysis).toMap
def data[T](in: Seq[Attributed[T]]): Seq[T] = in.map(_.data)
def taskData[T](in: Task[Seq[Attributed[T]]]): Task[Seq[T]] = in map data
def depMap(root: Project): Task[Map[ModuleRevisionId, ModuleDescriptor]] =
depMap(MultiProject.topologicalSort(root).dropRight(1) collect { case cp: DefaultClasspathProject => cp })

View File

@ -31,8 +31,9 @@ trait IntegrationTest extends BasicProject
override def configurations: Seq[Configuration] = super.configurations :+ Configurations.IntegrationTest
lazy val integrationTestOptions: Task[Seq[TestOption]] = testOptions
lazy val integrationTest = testTasks(Some("it"), Configurations.IntegrationTest, integrationTestOptions, integrationTestCompile.compile, buildScalaInstance)
lazy val integrationTestCompile = compileTasks(Some("it"), Configurations.IntegrationTest, "src" / "it", Path.emptyPathFinder, buildScalaInstance)
lazy val integrationTest = testTasks(Some("it"), ITestConfig, integrationTestOptions, integrationTestCompile.compile, buildScalaInstance)
lazy val integrationTestCompile = compileTasks(Some("it"), ITestConfig, "src" / "it", Path.emptyPathFinder, buildScalaInstance)
lazy val integrationTestPackage = packages(ITestConfig)
}
abstract class BasicProject extends TestProject with MultiClasspathProject with ReflectiveClasspathProject
{
@ -67,10 +68,17 @@ abstract class BasicProject extends TestProject with MultiClasspathProject with
lazy val packages = TaskMap(packageTask)
lazy val pkgMainClass = TaskMap(mainClassTask)
lazy val jarPath = TaskMap(jarPathTask)
lazy val javaps = TaskMap(javapCompiledTask)
lazy val javap = javaps(CompileConfig)
lazy val testJavap = javaps(TestConfig)
lazy val `package` = packages(CompileConfig)
lazy val testPackage = packages(TestConfig)
def javapCompiledTask(conf: Configuration): Task[Unit] =
javapTask(taskData(fullClasspath(conf)), buildScalaInstance)
def directoryProductsTask(conf: Configuration): Task[Seq[Attributed[File]]] =
conf match {
case CompileConfig | DefaultConfig => makeProducts(compile.compile, compile.compileInputs, name, "")
@ -141,7 +149,7 @@ abstract class BasicProject extends TestProject with MultiClasspathProject with
lazy val clean = task { IO.delete(outputDirectory) }
// lazy val test-only, test-quick, test-failed, package-src, package-test, package-doc, javap
// lazy val test-only, test-quick, test-failed, package-src, package-doc, jetty-{run,stop,restart}, prepare-webapp
lazy val set = input map { in =>
val Seq(name, value) = in.splitArgs.take(2)

View File

@ -92,4 +92,30 @@ object OutputUtil
}
def taskForName(ctx: Transform.Context[Project], name: String): Task[_] =
ctx.static(ctx.rootOwner, MultiProject.transformName(name)).getOrElse(error("No task '" + name + "'"))
}
trait Exec
{
def input: Task[Input]
def streams: Task[TaskStreams]
def fork(p: Seq[String], log: Logger): Unit = fork(Process(p), log)
def fork(p: ProcessBuilder, log: Logger): Unit =
{
val exitValue = p ! log
if(exitValue != 0) error("Nonzero exit value: " + exitValue)
}
def forkWithCode(p: ProcessBuilder, log: Logger): Task[Int] = streams map { s => p ! log }
lazy val sh = (input, streams) map { case in :+: s :+: HNil => fork("sh" :: "-c" :: in.arguments :: Nil, s.log) }
lazy val exec = (input, streams) map { case in :+: s :+: HNil => fork( Process(in.splitArgs), s.log ) }
}
trait Javap extends Exec
{
def javapTask(classpath: Task[Seq[File]], scalaInstance: Task[ScalaInstance]): Task[Unit] =
javapTask( (classpath, scalaInstance) map { case cp :+: si :+: HNil => cp ++ si.jars } )
def javapTask(classpath: Task[Seq[File]]): Task[Unit] =
(input, classpath, streams) map { case in :+: cp :+: s :+: HNil =>
val args = in.splitArgs
val argsWithClasspath = if(cp.isEmpty) args else "-classpath" +: Path.makeString(cp) +: args
fork("javap" +: argsWithClasspath, s.log)
}
}

View File

@ -2,4 +2,4 @@ package sbt
import std._
trait TestProject extends Project with ReflectiveProject with ProjectConstructors with LastOutput with PrintTask with ProjectExtra with TaskSetup
trait TestProject extends Project with ReflectiveProject with ProjectConstructors with LastOutput with PrintTask with ProjectExtra with TaskSetup with Exec with Javap