diff --git a/ivy/IvyActions.scala b/ivy/IvyActions.scala index c937f252f..e478df5eb 100644 --- a/ivy/IvyActions.scala +++ b/ivy/IvyActions.scala @@ -4,7 +4,7 @@ package sbt import java.io.File -import scala.xml.NodeSeq +import scala.xml.{Node,NodeSeq} import org.apache.ivy.{core, plugins, util, Ivy} import core.cache.DefaultRepositoryCacheManager @@ -20,6 +20,13 @@ import core.retrieve.RetrieveOptions import plugins.parser.m2.{PomModuleDescriptorParser,PomModuleDescriptorWriter} final class UpdateConfiguration(val retrieveDirectory: File, val outputPattern: String, val synchronize: Boolean, val quiet: Boolean) extends NotNull +final class MakePomConfiguration(val extraDependencies: Iterable[ModuleID], val configurations: Option[Iterable[Configuration]], + val extra: NodeSeq, val process: Node => Node, val filterRepositories: MavenRepository => Boolean) extends NotNull +object MakePomConfiguration +{ + def apply(extraDependencies: Iterable[ModuleID], configurations: Option[Iterable[Configuration]], extra: NodeSeq) = + new MakePomConfiguration(extraDependencies, configurations, extra, identity, _ => true) +} object IvyActions { @@ -45,11 +52,14 @@ object IvyActions } /** Creates a Maven pom from the given Ivy configuration*/ - def makePom(module: IvySbt#Module, extraDependencies: Iterable[ModuleID], configurations: Option[Iterable[Configuration]], extra: NodeSeq, output: File) + @deprecated def makePom(module: IvySbt#Module, extraDependencies: Iterable[ModuleID], configurations: Option[Iterable[Configuration]], extra: NodeSeq, output: File): Unit = + makePom(module, MakePomConfiguration(extraDependencies, configurations, extra), output) + def makePom(module: IvySbt#Module, configuration: MakePomConfiguration, output: File) { + import configuration.{configurations, extra, extraDependencies, filterRepositories, process} module.withModule { (ivy, md, default) => addLateDependencies(ivy, md, default, extraDependencies) - (new MakePom).write(ivy, md, configurations, extra, output) + (new MakePom).write(ivy, md, configurations, extra, process, filterRepositories, output) module.logger.info("Wrote " + output.getAbsolutePath) } } diff --git a/ivy/IvyConfigurations.scala b/ivy/IvyConfigurations.scala index 7f8ed9f3a..7b57364cd 100644 --- a/ivy/IvyConfigurations.scala +++ b/ivy/IvyConfigurations.scala @@ -4,7 +4,7 @@ package sbt import java.io.File -import scala.xml.NodeSeq +import scala.xml.{Node, NodeSeq} final class IvyPaths(val baseDirectory: File, val cacheDirectory: Option[File]) extends NotNull { diff --git a/ivy/MakePom.scala b/ivy/MakePom.scala index 0670ae853..d6a392fc8 100644 --- a/ivy/MakePom.scala +++ b/ivy/MakePom.scala @@ -20,8 +20,8 @@ import plugins.resolver.{ChainResolver, DependencyResolver, IBiblioResolver} class MakePom { def encoding = "UTF-8" - def write(ivy: Ivy, module: ModuleDescriptor, configurations: Option[Iterable[Configuration]], extra: NodeSeq, output: File): Unit = - write(toPom(ivy, module, configurations, extra), output) + def write(ivy: Ivy, module: ModuleDescriptor, configurations: Option[Iterable[Configuration]], extra: NodeSeq, process: Node => Node, filterRepositories: MavenRepository => Boolean, output: File): Unit = + write(process(toPom(ivy, module, configurations, extra, filterRepositories)), output) def write(node: Node, output: File): Unit = write(toString(node), output) def write(xmlString: String, output: File) { @@ -37,13 +37,13 @@ class MakePom } def toString(node: Node): String = new PrettyPrinter(1000, 4).format(node) - def toPom(ivy: Ivy, module: ModuleDescriptor, configurations: Option[Iterable[Configuration]], extra: NodeSeq): Node = + def toPom(ivy: Ivy, module: ModuleDescriptor, configurations: Option[Iterable[Configuration]], extra: NodeSeq, filterRepositories: MavenRepository => Boolean): Node = ( 4.0.0 { makeModuleID(module) } { extra } { makeDependencies(module, configurations) } - { makeRepositories(ivy.getSettings) } + { makeRepositories(ivy.getSettings, filterRepositories) } ) def makeModuleID(module: ModuleDescriptor): NodeSeq = @@ -125,16 +125,17 @@ class MakePom def isOptional(confs: Array[String]) = confs.isEmpty || (confs.length == 1 && confs(0) == Configurations.Optional.name) - def makeRepositories(settings: IvySettings) = + def makeRepositories(settings: IvySettings, filterRepositories: MavenRepository => Boolean) = { class MavenRepo(name: String, snapshots: Boolean, releases: Boolean) val repositories = resolvers(settings.getDefaultResolver) val mavenRepositories = repositories.flatMap { - case m: IBiblioResolver if m.isM2compatible && m.getRoot != IBiblioResolver.DEFAULT_M2_ROOT => m :: Nil + case m: IBiblioResolver if m.isM2compatible && m.getRoot != IBiblioResolver.DEFAULT_M2_ROOT => + MavenRepository(m.getName, m.getRoot) :: Nil case _ => Nil } - val repositoryElements = mavenRepositories.map { repo => mavenRepository(repo.getName, repo.getRoot) } + val repositoryElements = mavenRepositories.filter(filterRepositories).map(mavenRepository) if(repositoryElements.isEmpty) repositoryElements else {repositoryElements} } def flatten(rs: Seq[DependencyResolver]): Seq[DependencyResolver] = if(rs eq null) Nil else rs.flatMap(resolvers) @@ -148,8 +149,8 @@ class MakePom def toID(name: String) = checkID(name.filter(isValidIDCharacter).mkString, name) def isValidIDCharacter(c: Char) = c.isLetterOrDigit private def checkID(id: String, name: String) = if(id.isEmpty) error("Could not convert '" + name + "' to an ID") else id - def mavenRepository(name: String, root: String): Node = - mavenRepository(toID(name), name, root) + def mavenRepository(repo: MavenRepository): Node = + mavenRepository(toID(repo.name), repo.name, repo.root) def mavenRepository(id: String, name: String, root: String): Node = {id}