mirror of https://github.com/sbt/sbt.git
javap, test-javap, sh, exec tasks
This commit is contained in:
parent
e68f133c7f
commit
bc11837ccc
|
|
@ -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 })
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
Loading…
Reference in New Issue