From 4921be04c8a71f9d01ca1557a65a8da4c42d0d28 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Mon, 20 Jun 2011 15:25:23 -0400 Subject: [PATCH] add ChainedResolver(name: String, resolvers: Seq[Resolver]), closes #63 --- ivy/ConvertResolver.scala | 5 +++-- ivy/Ivy.scala | 10 +++++----- ivy/IvyInterface.scala | 1 + main/actions/CacheIvy.scala | 6 ++++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ivy/ConvertResolver.scala b/ivy/ConvertResolver.scala index eec6a5121..6c479a619 100644 --- a/ivy/ConvertResolver.scala +++ b/ivy/ConvertResolver.scala @@ -6,13 +6,13 @@ package sbt import org.apache.ivy.{core,plugins} import core.module.id.ModuleRevisionId import core.settings.IvySettings -import plugins.resolver.{ChainResolver, DependencyResolver, IBiblioResolver} +import plugins.resolver.{DependencyResolver, IBiblioResolver} import plugins.resolver.{AbstractPatternsBasedResolver, AbstractSshBasedResolver, FileSystemResolver, SFTPResolver, SshResolver, URLResolver} private object ConvertResolver { /** Converts the given sbt resolver into an Ivy resolver..*/ - def apply(r: Resolver)(implicit settings: IvySettings) = + def apply(r: Resolver)(implicit settings: IvySettings, log: Logger) = { r match { @@ -61,6 +61,7 @@ private object ConvertResolver initializePatterns(resolver, repo.patterns) resolver } + case repo: ChainedResolver => IvySbt.resolverChain(repo.name, repo.resolvers, false, settings, log) case repo: RawRepository => repo.resolver } } diff --git a/ivy/Ivy.scala b/ivy/Ivy.scala index 701b8fb1d..cf15bf44a 100644 --- a/ivy/Ivy.scala +++ b/ivy/Ivy.scala @@ -68,7 +68,7 @@ final class IvySbt(val configuration: IvyConfiguration) i.paths.ivyHome foreach is.setDefaultIvyUserDir IvySbt.configureCache(is, i.localOnly) IvySbt.setResolvers(is, i.resolvers, i.otherResolvers, i.localOnly, configuration.log) - IvySbt.setModuleConfigurations(is, i.moduleConfigurations) + IvySbt.setModuleConfigurations(is, i.moduleConfigurations, configuration.log) } is } @@ -205,7 +205,7 @@ private object IvySbt val mainChain = makeChain("Default", "sbt-chain", resolvers) settings.setDefaultResolver(mainChain.getName) } - private def resolverChain(name: String, resolvers: Seq[Resolver], localOnly: Boolean, settings: IvySettings, log: Logger): DependencyResolver = + def resolverChain(name: String, resolvers: Seq[Resolver], localOnly: Boolean, settings: IvySettings, log: Logger): DependencyResolver = { val newDefault = new ChainResolver { // Technically, this should be applied to module configurations. @@ -219,7 +219,7 @@ private object IvySbt newDefault.setCheckmodified(false) for(sbtResolver <- resolvers) { log.debug("\t" + sbtResolver) - newDefault.add(ConvertResolver(sbtResolver)(settings)) + newDefault.add(ConvertResolver(sbtResolver)(settings, log)) } newDefault } @@ -231,7 +231,7 @@ private object IvySbt import collection.JavaConversions._ artifact.getQualifiedExtraAttributes.keys.exists(_.asInstanceOf[String] startsWith "m:") } - private def setModuleConfigurations(settings: IvySettings, moduleConfigurations: Seq[ModuleConfiguration]) + private def setModuleConfigurations(settings: IvySettings, moduleConfigurations: Seq[ModuleConfiguration], log: Logger) { val existing = settings.getResolverNames for(moduleConf <- moduleConfigurations) @@ -240,7 +240,7 @@ private object IvySbt import IvyPatternHelper._ import PatternMatcher._ if(!existing.contains(resolver.name)) - settings.addResolver(ConvertResolver(resolver)(settings)) + settings.addResolver(ConvertResolver(resolver)(settings, log)) val attributes = javaMap(Map(MODULE_KEY -> name, ORGANISATION_KEY -> organization, REVISION_KEY -> revision)) settings.addModuleConfiguration(attributes, settings.getMatcher(EXACT_OR_REGEXP), resolver.name, null, null, null) } diff --git a/ivy/IvyInterface.scala b/ivy/IvyInterface.scala index 3b802fc20..7998b573e 100644 --- a/ivy/IvyInterface.scala +++ b/ivy/IvyInterface.scala @@ -43,6 +43,7 @@ final class RawRepository(val resolver: DependencyResolver) extends Resolver def name = resolver.getName override def toString = "Raw(" + resolver.toString + ")" } +sealed case class ChainedResolver(name: String, resolvers: Seq[Resolver]) extends Resolver sealed case class MavenRepository(name: String, root: String) extends Resolver { override def toString = name + ": " + root diff --git a/main/actions/CacheIvy.scala b/main/actions/CacheIvy.scala index f31d6e61d..8cc88eb82 100644 --- a/main/actions/CacheIvy.scala +++ b/main/actions/CacheIvy.scala @@ -121,12 +121,14 @@ object CacheIvy implicit def sshRToHL = (s: SshRepository) => s.name :+: s.connection :+: s.patterns :+: s.publishPermissions :+: HNil implicit def sftpRToHL = (s: SftpRepository) => s.name :+: s.connection :+: s.patterns :+: HNil implicit def rawRToHL = (r: RawRepository) => r.name :+: r.resolver.getClass.getName :+: HNil + implicit def chainRToHL = (c: ChainedResolver) => c.name :+: c.resolvers :+: HNil implicit def moduleToHL = (m: ModuleID) => m.organization :+: m.name :+: m.revision :+: m.configurations :+: m.isChanging :+: m.isTransitive :+: m.explicitArtifacts :+: m.extraAttributes :+: m.crossVersion :+: HNil } import L3._ - implicit def resolverIC: InputCache[Resolver] = - unionInputCache[Resolver, JavaNet1Repository :+: MavenRepository :+: FileRepository :+: URLRepository :+: SshRepository :+: SftpRepository :+: RawRepository :+: HNil] + implicit lazy val chainedIC: InputCache[ChainedResolver] = InputCache.lzy(wrapIn) + implicit lazy val resolverIC: InputCache[Resolver] = + unionInputCache[Resolver, ChainedResolver :+: JavaNet1Repository :+: MavenRepository :+: FileRepository :+: URLRepository :+: SshRepository :+: SftpRepository :+: RawRepository :+: HNil] implicit def moduleIC: InputCache[ModuleID] = wrapIn implicitly[InputCache[Seq[Configuration]]]