From b1229349366d4c7b1cb4aaec99e988acfb889d80 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Thu, 21 Jul 2011 22:03:56 -0400 Subject: [PATCH] support configuring checksums differently for publish, publish-local, update, and update-sbt-classifiers. fixes #115 --- ivy/IvyActions.scala | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ivy/IvyActions.scala b/ivy/IvyActions.scala index ad0f4cdca..0d62ea547 100644 --- a/ivy/IvyActions.scala +++ b/ivy/IvyActions.scala @@ -19,10 +19,10 @@ import core.report.{ArtifactDownloadReport,ResolveReport} import core.resolve.ResolveOptions import core.retrieve.RetrieveOptions import plugins.parser.m2.{PomModuleDescriptorParser,PomModuleDescriptorWriter} -import plugins.resolver.DependencyResolver +import plugins.resolver.{BasicResolver, DependencyResolver} final class DeliverConfiguration(val deliverIvyPattern: String, val status: String, val configurations: Option[Seq[Configuration]], val logging: UpdateLogging.Value) -final class PublishConfiguration(val ivyFile: Option[File], val resolverName: String, val artifacts: Map[Artifact, File], val logging: UpdateLogging.Value) +final class PublishConfiguration(val ivyFile: Option[File], val resolverName: String, val artifacts: Map[Artifact, File], val checksums: Seq[String], val logging: UpdateLogging.Value) final class UpdateConfiguration(val retrieve: Option[RetrieveConfiguration], val missingOk: Boolean, val logging: UpdateLogging.Value) final class RetrieveConfiguration(val retrieveDirectory: File, val outputPattern: String) @@ -94,9 +94,18 @@ object IvyActions val ivyArtifact = ivyFile map { file => (MDArtifact.newIvyArtifact(md), file) } val is = crossIvyScala(module.moduleSettings) val as = mapArtifacts(md, is, artifacts) ++ ivyArtifact.toList - publish(md, as, resolver, overwrite = true) + withChecksums(resolver, checksums) { publish(md, as, resolver, overwrite = true) } } } + private[this] def withChecksums[T](resolver: DependencyResolver, checksums: Seq[String])(act: => T): T = + resolver match { case br: BasicResolver => withChecksums(br, checksums)(act); case _ => act } + private[this] def withChecksums[T](resolver: BasicResolver, checksums: Seq[String])(act: => T): T = + { + val previous = resolver.getChecksumAlgorithms + resolver.setChecksums(checksums mkString ",") + try { act } + finally { resolver.setChecksums(previous mkString ",") } + } private def crossIvyScala(moduleSettings: ModuleSettings): Option[IvyScala] = moduleSettings match { case i: InlineConfiguration if i.module.crossVersion => i.ivyScala