mirror of https://github.com/sbt/sbt.git
work on dependency management tests
This commit is contained in:
parent
7acfad0234
commit
5806dbaab0
|
|
@ -26,7 +26,7 @@ final class PublishConfiguration(val ivyFile: Option[File], val resolverName: St
|
|||
|
||||
final class UpdateConfiguration(val retrieve: Option[RetrieveConfiguration], val missingOk: Boolean, val logging: UpdateLogging.Value)
|
||||
final class RetrieveConfiguration(val retrieveDirectory: File, val outputPattern: String)
|
||||
final class MakePomConfiguration(val file: File, val configurations: Option[Iterable[Configuration]] = None, val extra: NodeSeq = NodeSeq.Empty, val process: Node => Node = n => n, val filterRepositories: MavenRepository => Boolean = _ => true)
|
||||
final case class MakePomConfiguration(file: File, configurations: Option[Iterable[Configuration]] = None, extra: NodeSeq = NodeSeq.Empty, process: Node => Node = n => n, filterRepositories: MavenRepository => Boolean = _ => true)
|
||||
|
||||
/** Configures logging during an 'update'. `level` determines the amount of other information logged.
|
||||
* `Full` is the default and logs the most.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ object ScalaArtifacts
|
|||
|
||||
import ScalaArtifacts._
|
||||
|
||||
final class IvyScala(val scalaVersion: String, val configurations: Iterable[Configuration], val checkExplicit: Boolean, val filterImplicit: Boolean, val overrideScalaVersion: Boolean)
|
||||
final case class IvyScala(scalaVersion: String, configurations: Iterable[Configuration], checkExplicit: Boolean, filterImplicit: Boolean, overrideScalaVersion: Boolean)
|
||||
{
|
||||
// otherwise, Ivy produces the error: "impossible to get artifacts when data has not been loaded"
|
||||
// which may be related to sbt's custom conflict manager, to IVY-987, or both
|
||||
|
|
|
|||
|
|
@ -606,9 +606,10 @@ object Classpaths
|
|||
/*}
|
||||
f(module.owner.configuration :+: module.moduleSettings :+: config :+: HNil)*/
|
||||
}*/
|
||||
def makePomConfigurationTask(file: File, configurations: Option[Iterable[Configuration]] = None, extra: NodeSeq = NodeSeq.Empty, process: XNode => XNode = n => n, filterRepositories: MavenRepository => Boolean = _ => true) =
|
||||
def makePomConfigurationTask(file: File, configurations: Option[Iterable[Configuration]] = None, extra: NodeSeq = NodeSeq.Empty, process: XNode => XNode = n => n, filterRepositories: MavenRepository => Boolean = defaultRepositoryFilter) =
|
||||
new MakePomConfiguration(file, configurations, extra, process, filterRepositories)
|
||||
|
||||
def defaultRepositoryFilter = (repo: MavenRepository) => !repo.root.startsWith("file:")
|
||||
def getPublishTo(repo: Option[Resolver]): Resolver = repo getOrElse error("Repository for publishing is not specified.")
|
||||
|
||||
def deliverConfig(outputDirectory: File, status: String = "release", logging: UpdateLogging.Value = UpdateLogging.DownloadOnly) =
|
||||
|
|
|
|||
|
|
@ -1,11 +1,6 @@
|
|||
ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
|
||||
|
||||
seq(externalIvySettings(), externalIvyFile())
|
||||
|
||||
TaskKey("check") <<= update map { report =>
|
||||
TaskKey("check") <<= (baseDirectory, update) map { (base, 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")
|
||||
assert(!files.isEmpty, "ScalaCheck module not found in update report")
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
#Project properties
|
||||
#Sun Feb 01 13:49:30 EST 2009
|
||||
project.name=Ivy Settings Test
|
||||
project.version=1.0.0
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class TestProject(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
override def disableCrossPaths = true
|
||||
}
|
||||
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
$ copy-file changes/scalacheck-ivy.xml ivy.xml
|
||||
-> update
|
||||
$ absent lib_managed/default/scalacheck-1.5.jar
|
||||
|
||||
$ copy-file changes/scala-tools-ivysettings.xml ivysettings.xml
|
||||
> update
|
||||
$ exists lib_managed/default/scalacheck-1.5.jar
|
||||
> check
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
externalIvySettings()
|
||||
|
||||
libraryDependencies += "org.scalacheck" % "scalacheck" % "1.5"
|
||||
|
||||
TaskKey("check") <<= (baseDirectory, update) map { (base, report) =>
|
||||
val files = report.matching( moduleFilter(organization = "org.scalacheck", name = "scalacheck", revision = "1.5") )
|
||||
assert(!files.isEmpty, "ScalaCheck module not found in update report")
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
#Project properties
|
||||
#Sun Feb 01 15:33:35 EST 2009
|
||||
project.name=Ivy Settings Test B
|
||||
project.version=1.0.1
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class UpdateTestProject(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
val sc = "org.scalacheck" % "scalacheck" % "1.5"
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
override def disableCrossPaths = true
|
||||
}
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
-> update
|
||||
$ absent lib_managed/compile/scalacheck-1.5.jar
|
||||
|
||||
$ copy-file changes/scala-tools-ivysettings.xml ivysettings.xml
|
||||
> update
|
||||
$ exists lib_managed/compile/scalacheck-1.5.jar
|
||||
> check
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
|
||||
|
||||
resolvers += JavaNet1Repository
|
||||
|
||||
libraryDependencies += "javax.ejb" % "ejb-api" % "3.0"
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
project.name=test
|
||||
project.version=1.0.0
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class TestProject(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
val javaNet = JavaNet1Repository
|
||||
val ejb = "javax.ejb" % "ejb-api" % "3.0"
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
import sbt.{Node =>_,_}
|
||||
import Keys._
|
||||
import scala.xml._
|
||||
|
||||
object MakePomTest extends Build
|
||||
{
|
||||
lazy val projects = Seq(root)
|
||||
lazy val root = Project("root", file(".")) settings(
|
||||
readPom <<= makePom map XML.loadFile,
|
||||
TaskKey("check-pom") <<= checkPom,
|
||||
TaskKey("check-extra") <<= checkExtra,
|
||||
makePomConfiguration ~= { _.copy(extra = <extra-tag/>) }
|
||||
)
|
||||
|
||||
val readPom = TaskKey[Elem]("read-pom")
|
||||
|
||||
val fakeName = "fake"
|
||||
val fakeURL = "http://example.org"
|
||||
val fakeRepo = fakeName at fakeURL
|
||||
def extraTagName = "extra-tag"
|
||||
|
||||
def checkProject(pom: Elem) = if(pom.label != "project") error("Top level element was not 'project': " + pom.label)
|
||||
|
||||
def withRepositories[T](pomXML: Elem)(f: NodeSeq => T) =
|
||||
{
|
||||
val repositoriesElement = pomXML \ "repositories"
|
||||
if(repositoriesElement.size == 1) f(repositoriesElement) else error("'repositories' element not found in generated pom")
|
||||
}
|
||||
|
||||
lazy val checkExtra = readPom map { pomXML =>
|
||||
checkProject(pomXML)
|
||||
val extra = pomXML \ extraTagName
|
||||
if(extra.isEmpty) error("'" + extraTagName + "' not found in generated pom.xml.")
|
||||
}
|
||||
|
||||
lazy val checkPom = (readPom, fullResolvers) map { (pomXML, ivyRepositories) =>
|
||||
checkProject(pomXML)
|
||||
withRepositories(pomXML) { repositoriesElement =>
|
||||
val repositories = repositoriesElement \ "repository"
|
||||
val writtenRepositories = repositories.map(read).distinct
|
||||
val mavenStyleRepositories = ivyRepositories.collect { case x: MavenRepository if x.name != "public" => normalize(x) } distinct;
|
||||
|
||||
lazy val explain = (("Written:" +: writtenRepositories) ++ ("Declared:" +: mavenStyleRepositories)).mkString("\n\t")
|
||||
|
||||
if( writtenRepositories != mavenStyleRepositories )
|
||||
error("Written repositories did not match declared repositories.\n\t" + explain)
|
||||
}
|
||||
}
|
||||
|
||||
def read(repository: Node): MavenRepository =
|
||||
(repository \ "name").text at normalize((repository \ "url").text)
|
||||
|
||||
def normalize(url: String): String =
|
||||
{
|
||||
val base = uri( url ).normalize.toString
|
||||
if(base.endsWith("/")) base else (base + "/")
|
||||
}
|
||||
def normalize(repo: MavenRepository): MavenRepository = new MavenRepository(repo.name, normalize(repo.root))
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
project.name=Make Pom Test
|
||||
project.organization=test
|
||||
project.version=1.0
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
import scala.xml._
|
||||
|
||||
class MakePomTest(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
val fakeName = "fake"
|
||||
val fakeURL = "http://example.org"
|
||||
val fakeRepo = fakeName at fakeURL
|
||||
|
||||
def extraTagName = "extra-tag"
|
||||
override def pomExtra = <extra-tag/>
|
||||
def readPom = XML.loadFile(pomPath.asFile)
|
||||
def checkProject(pom: Elem): Either[String, Elem] = if(pom.label == "project") Right(pom) else Left("Top level element was not 'project': " + pom.label)
|
||||
|
||||
def withPom(f: Elem => Either[String, Unit]) = task {
|
||||
checkProject(readPom).right.flatMap(f).left.toOption
|
||||
}
|
||||
def withRepositories[T](pomXML: Elem)(f: NodeSeq => Either[String, T]) =
|
||||
{
|
||||
val repositoriesElement = pomXML \ "repositories"
|
||||
if(repositoriesElement.size == 1) f(repositoriesElement) else Left("'repositories' element not found in generated pom")
|
||||
}
|
||||
|
||||
|
||||
lazy val checkExtra = withPom { pomXML =>
|
||||
val extra = pomXML \ extraTagName
|
||||
if(extra.isEmpty) Left("'" + extraTagName + "' not found in generated pom.xml.") else Right(())
|
||||
}
|
||||
|
||||
lazy val checkPom = withPom { pomXML =>
|
||||
withRepositories(pomXML) { repositoriesElement =>
|
||||
|
||||
val repositories = repositoriesElement \ "repository"
|
||||
val writtenRepositories = Set() ++ repositories.map(read)
|
||||
val mavenStyleRepositories = Set() ++ ivyRepositories.filter(x => x.isInstanceOf[MavenRepository] && x.name != "public").map(normalize)
|
||||
|
||||
lazy val explain = ("Written:" :: writtenRepositories.toList ::: "Declared:" :: mavenStyleRepositories.toList).mkString("\n\t")
|
||||
|
||||
if( writtenRepositories == mavenStyleRepositories ) Right(())
|
||||
else Left("Written repositories did not match declared repositories.\n\t" + explain)
|
||||
}
|
||||
}
|
||||
|
||||
def read(repository: Node): MavenRepository =
|
||||
(repository \ "name").text at normalize((repository \ "url").text)
|
||||
|
||||
def normalize(url: String): String =
|
||||
{
|
||||
val base = (new java.net.URI( url )).normalize.toString
|
||||
if(base.endsWith("/")) base else (base + "/")
|
||||
}
|
||||
def normalize(repo: Resolver): Resolver = repo match { case mr: MavenRepository => normalize(mr); case _ => repo }
|
||||
def normalize(repo: MavenRepository): MavenRepository = new MavenRepository(repo.name, normalize(repo.root))
|
||||
}
|
||||
|
|
@ -1,7 +1,2 @@
|
|||
-> check-pom
|
||||
-> check-extra
|
||||
|
||||
> make-pom
|
||||
|
||||
> check-pom
|
||||
> check-extra
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots)
|
||||
}
|
||||
|
||||
libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.10.0-20110412.015459-16"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
moduleConfigurations += ModuleConfiguration("org.not-scala-lang", "*", "2.10.0-.*", scalaSnapshots)
|
||||
}
|
||||
|
||||
libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.10.0-20110412.015459-16"
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class Test(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.8.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
val scOnly = ModuleConfiguration("org.not-scala-lang", "*", "2.8.0-.*", scalaSnapshots)
|
||||
|
||||
val uniqueScala = "org.scala-lang" % "scala-compiler" % "2.8.0-20100115.022156-304"
|
||||
val otherDep = "org.scala-tools.sxr" % "sxr_2.7.5" % "0.2.3"
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.10.a-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots)
|
||||
}
|
||||
|
||||
libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.10.0-20110412.015459-16"
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class Test(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.8.a-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
val scOnly = ModuleConfiguration("org.scala-lang", "*", "2.8.0-.*", scalaSnapshots)
|
||||
|
||||
val uniqueScala = "org.scala-lang" % "scala-compiler" % "2.8.0-20100115.022156-304"
|
||||
val otherDep = "org.scala-tools.sxr" % "sxr_2.7.5" % "0.2.3"
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.10.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
moduleConfigurations += ModuleConfiguration("org.scala-lang", "*", "2.10.0-.*", scalaSnapshots)
|
||||
}
|
||||
|
||||
libraryDependencies += "org.scala-lang" % "scala-compiler" % "2.10.0-20110412.015459-17"
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class Test(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.8.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
val scOnly = ModuleConfiguration("org.scala-lang", "*", "2.8.0-.*", scalaSnapshots)
|
||||
|
||||
val uniqueScala = "org.scala-lang" % "scala-compiler" % "2.8.0-20100115.022156-305"
|
||||
val otherDep = "org.scala-tools.sxr" % "sxr_2.7.5" % "0.2.3"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ivyScala ~= { (is: Option[IvyScala]) => is.map(_.copy(checkExplicit = false, overrideScalaVersion = false)) }
|
||||
|
||||
ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
|
||||
|
||||
libraryDependencies += "junit" % "junit" % "4.8"
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
project.name=Test Module Configurations
|
||||
project.version=1.0
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class Test(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
|
||||
def snapshotPattern = "http://scala-tools.org/repo-snapshots/[organization]/[module]/2.8.0-SNAPSHOT/[artifact]-[revision].[ext]"
|
||||
def scalaSnapshots = Resolver.url("Scala Tools Snapshots") artifacts(snapshotPattern) ivys(snapshotPattern) mavenStyle()
|
||||
val scOnly = ModuleConfiguration("org.scala-lang", "*", "2.8.0-.*", scalaSnapshots)
|
||||
|
||||
val uniqueScala = "org.scala-lang" % "scala-compiler" % "2.8.0-20100511.013550-380"
|
||||
val otherDep = "org.scala-tools.sxr" % "sxr_2.7.5" % "0.2.3"
|
||||
|
||||
override def checkExplicitScalaDependencies = false
|
||||
}
|
||||
|
|
@ -1,14 +1,16 @@
|
|||
> update
|
||||
> clean
|
||||
|
||||
$ copy-file changes/WrongOrg.scala project/build/Test.scala
|
||||
$ copy-file changes/WrongOrg.sbt Test.sbt
|
||||
> reload
|
||||
-> update
|
||||
> clean
|
||||
|
||||
$ copy-file changes/WrongVersion.scala project/build/Test.scala
|
||||
$ copy-file changes/WrongVersion.sbt Test.sbt
|
||||
> reload
|
||||
-> update
|
||||
> clean
|
||||
|
||||
$ copy-file changes/WrongPattern.scala project/build/Test.scala
|
||||
$ copy-file changes/WrongPattern.sbt Test.sbt
|
||||
> reload
|
||||
-> update
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
project.name=Publish Test
|
||||
project.version=1.0
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class Test(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
override def ivyCacheDirectory = Some(outputPath / "ivy-cache")
|
||||
|
||||
override def managedStyle = ManagedStyle.Maven
|
||||
def testRepoPath = path("test-repo")
|
||||
val publishTo = Resolver.file("test repo", testRepoPath asFile)
|
||||
|
||||
def srcExt = "-sources.jar"
|
||||
def srcFilter = extFilter(srcExt)
|
||||
def docExt = "-javadoc.jar"
|
||||
def docFilter = extFilter(docExt)
|
||||
def extFilter(ext: String) = "*" + ext
|
||||
|
||||
override def packageDocsJar = defaultJarPath(docExt)
|
||||
override def packageSrcJar= defaultJarPath(srcExt)
|
||||
|
||||
val sourceArtifact = Artifact(artifactID, "src", "jar", "sources")
|
||||
val docsArtifact = Artifact(artifactID, "docs", "jar", Some("javadoc"), Nil, None)
|
||||
override def packageToPublishActions = super.packageToPublishActions ++ Seq(packageDocs, packageSrc)
|
||||
|
||||
lazy val check = task { check0 }
|
||||
|
||||
def check0 = checkPom orElse checkBin orElse checkSource orElse checkDoc
|
||||
def checkPom = exists("pom", "*.pom")
|
||||
def checkDoc = exists("javadoc", docFilter)
|
||||
def checkSource = exists("sources", srcFilter)
|
||||
def checkBin = exists("binary", "*.jar" - (srcFilter | docFilter))
|
||||
def exists(label: String, filter: sbt.NameFilter) =
|
||||
if( (testRepoPath ** filter).get.isEmpty) Some("No " + label + " published") else None
|
||||
}
|
||||
|
|
@ -1 +0,0 @@
|
|||
class TestClass
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
-> check
|
||||
> publish
|
||||
> check
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
import sbt._
|
||||
import Keys._
|
||||
|
||||
object SettingsTest extends Build
|
||||
{
|
||||
lazy val projects = Seq(parent, sub, configgy)
|
||||
lazy val parent: Project = Project("Parent", file(".")) aggregate(sub) settings(
|
||||
externalIvySettings(),
|
||||
ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
|
||||
)
|
||||
lazy val sub: Project = Project("Sub", file("sub"), delegates = parent :: Nil) dependsOn(configgy) aggregate(configgy) settings(
|
||||
externalIvySettings()
|
||||
)
|
||||
lazy val configgy = Project("Configgy", file("configgy"), delegates = sub :: Nil) settings(
|
||||
libraryDependencies += "net.lag" % "configgy" % "1.1"
|
||||
)
|
||||
}
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
-> update
|
||||
> clean-lib
|
||||
> clean
|
||||
$ copy-file changes/ivysettings.xml sub/ivysettings.xml
|
||||
|
||||
> update
|
||||
> clean-lib
|
||||
> clean
|
||||
|
||||
$ delete sub/ivysettings.xml
|
||||
-> update
|
||||
> clean-lib
|
||||
> clean
|
||||
|
||||
$ copy-file changes/ivysettings.xml ivysettings.xml
|
||||
> update
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
import sbt._
|
||||
|
||||
object ParentTest extends Build
|
||||
{
|
||||
lazy val projects = Seq(parent, core, reporters, jfreechart)
|
||||
lazy val parent: Project = Project("Flowmodel", file(".")) aggregate(core, reporters)
|
||||
lazy val core: Project = Project("Flowmodel core", file("core"), delegates = parent :: Nil)
|
||||
lazy val reporters: Project = Project("Extra reporters", file("reporters"), delegates = parent :: Nil) aggregate(jfreechart) dependsOn(jfreechart)
|
||||
lazy val jfreechart: Project = Project("JFreeChart reporters", file("jfreechart"), delegates = reporters :: Nil) dependsOn(core)
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
project.version=1.0
|
||||
project.name=Parent Test
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class FlowmodelProject(info: ProjectInfo) extends ParentProject(info)
|
||||
{
|
||||
lazy val core = project("core", "Flowmodel core")
|
||||
lazy val reporters = project("reporters", "Extra reporters", new Reporters(_))
|
||||
|
||||
class Reporters(info: ProjectInfo) extends ParentProject(info)
|
||||
{
|
||||
lazy val jfreechart = project("jfreechart", "JFreeChart reporters", core)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
import sbt._
|
||||
import Keys._
|
||||
import complete.DefaultParsers._
|
||||
|
||||
object PomRepoTest extends Build
|
||||
{
|
||||
lazy val projects = Seq(root)
|
||||
lazy val root = Project("root", file(".")) settings(
|
||||
resolvers ++= Seq(local, ScalaToolsSnapshots),
|
||||
InputKey("check-pom") <<= InputTask(_ => spaceDelimited("<args>")) { result => (makePom, result, streams) map checkPomRepositories },
|
||||
makePomConfiguration <<= (makePomConfiguration, baseDirectory) { (conf, base) =>
|
||||
conf.copy(filterRepositories = pomIncludeRepository(base, conf.filterRepositories) )
|
||||
},
|
||||
ivyPaths <<= baseDirectory( dir => new IvyPaths(dir, Some(dir / "ivy-home")))
|
||||
)
|
||||
|
||||
val local = "local-maven-repo" at "file://" + (Path.userHome / ".m2" /"repository").absolutePath
|
||||
|
||||
def pomIncludeRepository(base: File, prev: MavenRepository => Boolean) = (r: MavenRepository) =>
|
||||
if(base / "repo.none" exists) false else if(base / "repo.all" exists) true else prev(r)
|
||||
|
||||
def checkPomRepositories(file: File, args: Seq[String], s: TaskStreams)
|
||||
{
|
||||
val repositories = scala.xml.XML.loadFile(file) \\ "repository"
|
||||
val extracted = repositories.map { repo => MavenRepository(repo \ "name" text, repo \ "url" text) }
|
||||
val expected = args.map(GlobFilter.apply)
|
||||
s.log.info("Extracted: " + extracted.mkString("\n\t", "\n\t", "\n"))
|
||||
s.log.info("Expected: " + args.mkString("\n\t", "\n\t", "\n"))
|
||||
extracted.find { e => !expected.exists(_.accept(e.root)) } map { "Repository should not be exported: " + _ } orElse
|
||||
(expected.find { e => !extracted.exists(r => e.accept(r.root)) } map { "Repository should be exported: " + _ } ) foreach error
|
||||
}
|
||||
}
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
project.name=Pom Repository Filter
|
||||
project.version=1.0
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
import sbt._
|
||||
|
||||
class PomRepoTest(info: ProjectInfo) extends DefaultProject(info)
|
||||
{
|
||||
val local = "local-maven-repo" at "file://" + (Path.userHome / ".m2" /"repository").absolutePath
|
||||
val remote = ScalaToolsSnapshots
|
||||
|
||||
override def pomIncludeRepository(r: MavenRepository) =
|
||||
if("repo.none".asFile.exists) false else if("repo.all".asFile.exists) true else super.pomIncludeRepository(r)
|
||||
|
||||
lazy val checkPom =
|
||||
task { args => task { checkPomRepositories(args.toList) } dependsOn(makePom) }
|
||||
|
||||
def checkPomRepositories(args: List[String]): Option[String] =
|
||||
{
|
||||
val repositories = scala.xml.XML.loadFile(pomPath asFile) \\ "repository"
|
||||
val extracted = repositories.map { repo => MavenRepository(repo \ "name" text, repo \ "url" text) }
|
||||
val expected = args.map(GlobFilter.apply)
|
||||
log.info("Extracted: " + extracted.mkString("\n\t", "\n\t", "\n"))
|
||||
log.info("Expected: " + args.mkString("\n\t", "\n\t", "\n"))
|
||||
(extracted.find { e => !expected.exists(_.accept(e.root)) } map { "Repository should not be exported: " + _ }) orElse
|
||||
(expected.find { e => !extracted.exists(r => e.accept(r.root)) } map { "Repository should be exported: " + _ } )
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue