From 8f88a359223fa079dc7edf35721868bd9d320855 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 22 Jan 2016 01:39:00 -0500 Subject: [PATCH] Adds CompatibilityWarningOptions. Fixes #2347 This addresses 0.13.10 regression, which currently warns users about Maven incompatibility on a private configuration. This adds a config class so the build user can control the level of the warning as well as the target configuration to be monitored. By default, we are only going to look at `Compile` and `Runtime`. --- .../CompatibilityWarning.scala | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/librarymanagement/src/main/scala/sbt/internal/librarymanagement/CompatibilityWarning.scala b/librarymanagement/src/main/scala/sbt/internal/librarymanagement/CompatibilityWarning.scala index 9bd00be7c..c039109d3 100644 --- a/librarymanagement/src/main/scala/sbt/internal/librarymanagement/CompatibilityWarning.scala +++ b/librarymanagement/src/main/scala/sbt/internal/librarymanagement/CompatibilityWarning.scala @@ -1,23 +1,48 @@ package sbt.internal.librarymanagement import sbt.librarymanagement._ -import sbt.util.Logger +import sbt.util.{ Level, Logger } + +import Configurations._ + +final class CompatibilityWarningOptions private[sbt] ( + val configurations: Seq[Configuration], + val level: Level.Value +) + +object CompatibilityWarningOptions { + def default: CompatibilityWarningOptions = + apply(configurations = List(Compile, Runtime), level = Level.Warn) + def apply( + configurations: List[Configuration], + level: Level.Value + ): CompatibilityWarningOptions = + new CompatibilityWarningOptions( + configurations = configurations, + level = level + ) +} private[sbt] object CompatibilityWarning { - def apply(module: IvySbt#Module, mavenStyle: Boolean, log: Logger): Unit = { + def run(config: CompatibilityWarningOptions, module: IvySbt#Module, mavenStyle: Boolean, log: Logger): Unit = { if (mavenStyle) { - processIntransitive(module, log) + processIntransitive(config, module, log) } } - - def processIntransitive(module: IvySbt#Module, log: Logger): Unit = { + def processIntransitive(config: CompatibilityWarningOptions, module: IvySbt#Module, log: Logger): Unit = { + val monitoredConfigsStr: Set[String] = (config.configurations map { _.name }).toSet val directDependencies: Seq[ModuleID] = module.moduleSettings match { case x: InlineConfiguration => x.dependencies case x: InlineConfigurationWithExcludes => x.dependencies case _ => Seq() } + def inMonitoredConfigs(configOpt: Option[String]): Boolean = + configOpt match { + case Some(c) => (c.split(",").toSet intersect monitoredConfigsStr).nonEmpty + case None => monitoredConfigsStr contains "compile" + } directDependencies foreach { m => - if (!m.isTransitive) { + if (!m.isTransitive && inMonitoredConfigs(m.configurations)) { log.warn( s"""Found intransitive dependency ($m) while publishMavenStyle is true, but Maven repositories | do not support intransitive dependencies. Use exclusions instead so transitive dependencies