From 40e5f7538ae22b241ebb0826da387054654035c9 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 12 Dec 2014 17:46:19 -0500 Subject: [PATCH] Fixes #1615. Move the invocation of eviction warning. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This moves the invocation of eviction warning so it’s called only when actual ivy update is being performed. --- ivy/src/main/scala/sbt/EvictionWarning.scala | 2 ++ main/src/main/scala/sbt/Defaults.scala | 22 ++++++++++++-------- notes/0.13.8/eviction-warning-fix.markdown | 13 ++++++++++++ 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 notes/0.13.8/eviction-warning-fix.markdown diff --git a/ivy/src/main/scala/sbt/EvictionWarning.scala b/ivy/src/main/scala/sbt/EvictionWarning.scala index 7279b77da..38d626a86 100644 --- a/ivy/src/main/scala/sbt/EvictionWarning.scala +++ b/ivy/src/main/scala/sbt/EvictionWarning.scala @@ -41,6 +41,8 @@ final class EvictionWarningOptions private[sbt] ( } object EvictionWarningOptions { + def empty: EvictionWarningOptions = + new EvictionWarningOptions(Vector(), false, false, false, false, defaultGuess) def default: EvictionWarningOptions = new EvictionWarningOptions(Vector(Compile), true, true, false, false, defaultGuess) def full: EvictionWarningOptions = diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index b6de92e84..461b9b21a 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1151,13 +1151,9 @@ object Classpaths { unresolvedWarningConfiguration in update := UnresolvedWarningConfiguration(dependencyPositions.value), update <<= updateTask tag (Tags.Update, Tags.Network), update := { - import ShowLines._ val report = update.value val log = streams.value.log ConflictWarning(conflictWarning.value, report, log) - val ewo = (evictionWarningOptions in update).value - val ew = EvictionWarning(ivyModule.value, ewo, report, log) - ew.lines foreach { log.warn(_) } report }, evictionWarningOptions in evicted := EvictionWarningOptions.full, @@ -1337,33 +1333,41 @@ object Classpaths { case Some(x) if uc0.logging == Default => uc0.copy(logging = DownloadOnly) case _ => uc0 } + val ewo = + if (executionRoots.value exists { _.key == evicted.key }) EvictionWarningOptions.empty + else (evictionWarningOptions in update).value cachedUpdate(s.cacheDirectory / updateCacheName.value, show, ivyModule.value, uc, transform, skip = (skip in update).value, force = isRoot, depsUpdated = depsUpdated, - uwConfig = uwConfig, logicalClock = logicalClock, depDir = Some(depDir), log = s.log) + uwConfig = uwConfig, logicalClock = logicalClock, depDir = Some(depDir), + ewo = ewo, log = s.log) } @deprecated("Use cachedUpdate with the variant that takes unresolvedHandler instead.", "0.13.6") def cachedUpdate(cacheFile: File, label: String, module: IvySbt#Module, config: UpdateConfiguration, transform: UpdateReport => UpdateReport, skip: Boolean, force: Boolean, depsUpdated: Boolean, log: Logger): UpdateReport = cachedUpdate(cacheFile, label, module, config, transform, skip, force, depsUpdated, - UnresolvedWarningConfiguration(), LogicalClock.unknown, None, log) + UnresolvedWarningConfiguration(), LogicalClock.unknown, None, EvictionWarningOptions.empty, log) private[sbt] def cachedUpdate(cacheFile: File, label: String, module: IvySbt#Module, config: UpdateConfiguration, transform: UpdateReport => UpdateReport, skip: Boolean, force: Boolean, depsUpdated: Boolean, - uwConfig: UnresolvedWarningConfiguration, logicalClock: LogicalClock, depDir: Option[File], log: Logger): UpdateReport = + uwConfig: UnresolvedWarningConfiguration, logicalClock: LogicalClock, depDir: Option[File], + ewo: EvictionWarningOptions, log: Logger): UpdateReport = { implicit val updateCache = updateIC type In = IvyConfiguration :+: ModuleSettings :+: UpdateConfiguration :+: HNil def work = (_: In) match { case conf :+: settings :+: config :+: HNil => + import ShowLines._ log.info("Updating " + label + "...") val r = IvyActions.updateEither(module, config, uwConfig, logicalClock, depDir, log) match { case Right(ur) => ur case Left(uw) => - import ShowLines._ uw.lines foreach { log.warn(_) } throw uw.resolveException } log.info("Done updating.") - transform(r) + val result = transform(r) + val ew = EvictionWarning(module, ewo, result, log) + ew.lines foreach { log.warn(_) } + result } def uptodate(inChanged: Boolean, out: UpdateReport): Boolean = !force && diff --git a/notes/0.13.8/eviction-warning-fix.markdown b/notes/0.13.8/eviction-warning-fix.markdown new file mode 100644 index 000000000..ee54e80a8 --- /dev/null +++ b/notes/0.13.8/eviction-warning-fix.markdown @@ -0,0 +1,13 @@ + [@cunei]: https://github.com/cunei + [@eed3si9n]: https://github.com/eed3si9n + [@gkossakowski]: https://github.com/gkossakowski + [@jsuereth]: https://github.com/jsuereth + [1615]: https://github.com/sbt/sbt/issues/1615 + +### Fixes with compatibility implications + +### Improvements + +### Bug fixes + +- Fixes eviction warning being too noisy. [#1615][1615] by [@eed3si9n][@eed3si9n]