diff --git a/ivy/Ivy.scala b/ivy/Ivy.scala
index 116f95418..57e19ec4b 100644
--- a/ivy/Ivy.scala
+++ b/ivy/Ivy.scala
@@ -336,7 +336,7 @@ private object IvySbt
{
import module._
- { if(hasInfo(dependencies))
+ { if(hasInfo(module, dependencies))
NodeSeq.Empty
else
@@ -348,7 +348,24 @@ private object IvySbt
}
}
- private def hasInfo(x: scala.xml.NodeSeq) = !({x} \ "info").isEmpty
+ private def hasInfo(module: ModuleID, x: scala.xml.NodeSeq) =
+ {
+ val info = {x} \ "info"
+ if(!info.isEmpty)
+ {
+ def check(found: NodeSeq, expected: String, label: String) =
+ if(found.isEmpty)
+ error("Missing " + label + " in inline Ivy XML.")
+ else {
+ val str = found.text
+ if(str != expected) error("Inconsistent " + label + " in inline Ivy XML. Expected '" + expected + "', got '" + str + "'")
+ }
+ check(info \ "@organisation", module.organization, "organisation")
+ check(info \ "@module", module.name, "name")
+ check(info \ "@revision", module.revision, "version")
+ }
+ !info.isEmpty
+ }
/** Parses the given in-memory Ivy file 'xml', using the existing 'moduleID' and specifying the given 'defaultConfiguration'. */
private def parseIvyXML(settings: IvySettings, xml: scala.xml.NodeSeq, moduleID: DefaultModuleDescriptor, defaultConfiguration: String, validate: Boolean): CustomXmlParser.CustomParser =
parseIvyXML(settings, xml.toString, moduleID, defaultConfiguration, validate)
diff --git a/main/Defaults.scala b/main/Defaults.scala
index 167e89e84..293004e3b 100644
--- a/main/Defaults.scala
+++ b/main/Defaults.scala
@@ -28,6 +28,8 @@ object Defaults
def nameForSrc(config: String) = if(config == "compile") "main" else config
def prefix(config: String) = if(config == "compile") "" else config + "-"
+ def lock(app: xsbti.AppConfiguration): xsbti.GlobalLock = app.provider.scalaProvider.launcher.globalLock
+
def extractAnalysis[T](a: Attributed[T]): (T, inc.Analysis) =
(a.data, a.metadata get Keys.analysis getOrElse inc.Analysis.Empty)
@@ -521,8 +523,7 @@ object Classpaths
updateConfiguration <<= (retrieveConfiguration, ivyLoggingLevel)((conf,level) => new UpdateConfiguration(conf, false, level) ),
retrieveConfiguration <<= (managedDirectory, retrievePattern, retrieveManaged) { (libm, pattern, enabled) => if(enabled) Some(new RetrieveConfiguration(libm, pattern)) else None },
ivyConfiguration <<= (fullResolvers, ivyPaths, otherResolvers, moduleConfigurations, offline, checksums, appConfiguration, streams) map { (rs, paths, other, moduleConfs, off, check, app, s) =>
- val lock = app.provider.scalaProvider.launcher.globalLock
- new InlineIvyConfiguration(paths, rs, other, moduleConfs, off, Some(lock), check, s.log)
+ new InlineIvyConfiguration(paths, rs, other, moduleConfs, off, Some(lock(app)), check, s.log)
},
ivyConfigurations <<= (autoCompilerPlugins, thisProject) { (auto, project) =>
project.configurations ++ (if(auto) CompilerPlugin :: Nil else Nil)
diff --git a/sbt/src/sbt-test/dependency-management/info/project/InfoTest.scala b/sbt/src/sbt-test/dependency-management/info/project/InfoTest.scala
index cd79621da..4583c66e8 100644
--- a/sbt/src/sbt-test/dependency-management/info/project/InfoTest.scala
+++ b/sbt/src/sbt-test/dependency-management/info/project/InfoTest.scala
@@ -7,16 +7,19 @@ object InfoTest 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"))),
- ivyXML <<= (baseDirectory, organization, moduleID) apply inlineXML,
+ ivyXML <<= (customInfo, organization, moduleID, version) apply inlineXML,
+ projectID ~= (_ cross false),
+ customInfo <<= baseDirectory{_ / "info" exists },
TaskKey("check-download") <<= checkDownload,
delivered <<= deliverLocal map XML.loadFile,
TaskKey("check-info") <<= checkInfo
)
lazy val delivered = TaskKey[NodeSeq]("delivered")
+ lazy val customInfo = SettingKey[Boolean]("custom-info")
- def inlineXML(baseDirectory: File, organization: String, moduleID: String): NodeSeq =
- if(baseDirectory / "info" exists)
- (
+ def inlineXML(addInfo: Boolean, organization: String, moduleID: String, version: String): NodeSeq =
+ if(addInfo)
+ (
ScalaQuery is a type-safe database query API for Scala.
@@ -26,14 +29,13 @@ object InfoTest extends Build
else
- def customInfo = file("info").exists
def checkDownload = (dependencyClasspath in Compile) map { cp => if(cp.isEmpty) error("Dependency not downloaded") }
- def checkInfo = delivered map { d =>
+ def checkInfo = (customInfo, delivered) map { (addInfo, d) =>
if((d \ "info").isEmpty)
error("No info tag generated")
- else if(customInfo)
+ else if(addInfo) {
if( !deliveredWithCustom(d) ) error("Expected 'license' and 'description' tags in info tag, got: \n" + (d \ "info"))
- else
+ } else
if( deliveredWithCustom(d) ) error("Expected empty 'info' tag, got: \n" + (d \ "info"))
}
def deliveredWithCustom(d: NodeSeq) = !(d \ "info" \ "license").isEmpty && !(d \ "info" \ "description").isEmpty
diff --git a/sbt/src/sbt-test/dependency-management/info/test b/sbt/src/sbt-test/dependency-management/info/test
index b6ae3116d..78c6f476f 100644
--- a/sbt/src/sbt-test/dependency-management/info/test
+++ b/sbt/src/sbt-test/dependency-management/info/test
@@ -5,5 +5,7 @@
$ touch info
> reload
+> show custom-info
> check-download
+> show custom-info
> check-info
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject.scala b/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject.scala
deleted file mode 100644
index 1969db32a..000000000
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-import sbt._
-
-class TestProject(info: ProjectInfo) extends ParentProject(info)
-{
- val addRepo = "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
- val sub = project("sub", "Sub Project", new SubProject(_))
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
-
- class SubProject(info: ProjectInfo) extends DefaultProject(info)
- {
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
- override def ivyXML =
-
-
-
- }
-}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject2.scala b/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject2.scala
deleted file mode 100644
index 853ae1f6b..000000000
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject2.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-import sbt._
-
-class TestProject(info: ProjectInfo) extends ParentProject(info)
-{
- val addRepo = "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
- val sub = project("sub", "Sub Project", new SubProject(_))
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
-
- class SubProject(info: ProjectInfo) extends DefaultProject(info)
- {
- val addRepo = "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
-
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
- override def ivyXML =
-
-
-
- }
-}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject3.scala b/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject3.scala
deleted file mode 100644
index a26de6c2b..000000000
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/CorrectProject3.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-import sbt._
-
-class TestProject(info: ProjectInfo) extends ParentProject(info)
-{
- val addRepo = "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
- val sub = project("sub", "Sub Project", new SubProject(_))
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
-
- class SubProject(info: ProjectInfo) extends DefaultProject(info)
- {
- val addRepo = "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
-
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
- override def ivyXML =
-
-
-
- }
-}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/changes/WithRepository.sbt b/sbt/src/sbt-test/dependency-management/inherit-repo/changes/WithRepository.sbt
new file mode 100644
index 000000000..ea9561547
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/inherit-repo/changes/WithRepository.sbt
@@ -0,0 +1 @@
+resolvers += "Extra Test Repository" at "http://dev.camptocamp.com/files/m2_repo/"
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/project/TestProject.scala b/sbt/src/sbt-test/dependency-management/inherit-repo/project/TestProject.scala
new file mode 100644
index 000000000..d3afd28a9
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/inherit-repo/project/TestProject.scala
@@ -0,0 +1,14 @@
+ import sbt._
+ import Keys._
+
+object TestProject extends Build
+{
+ override lazy val settings = super.settings :+
+ ( ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home"))) )
+
+ lazy val projects = Seq(a, b)
+ lazy val a = Project("a", file("a")) delegateTo(b) settings(
+ libraryDependencies += "com.camptocamp.tl.caltar" % "core" % "0.5" intransitive()
+ )
+ lazy val b = Project("b", file("b"))
+}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/project/build.properties b/sbt/src/sbt-test/dependency-management/inherit-repo/project/build.properties
deleted file mode 100644
index e82b3b326..000000000
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/project/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Project properties
-#Wed Apr 29 17:43:40 EDT 2009
-project.organization=sbt
-project.name=Repository Inheritance
-project.version=1.0
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/project/build/src/TestProject.scala b/sbt/src/sbt-test/dependency-management/inherit-repo/project/build/src/TestProject.scala
deleted file mode 100644
index 510c38fe4..000000000
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/project/build/src/TestProject.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-import sbt._
-
-class TestProject(info: ProjectInfo) extends ParentProject(info)
-{
- val sub = project("sub", "Sub Project", new SubProject(_))
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
-
- class SubProject(info: ProjectInfo) extends DefaultProject(info)
- {
- override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
- override def ivyXML =
-
-
-
- }
-}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inherit-repo/test b/sbt/src/sbt-test/dependency-management/inherit-repo/test
index e35eedd79..fc7e05710 100644
--- a/sbt/src/sbt-test/dependency-management/inherit-repo/test
+++ b/sbt/src/sbt-test/dependency-management/inherit-repo/test
@@ -1,21 +1,21 @@
-# This should fail because the sub project declares a dependency that exists in an extra repository, which we haven't declared
+# This should fail because project A declares a dependency that exists in an extra repository, which we haven't declared
-> update
-# Copy the project definition with the extra repository declared in the parent and reload
-$ copy-file changes/CorrectProject.scala project/build/src/TestProject.scala
+# Copy the project definition with the extra repository declared in project B and with A delegating to B and reload
+$ copy-file changes/WithRepository.sbt b/build.sbt
> reload
-# Try updating again, which should work because the repository declared in the parent should be inherited by the child
+# Try updating again, which should work because the repository declared in B should be shared by A
> update
-# Copy the project definition with the extra repository declared in the child and parent and reload
-$ copy-file changes/CorrectProject2.scala project/build/src/TestProject.scala
+# Copy the project definition with the extra repository declared in both A and B and reload
+$ copy-file changes/WithRepository.sbt a/build.sbt
> reload
> update
-# Copy the project definition with the extra repository declared in the child and reload
-$ copy-file changes/CorrectProject3.scala project/build/src/TestProject.scala
+# Copy the project definition with the extra repository declared in A only and reload
+$ delete b/build.sbt
> reload
> update
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inline-dependencies-a/build.sbt b/sbt/src/sbt-test/dependency-management/inline-dependencies-a/build.sbt
new file mode 100644
index 000000000..90f7f53b2
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/inline-dependencies-a/build.sbt
@@ -0,0 +1,10 @@
+libraryDependencies += "org.scalacheck" % "scalacheck" % "1.5"
+
+ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
+
+TaskKey("check") <<= update map { report =>
+ val files = report.matching( moduleFilter(organization = "org.scalacheck", name = "scalacheck", revision = "1.5") )
+ assert(!files.isEmpty, "ScalaCheck module not found in update report")
+ val missing = files.filter(! _.exists)
+ assert(missing.isEmpty, "Reported ScalaCheck artifact files don't exist: " + missing.mkString(", "))
+}
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/inline-dependencies-a/test b/sbt/src/sbt-test/dependency-management/inline-dependencies-a/test
index f63ec9192..8b186b62a 100644
--- a/sbt/src/sbt-test/dependency-management/inline-dependencies-a/test
+++ b/sbt/src/sbt-test/dependency-management/inline-dependencies-a/test
@@ -1,3 +1,5 @@
-> update
+> check
-$ exists lib_managed/compile/scalacheck-1.5.jar
\ No newline at end of file
+> set retrieveManaged := true
+
+> check
\ No newline at end of file
diff --git a/sbt/src/sbt-test/dependency-management/ivy-settings-a/build.sbt b/sbt/src/sbt-test/dependency-management/ivy-settings-a/build.sbt
new file mode 100644
index 000000000..cb0d463d9
--- /dev/null
+++ b/sbt/src/sbt-test/dependency-management/ivy-settings-a/build.sbt
@@ -0,0 +1,11 @@
+ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
+
+seq(externalIvySettings(), externalIvyFile())
+
+TaskKey("check") <<= update map { report =>
+ val files = report.matching( moduleFilter(organization = "org.scalacheck", name = "scalacheck", revision = "1.5") )
+ if(shouldExist)
+ assert(!files.isEmpty, "ScalaCheck module not found in update report")
+ else
+ assert(files.isEmpty, "ScalaCheck module found in update report unexpectedly")
+}
\ No newline at end of file