diff --git a/README.md b/README.md index b218f8ca2..0067e7cfc 100644 --- a/README.md +++ b/README.md @@ -21,11 +21,11 @@ There is a [video of a demo] given at [Scala Days 2011] based on sbt 0.10.0 that $ git clone git://github.com/harrah/xsbt.git $ cd xsbt -3. The initial branch is the development branch 0.11, which contains the latest code for the 0.11.x series. To build a specific release or commit, switch to the associated tag. The tag for the latest stable release is v0.11.0: +3. The initial branch is the development branch 0.11, which contains the latest code for the 0.11.x series. To build a specific release or commit, switch to the associated tag. The tag for the latest stable release is v0.11.1: - $ git checkout v0.11.0 + $ git checkout v0.11.1 - Note that sbt is always built with the previous stable release. For example, the 0.11 branch is built with 0.11.0, the v0.11.0 tag is built with 0.10.1, and the v0.10.1 tag is built with 0.10.0. + Note that sbt is always built with the previous stable release. For example, the 0.11 branch is built with 0.11.1, the v0.11.1 tag is built with 0.11.0, the v0.11.0 tag is built with 0.10.1, and the v0.10.1 tag is built with 0.10.0. 4. To build the launcher, publish all components locally, and build API and SXR documentation: @@ -35,13 +35,13 @@ There is a [video of a demo] given at [Scala Days 2011] based on sbt 0.10.0 that $ sbt publish-local proguard sxr doc -5. To use this locally built version of sbt, copy your stable ~/bin/sbt script to ~/bin/xsbt and change it to use the launcher jar in `/target/`. For the v0.11.0 tag, the full location is: +5. To use this locally built version of sbt, copy your stable ~/bin/sbt script to ~/bin/xsbt and change it to use the launcher jar in `/target/`. For the v0.11.1 tag, the full location is: - /target/sbt-launch-0.11.0.jar + /target/sbt-launch-0.11.1.jar If using the 0.11 development branch, the launcher is at: - /target/sbt-launch-0.11.1-SNAPSHOT.jar + /target/sbt-launch-0.11.2-SNAPSHOT.jar ## Modifying sbt @@ -49,6 +49,6 @@ When developing sbt itself, there is no need to run `build-all`, since this gene To use your modified version of sbt in a project locally, run `publish-local`. If you have modified the launcher, also run `proguard`. -After each `publish-local`, clean the `project/boot/` directory in the project in which you want to use the locally built sbt. Alternatively, if sbt is running and the launcher hasn't changed, run `reboot full` to have sbt do this for you. +After each `publish-local`, clean the `~/.sbt/boot/` directory. Alternatively, if sbt is running and the launcher hasn't changed, run `reboot full` to have sbt do this for you. -If a project has `project/build.properties` defined, either delete the file or change `sbt.version` to `0.11.1-SNAPSHOT`. \ No newline at end of file +If a project has `project/build.properties` defined, either delete the file or change `sbt.version` to `0.11.2-SNAPSHOT`. diff --git a/main/Defaults.scala b/main/Defaults.scala index e245dead1..7aa2cdb96 100644 --- a/main/Defaults.scala +++ b/main/Defaults.scala @@ -16,7 +16,7 @@ package sbt import org.scalatools.testing.{AnnotatedFingerprint, SubclassFingerprint} import sys.error - import scala.xml.{Node => XNode,NodeSeq} + import scala.xml.NodeSeq import org.apache.ivy.core.module.{descriptor, id} import descriptor.ModuleDescriptor, id.ModuleRevisionId import java.io.File @@ -193,11 +193,10 @@ object Defaults extends BuildCommon } def compilersSetting = compilers <<= (scalaInstance, appConfiguration, streams, classpathOptions, javaHome) map { (si, app, s, co, jh) => Compiler.compilers(si, co, jh)(app, s.log) } - lazy val configTasks = docSetting(doc) ++ Seq( + lazy val configTasks = docSetting(doc) ++ compileInputsSettings ++ Seq( initialCommands in GlobalScope :== "", cleanupCommands in GlobalScope :== "", compile <<= compileTask, - compileInputs <<= compileInputsTask, compileIncSetup <<= compileIncSetupTask, console <<= consoleTask, consoleQuick <<= consoleQuickTask, @@ -442,11 +441,10 @@ object Defaults extends BuildCommon new Run(si, trap, tmp) } - def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(Seq( + def docSetting(key: TaskKey[File]): Seq[Setting[_]] = inTask(key)(compileInputsSettings ++ Seq( cacheDirectory ~= (_ / key.key.label), target <<= docDirectory, // deprecate docDirectory in favor of 'target in doc'; remove when docDirectory is removed scalacOptions <<= scaladocOptions or scalacOptions, // deprecate scaladocOptions in favor of 'scalacOptions in doc'; remove when scaladocOptions is removed - compileInputs <<= compileInputsTask, key in TaskGlobal <<= (cacheDirectory, compileInputs, target, configuration, streams) map { (cache, in, out, config, s) => // For Scala/Java hybrid projects, the output docs are rebased to `scala` or `java` sub-directory accordingly. We do hybrid // mode iff both *.scala and *.java files exist -- other doc resources (package.html, *.jpg etc.) don't influence the decision. @@ -488,13 +486,15 @@ object Defaults extends BuildCommon (dependencyClasspath, cacheDirectory, skip in compile, definesClass) map { (cp, cacheDir, skip, definesC) => Compiler.IncSetup(analysisMap(cp), definesC, skip, cacheDir / "compile") } - def compileInputsTask = - (dependencyClasspath, sources, compilers, javacOptions, scalacOptions, classDirectory, compileOrder, compileIncSetup, streams) map { - (cp, srcs, cs, javacOpts, scalacOpts, classes, order, incSetup, s) => - val classpath = classes +: data(cp) - Compiler.inputs(classpath, srcs, classes, scalacOpts, javacOpts, 100, order)(cs, incSetup, s.log) - } - + def compileInputsSettings: Seq[Setting[_]] = { + val optionsPair = TaskKey.local[(Seq[String], Seq[String])] + Seq(optionsPair <<= (scalacOptions, javacOptions) map Pair.apply, + compileInputs <<= (dependencyClasspath, sources, compilers, optionsPair, classDirectory, compileOrder, compileIncSetup, maxErrors, streams) map { + (cp, srcs, cs, optsPair, classes, order, incSetup, maxErr, s) => + Compiler.inputs(classes +: data(cp), srcs, classes, optsPair._1, optsPair._2, maxErr, order)(cs, incSetup, s.log) + }) + } + def sbtPluginExtra(m: ModuleID, sbtV: String, scalaV: String): ModuleID = m.extra(CustomPomParser.SbtVersionKey -> sbtV, CustomPomParser.ScalaVersionKey -> scalaV).copy(crossVersion = false) def writePluginsDescriptor(plugins: Set[String], dir: File): Seq[File] = { @@ -1205,4 +1205,4 @@ trait BuildCommon def getPrevious[T](task: TaskKey[T]): Initialize[Task[Option[T]]] = (state, resolvedScoped) map { (s, ctx) => getFromContext(task, ctx, s) } -} \ No newline at end of file +} diff --git a/main/TaskData.scala b/main/TaskData.scala index cf34145c9..95286f5f8 100644 --- a/main/TaskData.scala +++ b/main/TaskData.scala @@ -36,7 +36,7 @@ object TaskData def write[T](i: Initialize[Task[T]], id: String = DefaultDataID)(implicit f: Format[T]): Initialize[Task[T]] = writeRelated(i, id)(idFun[T])(f) def writeRelated[T, S](i: Initialize[Task[T]], id: String = DefaultDataID)(convert: T => S)(implicit f: Format[S]): Initialize[Task[T]] = - (streams.identity zipWith i) { (sTask, iTask) => + (streams zipWith i) { (sTask, iTask) => (sTask,iTask) map { case s :+: value :+: HNil => Operations.write( s.binary(id), convert(value) )(f) value diff --git a/project/Sbt.scala b/project/Sbt.scala index e948444e4..21ee3f43a 100644 --- a/project/Sbt.scala +++ b/project/Sbt.scala @@ -164,7 +164,7 @@ object Sbt extends Build scriptedSource <<= (sourceDirectory in sbtSub) / "sbt-test", sources in sxr <<= deepTasks(sources in Compile), Sxr.sourceDirectories <<= deep(sourceDirectories in Compile).map(_.flatten), - fullClasspath in sxr <<= (externalDependencyClasspath in Compile in sbtSub).identity, + fullClasspath in sxr <<= (externalDependencyClasspath in Compile in sbtSub), compileInputs in (Compile,sxr) <<= (sources in sxr, compileInputs in sbtSub in Compile, fullClasspath in sxr) map { (srcs, in, cp) => in.copy(config = in.config.copy(sources = srcs, classpath = cp.files)) }, @@ -178,7 +178,7 @@ object Sbt extends Build projectComponent, exportJars := true, componentID := Some("xsbti"), - watchSources <++= apiDefinitions.identity, + watchSources <++= apiDefinitions, resourceGenerators in Compile <+= (version, resourceManaged, streams) map generateVersionFile, apiDefinitions <<= baseDirectory map { base => (base / "definition") :: (base / "other") :: (base / "type") :: Nil }, sourceGenerators in Compile <+= (cacheDirectory, apiDefinitions, fullClasspath in Compile in datatypeSub, sourceManaged in Compile, mainClass in datatypeSub in Compile, runner, streams) map generateAPICached diff --git a/project/Transform.scala b/project/Transform.scala index d63363251..349a1fdab 100644 --- a/project/Transform.scala +++ b/project/Transform.scala @@ -20,7 +20,7 @@ object Transform transformResources <<= (fileMappings in transformResources, resourceProperties) map { (rs, props) => rs map { case (in, out) => transform(in, out, props) } }, - resourceGenerators <+= transformResources.identity + resourceGenerators <+= transformResources ) def transformMappings = (inputResources, inputResourceDirectories, resourceManaged) map { (rs, rdirs, rm) => (rs --- rdirs) x (rebase(rdirs, rm)|flat(rm)) toSeq @@ -46,4 +46,4 @@ object Transform lazy val Snapshots = typesafeRepository("snapshots") def typesafeRepository(status: String) = """ typesafe-ivy-%s: http://repo.typesafe.com/typesafe/ivy-% 'set sources in (Compile, doc) <<= sources in (Compile, doc) map { _.filterNot(_.getName endsWith ".java") }' -> clean -> doc +> ; clean ; doc # pure scala project, only scaladoc at top level $ exists "target/api/index.js" @@ -24,8 +23,7 @@ $ absent "target/api/java" > 'set sources in (Compile, doc) <<= sources in Compile map { _.filter(_.getName endsWith ".java") }' -> clean -> doc +> ; clean ; doc # pure java project, only javadoc at top level $ exists "target/api/package-list"