From 4f4ae170d301ff024ac4645a3194ed6afea79f1b Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Thu, 24 Feb 2011 23:30:06 -0500 Subject: [PATCH] work on plugins, added console-project, re-integrated more tests --- compile/interface/ConsoleInterface.scala | 2 +- main/Build.scala | 33 +++++---- main/Console.scala | 20 ++--- main/Default.scala | 20 ++--- main/Project.scala | 5 ++ sbt/package.scala | 2 + .../sbt-test/project/Class.forName/build.sbt | 5 ++ .../changes/LibTestProject.scala | 7 -- .../project/Class.forName/changes/build2.sbt | 3 + .../Class.forName/project/build.properties | 5 -- .../project/build/LibTestProject.scala | 7 -- sbt/src/sbt-test/project/Class.forName/test | 10 +-- .../project/console/project/Build.scala | 11 +++ .../project/console/project/build.properties | 2 - .../project/console/project/build/P.scala | 10 --- .../console/sub1/project/build/TestSub.scala | 3 - sbt/src/sbt-test/project/console/test | 7 +- .../changes/first.properties | 1 - .../changes/second.properties | 2 - .../project/build.properties | 2 - .../project/build/Test.scala | 29 -------- .../sbt-test/project/extra-environment/test | 26 ------- .../project/flatten/project/Flat.scala | 32 ++++++++ .../project/flatten/project/build.properties | 5 -- .../project/build/src/FlatProject.scala | 23 ------ sbt/src/sbt-test/project/flatten/test | 18 +++-- .../project/flatten/test-src/SimpleTest.scala | 15 ++-- .../flatten/test-src/c/ResourcesTest.scala | 7 +- sbt/src/sbt-test/project/lib/build.sbt | 5 ++ .../project/lib/changes/LibTestProject.scala | 8 -- .../sbt-test/project/lib/changes/build2.sbt | 3 + .../project/lib/project/build.properties | 5 -- .../project/lib/project/build/Test.scala | 7 -- sbt/src/sbt-test/project/lib/test | 12 +-- .../project/multi/changes/Build1.scala | 11 +++ .../project/multi/changes/Build2.scala | 15 ++++ .../project/multi/changes/MultiProject.scala | 6 -- .../multi/changes/SingleAndTraitProject.scala | 9 --- .../project/multi/changes/SingleProject.scala | 5 -- .../multi/changes/SinglePublicProject.scala | 7 -- sbt/src/sbt-test/project/multi/changes/a.sbt | 1 + sbt/src/sbt-test/project/multi/changes/b.sbt | 1 + sbt/src/sbt-test/project/multi/changes/b2.sbt | 1 + .../project/multi/project/build.properties | 2 - sbt/src/sbt-test/project/multi/test | 37 +++++++--- sbt/src/sbt-test/project/plugins/build.sbt | 5 ++ .../plugins/project/build/UsePlugin.scala | 7 -- .../plugins/project/plugins/Plugins.scala | 5 -- .../project/plugins/project/plugins/p.sbt | 1 + .../processor/project/build.properties | 2 - .../project/build/ProcessorProject.scala | 8 -- .../src/test/scala/ProcessorTest.scala | 74 ------------------- sbt/src/sbt-test/project/processor/test | 2 - .../project/src-plugins/changes/JavaTest.java | 4 - .../project/src-plugins/changes/Plugins.scala | 12 --- .../src-plugins/changes/TestPlugin.scala | 20 ----- .../src-plugins/changes/UsePlugin.scala | 3 - .../project/src-plugins/plugin/JavaTest.java | 5 ++ .../src-plugins/plugin/TestPlugin.scala | 9 +++ .../project/src-plugins/plugin/build.sbt | 3 + .../src-plugins/project/build.properties | 3 - .../project/build/DefinePlugin.scala | 9 --- .../project/plugins/project/P.scala | 6 ++ sbt/src/sbt-test/project/src-plugins/test | 10 --- 64 files changed, 226 insertions(+), 409 deletions(-) create mode 100644 sbt/src/sbt-test/project/Class.forName/build.sbt delete mode 100644 sbt/src/sbt-test/project/Class.forName/changes/LibTestProject.scala create mode 100644 sbt/src/sbt-test/project/Class.forName/changes/build2.sbt delete mode 100644 sbt/src/sbt-test/project/Class.forName/project/build.properties delete mode 100644 sbt/src/sbt-test/project/Class.forName/project/build/LibTestProject.scala create mode 100644 sbt/src/sbt-test/project/console/project/Build.scala delete mode 100644 sbt/src/sbt-test/project/console/project/build.properties delete mode 100644 sbt/src/sbt-test/project/console/project/build/P.scala delete mode 100644 sbt/src/sbt-test/project/console/sub1/project/build/TestSub.scala delete mode 100644 sbt/src/sbt-test/project/extra-environment/changes/first.properties delete mode 100644 sbt/src/sbt-test/project/extra-environment/changes/second.properties delete mode 100644 sbt/src/sbt-test/project/extra-environment/project/build.properties delete mode 100644 sbt/src/sbt-test/project/extra-environment/project/build/Test.scala delete mode 100644 sbt/src/sbt-test/project/extra-environment/test create mode 100644 sbt/src/sbt-test/project/flatten/project/Flat.scala delete mode 100644 sbt/src/sbt-test/project/flatten/project/build.properties delete mode 100644 sbt/src/sbt-test/project/flatten/project/build/src/FlatProject.scala create mode 100644 sbt/src/sbt-test/project/lib/build.sbt delete mode 100644 sbt/src/sbt-test/project/lib/changes/LibTestProject.scala create mode 100644 sbt/src/sbt-test/project/lib/changes/build2.sbt delete mode 100644 sbt/src/sbt-test/project/lib/project/build.properties delete mode 100644 sbt/src/sbt-test/project/lib/project/build/Test.scala create mode 100644 sbt/src/sbt-test/project/multi/changes/Build1.scala create mode 100644 sbt/src/sbt-test/project/multi/changes/Build2.scala delete mode 100644 sbt/src/sbt-test/project/multi/changes/MultiProject.scala delete mode 100644 sbt/src/sbt-test/project/multi/changes/SingleAndTraitProject.scala delete mode 100644 sbt/src/sbt-test/project/multi/changes/SingleProject.scala delete mode 100644 sbt/src/sbt-test/project/multi/changes/SinglePublicProject.scala create mode 100644 sbt/src/sbt-test/project/multi/changes/a.sbt create mode 100644 sbt/src/sbt-test/project/multi/changes/b.sbt create mode 100644 sbt/src/sbt-test/project/multi/changes/b2.sbt delete mode 100644 sbt/src/sbt-test/project/multi/project/build.properties create mode 100644 sbt/src/sbt-test/project/plugins/build.sbt delete mode 100644 sbt/src/sbt-test/project/plugins/project/build/UsePlugin.scala delete mode 100644 sbt/src/sbt-test/project/plugins/project/plugins/Plugins.scala create mode 100644 sbt/src/sbt-test/project/plugins/project/plugins/p.sbt delete mode 100644 sbt/src/sbt-test/project/processor/project/build.properties delete mode 100644 sbt/src/sbt-test/project/processor/project/build/ProcessorProject.scala delete mode 100644 sbt/src/sbt-test/project/processor/src/test/scala/ProcessorTest.scala delete mode 100644 sbt/src/sbt-test/project/processor/test delete mode 100644 sbt/src/sbt-test/project/src-plugins/changes/JavaTest.java delete mode 100644 sbt/src/sbt-test/project/src-plugins/changes/Plugins.scala delete mode 100644 sbt/src/sbt-test/project/src-plugins/changes/TestPlugin.scala delete mode 100644 sbt/src/sbt-test/project/src-plugins/changes/UsePlugin.scala create mode 100644 sbt/src/sbt-test/project/src-plugins/plugin/JavaTest.java create mode 100644 sbt/src/sbt-test/project/src-plugins/plugin/TestPlugin.scala create mode 100644 sbt/src/sbt-test/project/src-plugins/plugin/build.sbt delete mode 100644 sbt/src/sbt-test/project/src-plugins/project/build.properties delete mode 100644 sbt/src/sbt-test/project/src-plugins/project/build/DefinePlugin.scala create mode 100644 sbt/src/sbt-test/project/src-plugins/project/plugins/project/P.scala diff --git a/compile/interface/ConsoleInterface.scala b/compile/interface/ConsoleInterface.scala index ae6a37f41..c7140adac 100644 --- a/compile/interface/ConsoleInterface.scala +++ b/compile/interface/ConsoleInterface.scala @@ -42,7 +42,7 @@ class ConsoleInterface super.createInterpreter() for( (id, value) <- bindNames zip bindValues) - interpreter.bind(id, value.asInstanceOf[AnyRef].getClass.getName, value) + interpreter.beQuietDuring(interpreter.bind(id, value.asInstanceOf[AnyRef].getClass.getName, value)) if(!initialCommands.isEmpty) interpreter.interpret(initialCommands) diff --git a/main/Build.scala b/main/Build.scala index 5beae2bab..f5d806210 100644 --- a/main/Build.scala +++ b/main/Build.scala @@ -14,6 +14,7 @@ package sbt import Project.{AppConfig, Config, ScopedKey, ScopeLocal, Setting, ThisProject, ThisProjectRef} import TypeFunctions.{Endo,Id} import tools.nsc.reporters.ConsoleReporter + import Build.{analyzed, data} // name is more like BuildDefinition, but that is too long trait Build @@ -29,6 +30,9 @@ object Build { def default(base: File): Build = new Build { def projects = defaultProject("default", base) :: Nil } def defaultProject(id: String, base: File): Project = Project(id, base) + + def data[T](in: Seq[Attributed[T]]): Seq[T] = in.map(_.data) + def analyzed(in: Seq[Attributed[_]]): Seq[Analysis] = in.flatMap{ _.metadata.get(Command.Analysis) } } object RetrieveUnit { @@ -102,8 +106,6 @@ object EvaluateTask import BuildStreams.{Streams, TaskStreams} val SystemProcessors = Runtime.getRuntime.availableProcessors - // TODO: we should use a Seq[Attributed[File]] so that we don't throw away Analysis information - val PluginDefinition = TaskKey[(Seq[File], Analysis)]("plugin-definition") val (state, dummyState) = dummy[State]("state") val (streamsManager, dummyStreamsManager) = dummy[Streams]("streams-manager") @@ -119,11 +121,12 @@ object EvaluateTask def dummy[T](name: String): (TaskKey[T], Task[T]) = (TaskKey[T](name), dummyTask(name)) def dummyTask[T](name: String): Task[T] = task( error("Dummy task '" + name + "' did not get converted to a full task.") ) named name - def evalPluginDef(log: Logger)(pluginDef: BuildStructure, state: State): (Seq[File], Analysis) = + def evalPluginDef(log: Logger)(pluginDef: BuildStructure, state: State): Seq[Attributed[File]] = { val root = ProjectRef(pluginDef.root, Load.getRootProject(pluginDef.units)(pluginDef.root)) - val evaluated = evaluateTask(pluginDef, ScopedKey(Scope.ThisScope, PluginDefinition.key), state, root) - val result = evaluated getOrElse error("Plugin task does not exist for plugin definition at " + pluginDef.root) + val pluginKey = Keys.FullClasspath in Configurations.Compile + val evaluated = evaluateTask(pluginDef, ScopedKey(pluginKey.scope, pluginKey.key), state, root) + val result = evaluated getOrElse error("Plugin classpath does not exist for plugin definition at " + pluginDef.root) processResult(result, log) } def evaluateTask[T](structure: BuildStructure, taskKey: ScopedKey[Task[T]], state: State, thisProject: ProjectRef, checkCycles: Boolean = false, maxWorkers: Int = SystemProcessors): Option[Result[T]] = @@ -376,8 +379,11 @@ object Load def checkBuildBase(base: File) = checkDirectory(base) def checkDirectory(base: File) { - assert(base.isDirectory, "Not an existing directory: " + base) assert(base.isAbsolute, "Not absolute: " + base) + if(base.isFile) + error("Not a directory: " + base) + else if(!base.exists) + IO createDirectory base } def checkAll(referenced: Map[URI, List[ProjectRef]], builds: Map[URI, LoadedBuildUnit]) { @@ -470,10 +476,10 @@ object Load val (eval,pluginDef) = apply(dir, s, config) val pluginState = Project.setProject(Load.initialSession(pluginDef, eval), pluginDef, s) - val (pluginClasspath, pluginAnalysis) = config.evalPluginDef(pluginDef, pluginState) - val definitionClasspath = (pluginClasspath ++ config.classpath).distinct + val pluginClasspath = config.evalPluginDef(pluginDef, pluginState) + val definitionClasspath = (data(pluginClasspath) ++ config.classpath).distinct val pluginLoader = ClasspathUtilities.toLoader(definitionClasspath, config.loader) - loadPlugins(definitionClasspath, pluginLoader, pluginAnalysis) + loadPlugins(definitionClasspath, pluginLoader, analyzed(pluginClasspath)) } def definitions(base: File, targetBase: File, srcs: Seq[File], plugins: LoadedPlugins, compilers: Compilers, log: Logger, buildBase: File): LoadedDefinitions = @@ -498,10 +504,10 @@ object Load (inputs, analysis) } - def loadPlugins(classpath: Seq[File], loader: ClassLoader, analysis: Analysis): LoadedPlugins = + def loadPlugins(classpath: Seq[File], loader: ClassLoader, analysis: Seq[Analysis]): LoadedPlugins = { val (pluginNames, plugins) = if(classpath.isEmpty) (Nil, Nil) else { - val names = findPlugins(analysis) + val names = analysis flatMap findPlugins (names, loadPlugins(loader, names) ) } new LoadedPlugins(classpath, loader, plugins, pluginNames) @@ -557,9 +563,10 @@ object Load def localBase = unit.localBase def classpath = unit.definitions.target +: unit.plugins.classpath def loader = unit.definitions.loader - def imports = baseImports ++ importAll(unit.plugins.pluginNames ++ unit.definitions.buildNames) + def imports = getImports(unit) override def toString = unit.toString } + def getImports(unit: BuildUnit) = baseImports ++ importAll(unit.plugins.pluginNames ++ unit.definitions.buildNames) // these are unresolved references def referenced(definitions: Seq[Project]): Seq[ProjectRef] = definitions flatMap referenced @@ -567,7 +574,7 @@ object Load final class BuildStructure(val units: Map[URI, LoadedBuildUnit], val root: URI, val settings: Seq[Setting[_]], val data: Settings[Scope], val index: StructureIndex, val streams: Streams, val delegates: Scope => Seq[Scope], val scopeLocal: ScopeLocal) - final class LoadBuildConfiguration(val stagingDirectory: File, val classpath: Seq[File], val loader: ClassLoader, val compilers: Compilers, val evalPluginDef: (BuildStructure, State) => (Seq[File], Analysis), val delegates: LoadedBuild => Scope => Seq[Scope], val scopeLocal: ScopeLocal, val injectSettings: Seq[Setting[_]], val log: Logger) + final class LoadBuildConfiguration(val stagingDirectory: File, val classpath: Seq[File], val loader: ClassLoader, val compilers: Compilers, val evalPluginDef: (BuildStructure, State) => Seq[Attributed[File]], val delegates: LoadedBuild => Scope => Seq[Scope], val scopeLocal: ScopeLocal, val injectSettings: Seq[Setting[_]], val log: Logger) // information that is not original, but can be reconstructed from the rest of BuildStructure final class StructureIndex(val keyMap: Map[String, AttributeKey[_]], val taskToKey: Map[Task[_], ScopedKey[Task[_]]], val keyIndex: KeyIndex) diff --git a/main/Console.scala b/main/Console.scala index ffdde21e1..3e45f21a6 100644 --- a/main/Console.scala +++ b/main/Console.scala @@ -26,7 +26,7 @@ final class Console(compiler: AnalyzingCompiler) } object Console { - val SbtInitial = "import sbt._; import Process._; import current._" + val SbtInitial = "import sbt._, Process._, current._" def apply(conf: build.Compile)(implicit log: Logger): Console = new Console( compiler(conf) ) def apply(conf: Compile.Inputs): Console = new Console( conf.compilers.scalac ) @@ -36,16 +36,16 @@ object Console val componentManager = new ComponentManager(conf.launcher.globalLock, conf.configuration.provider.components, log) new AnalyzingCompiler(conf.instance, componentManager, log) } - def sbtDefault(conf: build.Compile, value: Any)(implicit log: Logger) + def sbt(state: State, extra: String)(implicit log: Logger) { - val c = new Console(compiler(conf)) - val loader = value.asInstanceOf[AnyRef].getClass.getClassLoader - c.apply(conf.compileClasspath, Nil, loader, SbtInitial)("current" -> value) - } - def sbtDefault(conf: Compile.Inputs, value: Any)(implicit log: Logger) - { - val loader = value.asInstanceOf[AnyRef].getClass.getClassLoader - Console(conf)(conf.config.classpath, Nil, loader, SbtInitial)("current" -> value) + val loader = classOf[State].getClassLoader + val extracted = Project extract state + val unit = extracted.currentUnit + val compiler = Compile.compilers(state.configuration, log).scalac + val imports = Load.getImports(unit.unit).mkString("", ";\n", ";\n\n") + val initCommands = imports + extra + val bindings = ("state" -> state) :: ("extracted" -> extracted ) :: Nil + (new Console(compiler))(unit.classpath, Nil, initCommands)(Some(loader), bindings) } } diff --git a/main/Default.scala b/main/Default.scala index e7a093803..245f63946 100755 --- a/main/Default.scala +++ b/main/Default.scala @@ -4,6 +4,7 @@ package sbt import java.io.File + import Build.data import Scope.{GlobalScope,ThisScope} import Project.{AppConfig, Config, Initialize, ScopedKey, Setting, ThisProject, ThisProjectRef} import Configurations.{Compile => CompileConf, Test => TestConf} @@ -57,6 +58,7 @@ object Keys val Clean = TaskKey[Unit]("clean") val ConsoleTask = TaskKey[Unit]("console") val ConsoleQuick = TaskKey[Unit]("console-quick") + val ConsoleProject = TaskKey[Unit]("console-project") val CompileTask = TaskKey[Analysis]("compile") val Compilers = TaskKey[Compile.Compilers]("compilers") val DocTask = TaskKey[File]("doc") @@ -200,8 +202,6 @@ object Default def analysisMap[T](cp: Seq[Attributed[T]]): Map[T, Analysis] = (cp map extractAnalysis).toMap - def data[T](in: Seq[Attributed[T]]): Seq[T] = in.map(_.data) - def core = Seq( CrossPaths :== true, ShellPrompt in GlobalScope :== (_ => "> "), @@ -275,7 +275,8 @@ object Default lazy val projectTasks = Seq( CleanFiles <<= (Target, SourceManaged) { _ :: _ :: Nil }, - Clean <<= CleanFiles map IO.delete + Clean <<= CleanFiles map IO.delete, + ConsoleProject <<= consoleProject ) lazy val testTasks = Seq( @@ -388,7 +389,8 @@ object Default def discoverMainClasses(analysis: Analysis): Seq[String] = compile.Discovery.applications(Test.allDefs(analysis)) collect { case (definition, discovered) if(discovered.hasMain) => definition.name } - + + def consoleProject = (EvaluateTask.state, streams, InitialCommands in ConsoleProject) map { (state, s, extra) => Console.sbt(state, extra)(s.log) } def console = consoleTask(FullClasspath, ConsoleTask) def consoleQuick = consoleTask(ExternalDependencyClasspath, ConsoleQuick) def consoleTask(classpath: TaskKey[Classpath], task: TaskKey[_]) = (Compilers, classpath, ScalacOptions in task, InitialCommands in task, streams) map { @@ -410,7 +412,7 @@ object Default def copyResources = (ClassDirectory, CacheDirectory, Resources, ResourceDirectories, streams) map { (target, cache, resources, dirs, s) => val cacheFile = cache / "copy-resources" - val mappings = resources x rebase(dirs, target) + val mappings = (resources --- dirs) x rebase(dirs, target) s.log.debug("Copy resource mappings: " + mappings.mkString("\n\t","\n\t","")) Sync(cacheFile)( mappings ) mappings @@ -439,8 +441,6 @@ object Default val CompletionsID = "completions" -// lazy val projectConsole = task { Console.sbtDefault(info.compileInputs, this)(ConsoleLogger()) } - def inConfig(conf: Configuration)(ss: Seq[Setting[_]]): Seq[Setting[_]] = inScope(ThisScope.copy(config = Select(conf)) )( (Config :== conf) +: ss) def inTask(t: Scoped)(ss: Seq[Setting[_]]): Seq[Setting[_]] = @@ -464,17 +464,13 @@ object Default lazy val defaultWebTasks = Nil - def pluginDefinition = Seq( - EvaluateTask.PluginDefinition <<= (FullClasspath in CompileConf,CompileTask in CompileConf) map ( (c,a) => (data(c),a) ) - ) - lazy val defaultClasspaths = Classpaths.publishSettings ++ Classpaths.baseSettings ++ inConfig(CompileConf)(Classpaths.configSettings) ++ inConfig(TestConf)(Classpaths.configSettings) - lazy val defaultSettings = core ++ defaultPaths ++ defaultClasspaths ++ defaultTasks ++ compileBase ++ disableAggregation ++ pluginDefinition + lazy val defaultSettings = core ++ defaultPaths ++ defaultClasspaths ++ defaultTasks ++ compileBase ++ disableAggregation lazy val defaultWebSettings = defaultSettings ++ defaultWebPaths ++ defaultWebTasks } object Classpaths diff --git a/main/Project.scala b/main/Project.scala index 9e2be44f4..7ab6cbe76 100644 --- a/main/Project.scala +++ b/main/Project.scala @@ -23,6 +23,11 @@ final case class Project(id: String, base: File, aggregate: Seq[ProjectRef] = Ni def uses = aggregate ++ dependencies.map(_.project) } final case class Extracted(structure: Load.BuildStructure, session: SessionSettings, curi: URI, cid: String, rootProject: URI => String) +{ + lazy val currentUnit = structure units curi + lazy val currentProject = currentUnit defined cid + lazy val currentRef = ProjectRef(Some(curi), Some(cid)) +} object Project extends Init[Scope] { diff --git a/sbt/package.scala b/sbt/package.scala index 26d24560b..4d92afd07 100644 --- a/sbt/package.scala +++ b/sbt/package.scala @@ -9,4 +9,6 @@ package object sbt extends sbt.std.TaskExtra with sbt.Types with sbt.ProcessExtr if(m.isDefined) Some(m.get) else None def uri(s: String): URI = new URI(s) def file(s: String): File = new File(s) + + implicit def globFilter(expression: String): NameFilter = GlobFilter(expression) } diff --git a/sbt/src/sbt-test/project/Class.forName/build.sbt b/sbt/src/sbt-test/project/Class.forName/build.sbt new file mode 100644 index 000000000..3e81a420f --- /dev/null +++ b/sbt/src/sbt-test/project/Class.forName/build.sbt @@ -0,0 +1,5 @@ +CrossPaths :== false + +Name :== "definition-lib-forname-test" + +Version :== "1.0" \ No newline at end of file diff --git a/sbt/src/sbt-test/project/Class.forName/changes/LibTestProject.scala b/sbt/src/sbt-test/project/Class.forName/changes/LibTestProject.scala deleted file mode 100644 index 19d6398aa..000000000 --- a/sbt/src/sbt-test/project/Class.forName/changes/LibTestProject.scala +++ /dev/null @@ -1,7 +0,0 @@ -import sbt._ - -class LibTestProject(info: ProjectInfo) extends DefaultProject(info) -{ - lazy val useJar = task { injar.Test.other; None } - override def disableCrossPaths = true -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/Class.forName/changes/build2.sbt b/sbt/src/sbt-test/project/Class.forName/changes/build2.sbt new file mode 100644 index 000000000..5a1b24a66 --- /dev/null +++ b/sbt/src/sbt-test/project/Class.forName/changes/build2.sbt @@ -0,0 +1,3 @@ +CrossPaths :== false + +TaskKey("use-jar") := { injar.Test.other; () } diff --git a/sbt/src/sbt-test/project/Class.forName/project/build.properties b/sbt/src/sbt-test/project/Class.forName/project/build.properties deleted file mode 100644 index aa5b7e794..000000000 --- a/sbt/src/sbt-test/project/Class.forName/project/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Project properties -#Mon Mar 23 16:23:49 EDT 2009 -project.organization=empty -project.name=definition-lib-forname-test -project.version=1.0 diff --git a/sbt/src/sbt-test/project/Class.forName/project/build/LibTestProject.scala b/sbt/src/sbt-test/project/Class.forName/project/build/LibTestProject.scala deleted file mode 100644 index be902da1b..000000000 --- a/sbt/src/sbt-test/project/Class.forName/project/build/LibTestProject.scala +++ /dev/null @@ -1,7 +0,0 @@ -import sbt._ - -class LibTestProject(info: ProjectInfo) extends DefaultProject(info) -{ - override def disableCrossPaths = true - override def buildScalaVersion = defScalaVersion.value -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/Class.forName/test b/sbt/src/sbt-test/project/Class.forName/test index a9aeccdfd..60331d0c1 100644 --- a/sbt/src/sbt-test/project/Class.forName/test +++ b/sbt/src/sbt-test/project/Class.forName/test @@ -1,14 +1,14 @@ # this step builds a test jar for use by the project definition > package -$ delete project/build -$ copy-file target/definition-lib-forname-test-1.0.jar project/build/lib/test.jar -$ copy-file changes/LibTestProject.scala project/build/src/LibTestProject.scala +$ delete build.sbt +$ copy-file target/definition-lib-forname-test-1.0.jar project/plugins/lib/test.jar +$ copy-file changes/build2.sbt build.sbt # the copied project definition depends on the Test module in test.jar and will -# fail to compile if sbt did not put the jars in project/build/lib/ on the compile classpath +# fail to compile if sbt did not put the jars in project/plugins/lib/ on the compile classpath > reload # The project definition uses the class in test.jar and will fail here if sbt did not put the -# jars in project/build/lib on the runtime classpath +# jars in project/plugins/lib on the runtime classpath > use-jar \ No newline at end of file diff --git a/sbt/src/sbt-test/project/console/project/Build.scala b/sbt/src/sbt-test/project/console/project/Build.scala new file mode 100644 index 000000000..ef35ffbeb --- /dev/null +++ b/sbt/src/sbt-test/project/console/project/Build.scala @@ -0,0 +1,11 @@ +import sbt._ + +object B extends Build +{ + lazy val projects = Seq(root, sub1, sub2, sub3) + + lazy val root = Project("root", file(".")) + lazy val sub1 = Project("sub1", file("sub1")) + lazy val sub2 = Project("sub2", file("sub2")) + lazy val sub3 = Project("sub3", file("sub3")) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/console/project/build.properties b/sbt/src/sbt-test/project/console/project/build.properties deleted file mode 100644 index 3f2496999..000000000 --- a/sbt/src/sbt-test/project/console/project/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -project.name=test -project.version=1.0 \ No newline at end of file diff --git a/sbt/src/sbt-test/project/console/project/build/P.scala b/sbt/src/sbt-test/project/console/project/build/P.scala deleted file mode 100644 index ee02785e3..000000000 --- a/sbt/src/sbt-test/project/console/project/build/P.scala +++ /dev/null @@ -1,10 +0,0 @@ -import sbt._ - -class Root(info: ProjectInfo) extends ParentProject(info) -{ - lazy val sub1 = project("sub1", "sub1") - lazy val sub2 = project("sub2", "sub2", new Sub2(_)) - lazy val sub3 = project("sub3", "sub3", new DefaultProject(_)) - - class Sub2(info: ProjectInfo) extends DefaultProject(info) -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/console/sub1/project/build/TestSub.scala b/sbt/src/sbt-test/project/console/sub1/project/build/TestSub.scala deleted file mode 100644 index f27b286af..000000000 --- a/sbt/src/sbt-test/project/console/sub1/project/build/TestSub.scala +++ /dev/null @@ -1,3 +0,0 @@ -import sbt._ - -class TestSub(info: ProjectInfo) extends DefaultProject(info) \ No newline at end of file diff --git a/sbt/src/sbt-test/project/console/test b/sbt/src/sbt-test/project/console/test index ef1e4e956..b3dcf1650 100644 --- a/sbt/src/sbt-test/project/console/test +++ b/sbt/src/sbt-test/project/console/test @@ -1,7 +1,6 @@ +$ mkdir sub3 sub1 sub2 > console-project -> project sub3 -> console-project -> project sub1 -> console-project +> 'sub3/console-project' +> 'sub1/console-project' > project sub2 > console-project \ No newline at end of file diff --git a/sbt/src/sbt-test/project/extra-environment/changes/first.properties b/sbt/src/sbt-test/project/extra-environment/changes/first.properties deleted file mode 100644 index 865c9991f..000000000 --- a/sbt/src/sbt-test/project/extra-environment/changes/first.properties +++ /dev/null @@ -1 +0,0 @@ -first.property=set-first \ No newline at end of file diff --git a/sbt/src/sbt-test/project/extra-environment/changes/second.properties b/sbt/src/sbt-test/project/extra-environment/changes/second.properties deleted file mode 100644 index 116151c6c..000000000 --- a/sbt/src/sbt-test/project/extra-environment/changes/second.properties +++ /dev/null @@ -1,2 +0,0 @@ -first.property=set-first -second.property=set-second \ No newline at end of file diff --git a/sbt/src/sbt-test/project/extra-environment/project/build.properties b/sbt/src/sbt-test/project/extra-environment/project/build.properties deleted file mode 100644 index 0a2f48ee6..000000000 --- a/sbt/src/sbt-test/project/extra-environment/project/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -project.name=test-env -project.version=1.0 \ No newline at end of file diff --git a/sbt/src/sbt-test/project/extra-environment/project/build/Test.scala b/sbt/src/sbt-test/project/extra-environment/project/build/Test.scala deleted file mode 100644 index e812012f4..000000000 --- a/sbt/src/sbt-test/project/extra-environment/project/build/Test.scala +++ /dev/null @@ -1,29 +0,0 @@ -import sbt._ - -class Test(info: ProjectInfo) extends DefaultProject(info) -{ - lazy val FirstDefault = "a" - lazy val SecondDefault = "b" - lazy val FirstSet = "set-first" - lazy val SecondSet = "set-second" - - lazy val extra = new BasicEnvironment - { - def log = Test.this.log - def envBackingPath = info.builderPath / "extra.properties" - - lazy val firstProperty = propertyOptional[String](FirstDefault) - lazy val secondProperty = propertyOptional[String](SecondDefault) - } - - import extra.{firstProperty, secondProperty} - - lazy val checkFirstUnset = checkTask(firstProperty, FirstDefault, "first.property") - lazy val checkFirstSet = checkTask(firstProperty, FirstSet, "first.property") - lazy val checkSecondUnset = checkTask(secondProperty, SecondDefault, "second.property") - lazy val checkSecondSet = checkTask(secondProperty, SecondSet, "second.property") - - def checkTask[T](property: extra.Property[T], expected: T, name: String): Task = - task { if(property.value == expected) None else Some("Expected "+name+" to be '" + expected + "', was: " + property.value) } - -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/extra-environment/test b/sbt/src/sbt-test/project/extra-environment/test deleted file mode 100644 index 813a92031..000000000 --- a/sbt/src/sbt-test/project/extra-environment/test +++ /dev/null @@ -1,26 +0,0 @@ -# check that both properties are unset - -> check-first-unset -->check-first-set -> check-second-unset -->check-second-set - -# create the extra properties file with only the first property set - -$ copy-file changes/first.properties project/extra.properties -> reload - --> check-first-unset ->check-first-set -> check-second-unset -->check-second-set - -# create the extra properties file with both properties set - -$ copy-file changes/second.properties project/extra.properties -> reload - --> check-first-unset ->check-first-set --> check-second-unset ->check-second-set \ No newline at end of file diff --git a/sbt/src/sbt-test/project/flatten/project/Flat.scala b/sbt/src/sbt-test/project/flatten/project/Flat.scala new file mode 100644 index 000000000..3e3855c70 --- /dev/null +++ b/sbt/src/sbt-test/project/flatten/project/Flat.scala @@ -0,0 +1,32 @@ +import sbt._ +import Keys._ +import Configurations.{Compile, Test} + +object Flat extends Build +{ + lazy val projects = Seq(root) + lazy val root = Project("root", file("."), + settings = Default.defaultSettings ++ forConfig(Compile, "src") ++ forConfig(Test, "test-src") ++ baseSettings + ) + + def baseSettings = Seq( + LibraryDependencies += "org.scala-tools.testing" %% "scalacheck" % "1.8" % "test", + SourceFilter := "*.java" | "*.scala" + ) + + def forConfig(conf: Configuration, name: String) = Default.inConfig(conf)( unpackage(name) ) + + def unpackage(name: String) = Seq( + SourceDirectories := file(name) :: Nil, + ResourceDirectories :== SourceDirectories, + Keys.Resources <<= (SourceDirectories, SourceFilter, DefaultExcludes) map { + (srcs, filter, excl) => srcs.descendentsExcept(-filter,excl).getFiles.toSeq + }, + Unpackage <<= (JarPath in PackageSrc, Base) map { (jar, base) => + IO.unzip(jar, base / name) + } + ) + + val Unpackage = TaskKey[Unit]("unpackage-src") +} + diff --git a/sbt/src/sbt-test/project/flatten/project/build.properties b/sbt/src/sbt-test/project/flatten/project/build.properties deleted file mode 100644 index 6ad62f9f3..000000000 --- a/sbt/src/sbt-test/project/flatten/project/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Project properties -#Fri May 15 12:14:00 EDT 2009 -project.organization=test -project.name=Flatten Source Hierarchy -project.version=1.0 diff --git a/sbt/src/sbt-test/project/flatten/project/build/src/FlatProject.scala b/sbt/src/sbt-test/project/flatten/project/build/src/FlatProject.scala deleted file mode 100644 index 4ff35e60f..000000000 --- a/sbt/src/sbt-test/project/flatten/project/build/src/FlatProject.scala +++ /dev/null @@ -1,23 +0,0 @@ -import sbt._ - -class FlatProject(info: ProjectInfo) extends DefaultProject(info) -{ - override def useMavenConfigurations = true - val sc = "org.scalacheck" % "scalacheck" % "1.5" % "test" - - def sourceFilter = "*.java" | "*.scala" - override def mainSources = descendents(sourcePath ###, sourceFilter) - override def mainResources = descendents(sourcePath ###, -sourceFilter) - - override def testSourcePath = "test-src" - override def testSources = descendents(testSourcePath ###, sourceFilter) - override def testResources = descendents(testSourcePath ###, -sourceFilter) - - lazy val unpackageProject = - task - { - FileUtilities.unzip(outputPath / (artifactBaseName + "-project.zip"), info.projectPath, "src/*", log).left.toOption - } dependsOn(cleanSrc) - - lazy val cleanSrc = cleanTask(sourcePath +++ testSourcePath) -} diff --git a/sbt/src/sbt-test/project/flatten/test b/sbt/src/sbt-test/project/flatten/test index f3588fbb2..d8c334670 100644 --- a/sbt/src/sbt-test/project/flatten/test +++ b/sbt/src/sbt-test/project/flatten/test @@ -1,19 +1,21 @@ -> ++2.7.7 - # This test verifies that sbt works after the source hierarchy has been flattened and merged # so that resources and Java and Scala sources are side by side under src/ -> update -> test +> test:test +> test:run # This part verifies that the package-src action works properly under a flattened/merged source hierarchy -> package-project +> package-src +> test:package-src $ delete src +$ delete test-src --> test +-> test:run -> unpackage-project +> unpackage-src +> test:unpackage-src -> test +> test:test +> test:run diff --git a/sbt/src/sbt-test/project/flatten/test-src/SimpleTest.scala b/sbt/src/sbt-test/project/flatten/test-src/SimpleTest.scala index 54fa5f2de..9e8d228cb 100644 --- a/sbt/src/sbt-test/project/flatten/test-src/SimpleTest.scala +++ b/sbt/src/sbt-test/project/flatten/test-src/SimpleTest.scala @@ -1,10 +1,15 @@ -import org.scalacheck._ + import org.scalacheck._ + import Prop._ class SimpleTest extends Properties("Simple") { - specify("increment scala", (i: Int) => (new a.b.ScalaA).increment(i) == i+1) - specify("increment java", (i: Int) => (new JavaA).inc(i) == i+1) + property("increment scala") = forAll( (i: Int) => (new a.b.ScalaA).increment(i) == i+1) + property("increment java") = forAll( (i: Int) => (new JavaA).inc(i) == i+1) - specify("decrement scala", (i: Int) => (new b.ScalaB).decrement(i) == i+1) - specify("decrement java", (i: Int) => (new a.JavaB).dec(i) == i+1) + property("decrement scala") = forAll( (i: Int) => (new b.ScalaB).decrement(i) == i+1) + property("decrement java") = forAll( (i: Int) => (new a.JavaB).dec(i) == i+1) +} +object MainTest +{ + def main(args: Array[String]) {} } \ No newline at end of file diff --git a/sbt/src/sbt-test/project/flatten/test-src/c/ResourcesTest.scala b/sbt/src/sbt-test/project/flatten/test-src/c/ResourcesTest.scala index 7f7d60034..914d4ba4c 100644 --- a/sbt/src/sbt-test/project/flatten/test-src/c/ResourcesTest.scala +++ b/sbt/src/sbt-test/project/flatten/test-src/c/ResourcesTest.scala @@ -1,11 +1,12 @@ package d -import org.scalacheck._ + import org.scalacheck._ + import Prop._ class ResourcesTest extends Properties("Resources") { - specify("load main resources ok", (a: Boolean) => { b.ScalaC.loadResources(); true }) - specify("load test resources ok", (a: Boolean) => { ScalaD.loadResources(); true }) + property("load main resources ok") = forAll( (a: Boolean) => { b.ScalaC.loadResources(); true }) + property("load test resources ok") = forAll( (a: Boolean) => { ScalaD.loadResources(); true }) } object ScalaD { diff --git a/sbt/src/sbt-test/project/lib/build.sbt b/sbt/src/sbt-test/project/lib/build.sbt new file mode 100644 index 000000000..335193490 --- /dev/null +++ b/sbt/src/sbt-test/project/lib/build.sbt @@ -0,0 +1,5 @@ +CrossPaths :== false + +Name :== "definition-lib-test" + +Version :== "1.0" \ No newline at end of file diff --git a/sbt/src/sbt-test/project/lib/changes/LibTestProject.scala b/sbt/src/sbt-test/project/lib/changes/LibTestProject.scala deleted file mode 100644 index 3bb540a96..000000000 --- a/sbt/src/sbt-test/project/lib/changes/LibTestProject.scala +++ /dev/null @@ -1,8 +0,0 @@ -import sbt._ - -class LibTestProject(info: ProjectInfo) extends DefaultProject(info) -{ - override def disableCrossPaths = true - override def buildScalaVersion = defScalaVersion.value - lazy val useJar = task { injar.Test.foo } -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/lib/changes/build2.sbt b/sbt/src/sbt-test/project/lib/changes/build2.sbt new file mode 100644 index 000000000..0e375563e --- /dev/null +++ b/sbt/src/sbt-test/project/lib/changes/build2.sbt @@ -0,0 +1,3 @@ +CrossPaths :== false + +TaskKey("use-jar") := { injar.Test.foo } diff --git a/sbt/src/sbt-test/project/lib/project/build.properties b/sbt/src/sbt-test/project/lib/project/build.properties deleted file mode 100644 index 237e3120c..000000000 --- a/sbt/src/sbt-test/project/lib/project/build.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Project properties -#Mon Mar 23 16:23:49 EDT 2009 -project.organization=empty -project.name=definition-lib-test -project.version=1.0 diff --git a/sbt/src/sbt-test/project/lib/project/build/Test.scala b/sbt/src/sbt-test/project/lib/project/build/Test.scala deleted file mode 100644 index f240876d6..000000000 --- a/sbt/src/sbt-test/project/lib/project/build/Test.scala +++ /dev/null @@ -1,7 +0,0 @@ -import sbt._ - -class Test(info: ProjectInfo) extends DefaultProject(info) -{ - override def disableCrossPaths = true - override def buildScalaVersion = defScalaVersion.value -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/lib/test b/sbt/src/sbt-test/project/lib/test index 3975db53a..6872a9c22 100644 --- a/sbt/src/sbt-test/project/lib/test +++ b/sbt/src/sbt-test/project/lib/test @@ -1,14 +1,14 @@ # this step builds a test jar for use by the project definition > package -$ delete project/build -$ copy-file target/definition-lib-test-1.0.jar project/build/lib/test.jar -$ copy-file changes/LibTestProject.scala project/build/src/LibTestProject.scala +$ delete build.sbt +$ copy-file target/definition-lib-test-1.0.jar project/plugins/lib/test.jar +$ copy-file changes/build2.sbt build.sbt # the copied project definition depends on the Test module in test.jar and will -# fail to compile if sbt did not put the jars in project/build/lib/ on the compile classpath +# fail to compile if sbt did not put the jar in project/plugins/lib/ on the compile classpath > reload # The project definition uses the class in test.jar and will fail here if sbt did not put the -# jars in project/build/lib on the runtime classpath -> use-jar \ No newline at end of file +# jar in project/plugins/lib on the runtime classpath +> use-jar diff --git a/sbt/src/sbt-test/project/multi/changes/Build1.scala b/sbt/src/sbt-test/project/multi/changes/Build1.scala new file mode 100644 index 000000000..08eaadb49 --- /dev/null +++ b/sbt/src/sbt-test/project/multi/changes/Build1.scala @@ -0,0 +1,11 @@ +import sbt._ +import Keys.Name + +object TestBuild extends Build +{ + lazy val projects = Seq( + proj("a", "."), + proj("b", "b") + ) + def proj(id: String, dir: String) = Project(id, file(dir), settings = Seq( Name :== id ) ) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/Build2.scala b/sbt/src/sbt-test/project/multi/changes/Build2.scala new file mode 100644 index 000000000..2c1fd09f7 --- /dev/null +++ b/sbt/src/sbt-test/project/multi/changes/Build2.scala @@ -0,0 +1,15 @@ +import sbt._ +import Keys.Name + +object TestBuild extends MakeBuild +{ + lazy val projects = Seq( proj("a", ".") ) +} +object SecondBuild extends MakeBuild +{ + lazy val projects = Seq( proj("b", "b") ) +} +trait MakeBuild extends Build +{ + def proj(id: String, dir: String) = Project(id, file(dir), settings = Seq( Name :== id ) ) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/MultiProject.scala b/sbt/src/sbt-test/project/multi/changes/MultiProject.scala deleted file mode 100644 index 1fbb3af93..000000000 --- a/sbt/src/sbt-test/project/multi/changes/MultiProject.scala +++ /dev/null @@ -1,6 +0,0 @@ -package test - -import sbt._ - -class TestProject(info: ProjectInfo) extends DefaultProject(info) -class AnotherProject(info: ProjectInfo) extends DefaultProject(info) \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/SingleAndTraitProject.scala b/sbt/src/sbt-test/project/multi/changes/SingleAndTraitProject.scala deleted file mode 100644 index 00c1b8ee1..000000000 --- a/sbt/src/sbt-test/project/multi/changes/SingleAndTraitProject.scala +++ /dev/null @@ -1,9 +0,0 @@ -package test - -import sbt._ - -class TestProject(info: ProjectInfo) extends DefaultProject(info) - -trait NotAProject extends Project -abstract class AnotherNonProject extends Project -object YetAnotherNonProject extends DefaultProject(error("Shouldn't be called")) \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/SingleProject.scala b/sbt/src/sbt-test/project/multi/changes/SingleProject.scala deleted file mode 100644 index f5c85946a..000000000 --- a/sbt/src/sbt-test/project/multi/changes/SingleProject.scala +++ /dev/null @@ -1,5 +0,0 @@ -package test - -import sbt._ - -class TestProject(info: ProjectInfo) extends DefaultProject(info) \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/SinglePublicProject.scala b/sbt/src/sbt-test/project/multi/changes/SinglePublicProject.scala deleted file mode 100644 index 9ea008c42..000000000 --- a/sbt/src/sbt-test/project/multi/changes/SinglePublicProject.scala +++ /dev/null @@ -1,7 +0,0 @@ -package test - -import sbt._ - -class TestProject(info: ProjectInfo) extends DefaultProject(info) -protected class NotMainProject(info: ProjectInfo) extends DefaultProject(info) -private class AnotherNotMainProject(info: ProjectInfo) extends DefaultProject(info) \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/a.sbt b/sbt/src/sbt-test/project/multi/changes/a.sbt new file mode 100644 index 000000000..70689036f --- /dev/null +++ b/sbt/src/sbt-test/project/multi/changes/a.sbt @@ -0,0 +1 @@ +TaskKey("example") := () \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/b.sbt b/sbt/src/sbt-test/project/multi/changes/b.sbt new file mode 100644 index 000000000..cfbaa52af --- /dev/null +++ b/sbt/src/sbt-test/project/multi/changes/b.sbt @@ -0,0 +1 @@ +TaskKey("sample") := () \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/changes/b2.sbt b/sbt/src/sbt-test/project/multi/changes/b2.sbt new file mode 100644 index 000000000..45ca260f3 --- /dev/null +++ b/sbt/src/sbt-test/project/multi/changes/b2.sbt @@ -0,0 +1 @@ +TaskKey("sample2") := () \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/project/build.properties b/sbt/src/sbt-test/project/multi/project/build.properties deleted file mode 100644 index 2b4d7e5a1..000000000 --- a/sbt/src/sbt-test/project/multi/project/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -project.name=Test -project.version=1.0 \ No newline at end of file diff --git a/sbt/src/sbt-test/project/multi/test b/sbt/src/sbt-test/project/multi/test index a637b54d5..09a5fe171 100644 --- a/sbt/src/sbt-test/project/multi/test +++ b/sbt/src/sbt-test/project/multi/test @@ -1,16 +1,29 @@ -# There should be no ambiguity with a single project definition +# A single project definition with projects only defining a name +$ copy-file changes/Build1.scala project/Build.scala +> reload +> a/name +-> a/compile +> b/name +-> b/compile +$ delete project/Build.scala -$ copy-file changes/SingleProject.scala project/build/src/TestProject.scala +# Two separate project definitions, implemented using a trait +# Only the modules should be discovered. +# A .sbt file should be used in each +$ copy-file changes/Build2.scala project/Build.scala +$ copy-file changes/a.sbt a.sbt +$ copy-file changes/b.sbt b/b.sbt +$ copy-file changes/b2.sbt b/b2.sbt > reload -# Again, no ambiguity with a single project definition and any number of abstract classes/traits implementing Project -$ copy-file changes/SingleAndTraitProject.scala project/build/src/TestProject.scala -> reload +> a/name +-> a/compile +> a/example +-> a/sample +-> a/sample2 -# One public project and any number of non-public projects should not be an error -$ copy-file changes/SinglePublicProject.scala project/build/src/TestProject.scala -> reload - -# Multiple public projects should be an error -$ copy-file changes/MultiProject.scala project/build/src/TestProject.scala --> reload \ No newline at end of file +> b/name +-> b/compile +> b/sample +> b/sample2 +-> b/example diff --git a/sbt/src/sbt-test/project/plugins/build.sbt b/sbt/src/sbt-test/project/plugins/build.sbt new file mode 100644 index 000000000..c95877801 --- /dev/null +++ b/sbt/src/sbt-test/project/plugins/build.sbt @@ -0,0 +1,5 @@ +TaskKey("check") := { + import antlr.Tool // verify that antlr is on compile classpath + Class.forName("antlr.Tool") // verify antlr is on runtime classpath + () +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/plugins/project/build/UsePlugin.scala b/sbt/src/sbt-test/project/plugins/project/build/UsePlugin.scala deleted file mode 100644 index 129cf4f99..000000000 --- a/sbt/src/sbt-test/project/plugins/project/build/UsePlugin.scala +++ /dev/null @@ -1,7 +0,0 @@ -import sbt._ - -class UsePlugin(info: ProjectInfo) extends DefaultProject(info) -{ - import antlr.Tool // verify that antlr is on compile classpath - lazy val check = task { Class.forName("antlr.Tool"); None } // verify antlr is on runtime classpath -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/plugins/project/plugins/Plugins.scala b/sbt/src/sbt-test/project/plugins/project/plugins/Plugins.scala deleted file mode 100644 index 48924e7d2..000000000 --- a/sbt/src/sbt-test/project/plugins/project/plugins/Plugins.scala +++ /dev/null @@ -1,5 +0,0 @@ -import sbt._ -class Plugins(info: ProjectInfo) extends PluginDefinition(info) -{ - val a = "antlr" % "antlr" % "2.7.7" -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/plugins/project/plugins/p.sbt b/sbt/src/sbt-test/project/plugins/project/plugins/p.sbt new file mode 100644 index 000000000..c5a1f9cb9 --- /dev/null +++ b/sbt/src/sbt-test/project/plugins/project/plugins/p.sbt @@ -0,0 +1 @@ +LibraryDependencies += "antlr" % "antlr" % "2.7.7" \ No newline at end of file diff --git a/sbt/src/sbt-test/project/processor/project/build.properties b/sbt/src/sbt-test/project/processor/project/build.properties deleted file mode 100644 index c45202545..000000000 --- a/sbt/src/sbt-test/project/processor/project/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -project.name=Processor Test -project.version=1.0 \ No newline at end of file diff --git a/sbt/src/sbt-test/project/processor/project/build/ProcessorProject.scala b/sbt/src/sbt-test/project/processor/project/build/ProcessorProject.scala deleted file mode 100644 index 7c1170aa4..000000000 --- a/sbt/src/sbt-test/project/processor/project/build/ProcessorProject.scala +++ /dev/null @@ -1,8 +0,0 @@ -import sbt._ - -class PTest(info: ProjectInfo) extends ProcessorProject(info) -{ - val launcherJar = "org.scala-tools.sbt" % "launcher" % info.app.id.version % "test" - val specs = "org.scala-tools.testing" % "specs" % "1.6.0" % "test" - override def testClasspath = super.testClasspath +++ info.sbtClasspath -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/processor/src/test/scala/ProcessorTest.scala b/sbt/src/sbt-test/project/processor/src/test/scala/ProcessorTest.scala deleted file mode 100644 index 5be8aed72..000000000 --- a/sbt/src/sbt-test/project/processor/src/test/scala/ProcessorTest.scala +++ /dev/null @@ -1,74 +0,0 @@ -package ptest - -import sbt._ -import Path.fromFile -import org.specs._ - -class ProcessorTest extends Specification -{ - "basic processor " should { - def success(f: processor.Success => Unit) = successOrFail(basicProcessorResult)(f) - - "succeed" in { - success(_ => ()) - } - "not insert any arguments" in { - success(_.insertArguments must_== Nil) - } - "preserve the fail handler" in { - success(_.onFailure must_== basicFail) - } - } - "full processor " should { - def success(f: processor.Success => Unit) = successOrFail(fullProcessorResult)(f) - "succeed" in { - success(_ => ()) - } - "insert correct arguments" in { - success(_.insertArguments must_== testArgs) - } - "preserve the fail handler" in { - success(_.onFailure must_== testFail) - } - } - - def successOrFail(r: processor.ProcessorResult)(f: processor.Success => Unit) = - r match - { - case s: processor.Success => f(s) - case _ => error("Processor failed: " + r) - } - - def withProject[T](f: Project => T): T = - { - val log = new ConsoleLogger - xsbt.FileUtilities.withTemporaryDirectory { tmp => - val app = xsbt.boot.Launcher.defaultAppProvider(tmp) - val info = new ProjectInfo(tmp, Nil, None)(log, app, None) - val project = new DefaultProject(info) - f(project) - } - } - def basicProcessorResult = - { - var ranBasicArgs: Option[String] = None - val basic = new processor.BasicProcessor { - def apply(p: Project, args: String) = { ranBasicArgs = Some(args) } - } - val result = withProject { project => basic("basic", project, basicFail, basicArgs) } - ranBasicArgs must_== Some(basicArgs) - result - } - def fullProcessorResult = - { - val full = new processor.Processor { - def apply(label: String, p: Project, failAction: Option[String], args: String) = new processor.Success(p, failAction, args.split("""\s+"""): _*) - } - withProject { project => full("full", project, testFail, testArgs.mkString(" ")) } - } - - lazy val testFail = Some("fail") - lazy val testArgs = List("a", "b") - lazy val basicArgs = " a b c " - lazy val basicFail = Some("basic-fail") -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/processor/test b/sbt/src/sbt-test/project/processor/test deleted file mode 100644 index 5fbb5d887..000000000 --- a/sbt/src/sbt-test/project/processor/test +++ /dev/null @@ -1,2 +0,0 @@ -> update -> test \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/changes/JavaTest.java b/sbt/src/sbt-test/project/src-plugins/changes/JavaTest.java deleted file mode 100644 index 2144be719..000000000 --- a/sbt/src/sbt-test/project/src-plugins/changes/JavaTest.java +++ /dev/null @@ -1,4 +0,0 @@ - -// should not be interpreted as a source file -public class JavaTest { -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/changes/Plugins.scala b/sbt/src/sbt-test/project/src-plugins/changes/Plugins.scala deleted file mode 100644 index bca4f1444..000000000 --- a/sbt/src/sbt-test/project/src-plugins/changes/Plugins.scala +++ /dev/null @@ -1,12 +0,0 @@ -import sbt._ - -class Plugins(info: ProjectInfo) extends PluginDefinition(info) -{ - override def ivyCacheDirectory = Some(outputPath / "ivy-cache") - - override def managedStyle = ManagedStyle.Ivy - def projectRoot = Path.fromFile(info.projectPath.asFile.getParentFile.getParentFile) - val local = Resolver.file("test-repo", (projectRoot /"repo" / "test").asFile) - - val plug = "test" % "plugins-test" % "1.0" -} diff --git a/sbt/src/sbt-test/project/src-plugins/changes/TestPlugin.scala b/sbt/src/sbt-test/project/src-plugins/changes/TestPlugin.scala deleted file mode 100644 index 5a65a4541..000000000 --- a/sbt/src/sbt-test/project/src-plugins/changes/TestPlugin.scala +++ /dev/null @@ -1,20 +0,0 @@ -import sbt._ - -trait TestPlugin extends DefaultProject -{ - lazy val check = - task - { - try - { - Class.forName("JavaTest") - Some("Java source should not be compiled as part of the plugin") - } - catch - { - case _: ClassNotFoundException => - log.info("Test action") - None - } - } -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/changes/UsePlugin.scala b/sbt/src/sbt-test/project/src-plugins/changes/UsePlugin.scala deleted file mode 100644 index 0feff6898..000000000 --- a/sbt/src/sbt-test/project/src-plugins/changes/UsePlugin.scala +++ /dev/null @@ -1,3 +0,0 @@ -import sbt._ - -class UsePlugin(info: ProjectInfo) extends DefaultProject(info) with TestPlugin \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/plugin/JavaTest.java b/sbt/src/sbt-test/project/src-plugins/plugin/JavaTest.java new file mode 100644 index 000000000..dd4e60009 --- /dev/null +++ b/sbt/src/sbt-test/project/src-plugins/plugin/JavaTest.java @@ -0,0 +1,5 @@ + + +public class JavaTest { + public static final int X = 9; +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/plugin/TestPlugin.scala b/sbt/src/sbt-test/project/src-plugins/plugin/TestPlugin.scala new file mode 100644 index 000000000..5f5ce1ae5 --- /dev/null +++ b/sbt/src/sbt-test/project/src-plugins/plugin/TestPlugin.scala @@ -0,0 +1,9 @@ +import sbt._ + +object TestPlugin extends Plugin +{ + val Check = TaskKey[Unit]("check") + def settings = Seq( + Check := assert(JavaTest.X == 9) + ) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/plugin/build.sbt b/sbt/src/sbt-test/project/src-plugins/plugin/build.sbt new file mode 100644 index 000000000..8dfa2ad7a --- /dev/null +++ b/sbt/src/sbt-test/project/src-plugins/plugin/build.sbt @@ -0,0 +1,3 @@ +LibraryDependencies <<= (LibraryDependencies, Project.AppConfig) { (deps, conf) => + deps :+ ("org.scala-tools.sbt" %% "sbt" % conf.provider.id.version) +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/project/build.properties b/sbt/src/sbt-test/project/src-plugins/project/build.properties deleted file mode 100644 index 6915dc797..000000000 --- a/sbt/src/sbt-test/project/src-plugins/project/build.properties +++ /dev/null @@ -1,3 +0,0 @@ -project.version=1.0 -project.name=Plugins Test -project.organization=test \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/project/build/DefinePlugin.scala b/sbt/src/sbt-test/project/src-plugins/project/build/DefinePlugin.scala deleted file mode 100644 index c382f3cc3..000000000 --- a/sbt/src/sbt-test/project/src-plugins/project/build/DefinePlugin.scala +++ /dev/null @@ -1,9 +0,0 @@ -import sbt._ - -class DefinePlugin(info: ProjectInfo) extends PluginProject(info) -{ - override def ivyCacheDirectory = Some(outputPath / "ivy-cache") - - override def managedStyle = ManagedStyle.Ivy - val publishTo = Resolver.file("test-repo", ("repo" / "test").asFile) -} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/project/plugins/project/P.scala b/sbt/src/sbt-test/project/src-plugins/project/plugins/project/P.scala new file mode 100644 index 000000000..19043338a --- /dev/null +++ b/sbt/src/sbt-test/project/src-plugins/project/plugins/project/P.scala @@ -0,0 +1,6 @@ +import sbt._ + +object B extends Build +{ + lazy val projects = Project("root", file(".")).dependsOn( file("../../plugin") ) :: Nil +} \ No newline at end of file diff --git a/sbt/src/sbt-test/project/src-plugins/test b/sbt/src/sbt-test/project/src-plugins/test index 12e491c5b..a5912a391 100644 --- a/sbt/src/sbt-test/project/src-plugins/test +++ b/sbt/src/sbt-test/project/src-plugins/test @@ -1,11 +1 @@ -$ copy-file changes/TestPlugin.scala src/main/scala/TestPlugin.scala -$ copy-file changes/JavaTest.java src/main/java/JavaTest.java -> publish - -> set project.name use-plugin-test -$ delete project/build -$ copy-file changes/Plugins.scala project/plugins/Plugins.scala -$ copy-file changes/UsePlugin.scala project/build/UsePlugin.scala - -> reload > check \ No newline at end of file