diff --git a/sbt/src/sbt-test/dependency-management/exclude-scala/project/ExcludeScala.scala b/sbt/src/sbt-test/dependency-management/exclude-scala/project/ExcludeScala.scala new file mode 100644 index 000000000..038b601b2 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/exclude-scala/project/ExcludeScala.scala @@ -0,0 +1,25 @@ + import sbt._ + import Keys._ + +object ExcludeScala extends Build +{ + lazy val projects = Seq(root) + lazy val root = Project("root", file(".")) settings( + libraryDependencies <++= baseDirectory(dependencies), + scalaVersion := "2.8.1", + autoScalaLibrary <<= baseDirectory(base => !(base / "noscala").exists ), + scalaOverride <<= fullClasspath in Compile map { cp => + val existing = cp.files.filter(_.getName contains "scala-library") + val loader = classpath.ClasspathUtilities.toLoader(existing) + // check that the 2.8.1 scala-library is on the classpath and not 2.7.7 + Class.forName("scala.collection.immutable.List", false, loader) + } + ) + lazy val scalaOverride = TaskKey[Unit]("scala-override") + + def dependencies(base: File) = + if( ( base / "sbinary").exists ) + ("org.scala-tools.sbinary" % "sbinary_2.7.7" % "0.3") :: Nil + else + Nil +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/exclude-scala/test b/sbt/src/sbt-test/dependency-management/exclude-scala/test index 77feb1e5c..15c551af0 100644 --- a/sbt/src/sbt-test/dependency-management/exclude-scala/test +++ b/sbt/src/sbt-test/dependency-management/exclude-scala/test @@ -1,3 +1,13 @@ -> no-scala -> update -> no-scala \ No newline at end of file +> scala-override + +$ touch sbinary +> reload +> scala-override + +$ touch noscala +> reload +> scala-override + +$ delete sbinary +> reload +-> scala-override \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/exclude-transitive/project/TestProject.scala b/sbt/src/sbt-test/dependency-management/exclude-transitive/project/TestProject.scala index bd6080146..f7656c8ba 100644 --- a/sbt/src/sbt-test/dependency-management/exclude-transitive/project/TestProject.scala +++ b/sbt/src/sbt-test/dependency-management/exclude-transitive/project/TestProject.scala @@ -6,23 +6,20 @@ object TestProject extends Build lazy val projects = Seq(root) lazy val root = Project("root", file(".")) settings( ivyPaths <<= (baseDirectory, target)( (dir, t) => new IvyPaths(dir, Some(t / "ivy-cache"))), - libraryDependencies += transitive("javax.mail" % "mail" % "1.4.1"), + libraryDependencies <+= baseDirectory(transitive("javax.mail" % "mail" % "1.4.1")), TaskKey("check-transitive") <<= check(true), TaskKey("check-intransitive") <<= check(false) ) - def transitive(dep: ModuleID) = - { - println("transitive(" + dep + ") = " + file("transitive").exists) - if(file("transitive").exists) dep else dep.intransitive() - } + def transitive(dep: ModuleID)(base: File) = + if((base / "transitive").exists) dep else dep.intransitive() private def check(transitive: Boolean) = (dependencyClasspath in Compile) map { downloaded => val jars = downloaded.size if(transitive) - if(jars <= 1) error("Transitive dependencies not downloaded") + if(jars <= 2) error("Transitive dependencies not downloaded") else () else - if(jars > 1) error("Transitive dependencies downloaded (" + downloaded.files.mkString(", ") + ")") + if(jars > 2) error("Transitive dependencies downloaded (" + downloaded.files.mkString(", ") + ")") else () } } diff --git a/sbt/src/sbt-test/dependency-management/exclude-transitive/test b/sbt/src/sbt-test/dependency-management/exclude-transitive/test index 9ed9d122e..b7200b24b 100644 --- a/sbt/src/sbt-test/dependency-management/exclude-transitive/test +++ b/sbt/src/sbt-test/dependency-management/exclude-transitive/test @@ -1,10 +1,11 @@ # load the project definition with transitive dependencies enabled # and check that they are not downloaded -$ pause +#$ pause $ touch transitive -$ pause + +#$ pause > reload -$ pause +#$ pause > check-transitive -> check-intransitive diff --git a/sbt/src/sbt-test/dependency-management/sources/project/Test.scala b/sbt/src/sbt-test/dependency-management/sources/project/Test.scala new file mode 100644 index 000000000..3458b5485 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/sources/project/Test.scala @@ -0,0 +1,25 @@ +import sbt._ +import Keys._ + +object Test extends Build +{ + lazy val projects = Seq(root) + lazy val root = Project("root", file(".")) settings( + libraryDependencies += "net.liftweb" % "lift-webkit" % "1.0" intransitive(), + libraryDependencies += "org.scalacheck" % "scalacheck" % "1.5" intransitive(), + transitiveClassifiers := Seq("sources"), + TaskKey("check-sources") <<= updateClassifiers map checkSources, + TaskKey("check-binaries") <<= update map checkBinaries + ) + def getSources(report: UpdateReport) = report.matching(artifactFilter(`classifier` = "sources") ) + def checkSources(report: UpdateReport) = + { + val srcs = getSources(report) + if(srcs.isEmpty) error("No sources retrieved") else if(srcs.size != 2) error("Incorrect sources retrieved:\n\t" + srcs.mkString("\n\t")) + } + def checkBinaries(report: UpdateReport) = + { + val srcs = getSources(report) + if(!srcs.isEmpty) error("Sources retrieved:\n\t" + srcs.mkString("\n\t")) + } +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/sources/project/build.properties b/sbt/src/sbt-test/dependency-management/sources/project/build.properties deleted file mode 100644 index 2b4d7e5a1..000000000 --- a/sbt/src/sbt-test/dependency-management/sources/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/dependency-management/sources/project/build/Test.scala b/sbt/src/sbt-test/dependency-management/sources/project/build/Test.scala deleted file mode 100644 index 42f084ff2..000000000 --- a/sbt/src/sbt-test/dependency-management/sources/project/build/Test.scala +++ /dev/null @@ -1,22 +0,0 @@ -import sbt._ - -class Test(info: ProjectInfo) extends DefaultProject(info) -{ - val sourcesOnly = "net.liftweb" % "lift-webkit" % "1.0" % "sources" sources() intransitive() - val sourcesAndJar = "org.scalacheck" % "scalacheck" % "1.5" withSources() - def expectedCompile = Set("scalacheck-1.5.jar", "scalacheck-1.5-sources.jar") - def expectedSources = Set("lift-webkit-1.0-sources.jar") - lazy val check = task - { - val compilePath = names(compileClasspath.get) - val sources = names(fullClasspath(Configurations.Sources).get) - if(!same(expectedCompile, compilePath)) - Some("Expected compile classpath " + expectedCompile.mkString(", ") + " differs from actual: " + compilePath.mkString(", ")) - else if(!same(expectedSources, sources)) - Some("Expected sources " + expectedSources.mkString(", ") + " differ from actual: " + sources.mkString(", ")) - else - None - } - def names(path: Iterable[Path]): Set[String] = Set() ++ path.map(_.asFile.getName) - def same(expected: Set[String], actual: Set[String]) = (expected -- actual).isEmpty -} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/sources/test b/sbt/src/sbt-test/dependency-management/sources/test index b81a22c43..2a28093f0 100644 --- a/sbt/src/sbt-test/dependency-management/sources/test +++ b/sbt/src/sbt-test/dependency-management/sources/test @@ -1,2 +1,3 @@ -> update -> check \ No newline at end of file +> check-binaries +> show update-classifiers +> check-sources \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/url/project/TestProject.scala b/sbt/src/sbt-test/dependency-management/url/project/TestProject.scala new file mode 100644 index 000000000..71015f98a --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/url/project/TestProject.scala @@ -0,0 +1,27 @@ + import sbt._ + import Keys._ + +object TestProject extends Build +{ + lazy val projects = Seq(root) + lazy val root = Project("root", file(".")) settings( + libraryDependencies += "slinky" % "slinky" % "2.1" % "test" from "http://slinky2.googlecode.com/svn/artifacts/2.1/slinky.jar", + TaskKey("check-in-test") <<= checkClasspath(Test), + TaskKey("check-in-compile") <<= checkClasspath(Compile) + ) + + lazy val checkInTest = checkClasspath(testClasspath) + lazy val checkInCompile = checkClasspath(compileClasspath) + private def checkClasspath(conf: Configuration) = + fullClasspath in conf map { cp => + try + { + val loader = ClasspathUtilities.toLoader(cp) + Class.forName("slinky.http.Application", false, loader) + } + catch + { + case _: ClassNotFoundException => error("Dependency not downloaded.") + } + } +} \ No newline at end of file diff --git a/sbt/src/sbt-test/dependency-management/url/project/build.properties b/sbt/src/sbt-test/dependency-management/url/project/build.properties deleted file mode 100644 index cefcdcae9..000000000 --- a/sbt/src/sbt-test/dependency-management/url/project/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -project.name=Test -project.version=1.0 diff --git a/sbt/src/sbt-test/dependency-management/url/project/build/src/TestProject.scala b/sbt/src/sbt-test/dependency-management/url/project/build/src/TestProject.scala deleted file mode 100644 index 4b4205da8..000000000 --- a/sbt/src/sbt-test/dependency-management/url/project/build/src/TestProject.scala +++ /dev/null @@ -1,25 +0,0 @@ -import sbt._ - -import java.net.{URL, URLClassLoader} - -class TestProject(info: ProjectInfo) extends DefaultProject(info) -{ - override def useMavenConfigurations = true - val direct = "slinky" % "slinky" % "2.1" % "test->default" from "http://slinky2.googlecode.com/svn/artifacts/2.1/slinky.jar" - lazy val checkInTest = checkClasspath(testClasspath) - lazy val checkInCompile = checkClasspath(compileClasspath) - private def checkClasspath(cp: PathFinder) = - task - { - try - { - Class.forName("slinky.http.Application", false, new URLClassLoader(cp.get.map(_.asURL).toList.toArray)) - None - } - catch - { - case _: ClassNotFoundException => - Some("Dependency not downloaded.") - } - } -} \ No newline at end of file