Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace most of SbtCompatibility with sbt-compat #731

Merged
merged 2 commits into from Jan 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
13 changes: 12 additions & 1 deletion build.sbt
Expand Up @@ -235,7 +235,18 @@ lazy val `sbt-shared` = project
.disablePlugins(ScriptedPlugin)
.settings(
plugin,
utest
utest,
// addSbtPlugin("com.dwijnand" % "sbt-compat" % "1.2.0")
libs ++= {
val dependency = "com.dwijnand" % "sbt-compat" % "1.2.0"
val sbtV = (sbtBinaryVersion in pluginCrossBuild).value
val scalaV = (scalaBinaryVersion in update).value
val m = Defaults.sbtPluginExtra(dependency, sbtV, scalaV)
CrossVersion.partialVersion(scalaVersion.value).collect {
case (2, 10) => m
case (2, 12) => m
}.toList
}
)

lazy val `sbt-coursier` = project
Expand Down
3 changes: 2 additions & 1 deletion sbt-coursier/src/main/scala/coursier/CoursierPlugin.scala
@@ -1,6 +1,7 @@
package coursier

import sbt._
import sbt.librarymanagement._
import sbt.{ Configuration, Resolver, _ }
import sbt.Keys._

import SbtCompatibility._
Expand Down
2 changes: 1 addition & 1 deletion sbt-coursier/src/main/scala/coursier/IvyXml.scala
Expand Up @@ -6,7 +6,7 @@ import org.apache.ivy.core.module.id.ModuleRevisionId
import scala.collection.JavaConverters._
import scala.xml.{Node, PrefixedAttribute}

import SbtCompatibility._
import sbt.internal.librarymanagement.IvySbt

object IvyXml {

Expand Down
3 changes: 1 addition & 2 deletions sbt-coursier/src/main/scala/coursier/Keys.scala
Expand Up @@ -4,13 +4,12 @@ import java.io.File
import java.net.URL

import coursier.core.Publication
import sbt.librarymanagement.GetClassifiersModule
import sbt.{Resolver, SettingKey, TaskKey}

import scala.concurrent.duration.Duration
import scalaz.\/

import SbtCompatibility._

object Keys {
val coursierParallelDownloads = SettingKey[Int]("coursier-parallel-downloads")
val coursierMaxIterations = SettingKey[Int]("coursier-max-iterations")
Expand Down
8 changes: 4 additions & 4 deletions sbt-coursier/src/main/scala/coursier/Tasks.scala
Expand Up @@ -10,7 +10,7 @@ import coursier.ivy.{IvyRepository, PropertiesPattern}
import coursier.Keys._
import coursier.Structure._
import coursier.util.Print
import coursier.SbtCompatibility._
import sbt.librarymanagement._
import sbt.{Classpaths, Def, Resolver, UpdateReport}
import sbt.Keys._

Expand Down Expand Up @@ -61,7 +61,7 @@ object Tasks {

def url(res: Resolver): Option[String] =
res match {
case m: SbtCompatibility.MavenRepository =>
case m: sbt.librarymanagement.MavenRepository =>
Some(m.root)
case u: sbt.URLRepository =>
u.patterns.artifactPatterns.headOption
Expand Down Expand Up @@ -351,11 +351,11 @@ object Tasks {
// it puts it in all of them. See for example what happens to
// the standalone JAR artifact of the coursier cli module.
def allConfigsIfEmpty(configs: Iterable[ConfigRef]): Iterable[ConfigRef] =
if (configs.isEmpty) ivyConfs.filter(_.isPublic).map(_.toConfigRef) else configs
if (configs.isEmpty) ivyConfs.filter(_.isPublic).map(c => ConfigRef(c.name)) else configs

val extraSbtArtifactsPublication = for {
artifact <- extraSbtArtifacts
config <- allConfigsIfEmpty(artifact.configurations.map(x => x: ConfigRef))
config <- allConfigsIfEmpty(artifact.configurations.map(x => ConfigRef(x.name)))
// FIXME If some configurations from artifact.configurations are not public, they may leak here :\
} yield config.name -> artifactPublication(artifact)

Expand Down
7 changes: 3 additions & 4 deletions sbt-shading/src/main/scala/coursier/ShadingPlugin.scala
Expand Up @@ -3,11 +3,10 @@ package coursier
import java.io.File

import coursier.ivy.IvyXml.{mappings => ivyXmlMappings}
import sbt.librarymanagement._
import sbt.Keys._
import sbt.{AutoPlugin, Compile, Configuration, SettingKey, TaskKey, inConfig}

import SbtCompatibility._

object ShadingPlugin extends AutoPlugin {

override def trigger = noTrigger
Expand Down Expand Up @@ -104,7 +103,7 @@ object ShadingPlugin extends AutoPlugin {
configuration := baseSbtConfiguration, // wuw
ivyConfigurations := ivyConfigurations.in(baseSbtConfiguration).value
.filter(_.name != Shaded.name)
.map(c => c.withExtendsConfigs(c.extendsConfigs.filter(_.name != Shaded.name))),
.map(c => c.withExtendsConfigs(c.extendsConfigs.toVector.filter(_.name != Shaded.name))),
libraryDependencies := libraryDependencies.in(baseSbtConfiguration).value.filter { dep =>
val isShaded = dep.configurations.exists { mappings =>
ivyXmlMappings(mappings).exists(_._1 == Shaded.name)
Expand Down Expand Up @@ -156,4 +155,4 @@ object ShadingPlugin extends AutoPlugin {
)
)

}
}
141 changes: 0 additions & 141 deletions sbt-shared/src/main/scala-2.10/coursier/SbtCompatibility.scala
@@ -1,147 +1,6 @@
package coursier

import scala.language.implicitConversions

object SbtCompatibility {

final case class ConfigRef(name: String) extends AnyVal
implicit def configRefToString(ref: ConfigRef): String = ref.name

val GetClassifiersModule = sbt.GetClassifiersModule
type GetClassifiersModule = sbt.GetClassifiersModule

object SbtPomExtraProperties {
def POM_INFO_KEY_PREFIX = sbt.mavenint.SbtPomExtraProperties.POM_INFO_KEY_PREFIX
}

type MavenRepository = sbt.MavenRepository

type IvySbt = sbt.IvySbt

implicit class ModuleIDOps(val id: sbt.ModuleID) extends AnyVal {
def withConfigurations(configurations: Option[String]): sbt.ModuleID =
id.copy(configurations = configurations)
def withExtraAttributes(extraAttributes: Map[String, String]): sbt.ModuleID =
id.copy(extraAttributes = extraAttributes)
def withExclusions(exclusions: Seq[sbt.librarymanagement.InclExclRule]): sbt.ModuleID =
exclusions.foldLeft(id)((id0, rule) => id0.exclude(rule.org, rule.name))
def withIsTransitive(isTransitive: Boolean): sbt.ModuleID =
id.copy(isTransitive = isTransitive)
}

implicit class ArtifactOps(val artifact: sbt.Artifact) extends AnyVal {
def withType(`type`: String): sbt.Artifact =
artifact.copy(`type` = `type`)
def withExtension(extension: String): sbt.Artifact =
artifact.copy(extension = extension)
def withClassifier(classifier: Option[String]): sbt.Artifact =
artifact.copy(classifier = classifier)
def withUrl(url: Option[sbt.URL]): sbt.Artifact =
artifact.copy(url = url)
def withExtraAttributes(extraAttributes: Map[String, String]): sbt.Artifact =
artifact.copy(extraAttributes = extraAttributes)
}

implicit def toModuleReportOps(report: sbt.ModuleReport): sbt.ModuleReportOps =
new sbt.ModuleReportOps(report)

implicit class ConfigurationOps(val config: sbt.Configuration) extends AnyVal {
def withExtendsConfigs(extendsConfigs: Vector[sbt.Configuration]): sbt.Configuration =
config.copy(extendsConfigs = extendsConfigs.toList)
def toConfigRef: ConfigRef =
ConfigRef(config.name)
}

implicit def configurationToConfigRef(config: sbt.Configuration): ConfigRef =
config.toConfigRef

implicit class ConfigurationCompanionOps(val companion: sbt.Configuration.type) extends AnyVal {
def of(
id: String,
name: String,
description: String,
isPublic: Boolean,
extendsConfigs: Vector[sbt.Configuration],
transitive: Boolean
): sbt.Configuration =
sbt.Configuration(name, description, isPublic, extendsConfigs.toList, transitive)
}

implicit class CallerCompanionOps(val companion: sbt.Caller.type) extends AnyVal {
def apply(
caller: sbt.ModuleID,
callerConfigurations: Vector[ConfigRef],
callerExtraAttributes: Map[String, String],
isForceDependency: Boolean,
isChangingDependency: Boolean,
isTransitiveDependency: Boolean,
isDirectlyForceDependency: Boolean
): sbt.Caller =
new sbt.Caller(
caller,
callerConfigurations.map(_.name),
callerExtraAttributes,
isForceDependency,
isChangingDependency,
isTransitiveDependency,
isDirectlyForceDependency
)
}

implicit class ConfigurationReportCompanionOps(val companion: sbt.ConfigurationReport.type) extends AnyVal {
def apply(
configuration: String,
modules: Seq[sbt.ModuleReport],
details: Seq[sbt.OrganizationArtifactReport]
): sbt.ConfigurationReport =
new sbt.ConfigurationReport(
configuration,
modules,
details,
Nil
)
}

implicit class UpdateReportCompanionOps(val companion: sbt.UpdateReport.type) extends AnyVal {
def apply(
cachedDescriptor: java.io.File,
configurations: Seq[sbt.ConfigurationReport],
stats: sbt.UpdateStats,
stamps: Map[java.io.File, Long]
): sbt.UpdateReport =
new sbt.UpdateReport(
cachedDescriptor,
configurations,
stats,
stamps
)
}

implicit class UpdateStatsCompanionOps(val companion: sbt.UpdateStats.type) extends AnyVal {
def apply(
resolveTime: Long,
downloadTime: Long,
downloadSize: Long,
cached: Boolean
): sbt.UpdateStats =
new sbt.UpdateStats(
resolveTime,
downloadTime,
downloadSize,
cached
)
}

implicit def configVectorToList(configs: Vector[sbt.Configuration]): List[sbt.Configuration] =
configs.toList
implicit def configListToVector(configs: List[sbt.Configuration]): Vector[sbt.Configuration] =
configs.toVector

implicit class GetClassifiersModuleOps(val module: GetClassifiersModule) extends AnyVal {
def dependencies = module.modules
}

def needsIvyXmlLocal = List(sbt.Keys.deliverLocalConfiguration)
def needsIvyXml = List(sbt.Keys.deliverConfiguration)

}
18 changes: 0 additions & 18 deletions sbt-shared/src/main/scala-2.10/sbt/ModuleReportOps.scala

This file was deleted.

This file was deleted.

40 changes: 8 additions & 32 deletions sbt-shared/src/main/scala-2.12/coursier/SbtCompatibility.scala
@@ -1,43 +1,19 @@
package coursier

object SbtCompatibility {

val ConfigRef = sbt.librarymanagement.ConfigRef
type ConfigRef = sbt.librarymanagement.ConfigRef

val GetClassifiersModule = sbt.librarymanagement.GetClassifiersModule
type GetClassifiersModule = sbt.librarymanagement.GetClassifiersModule

object SbtPomExtraProperties {
def POM_INFO_KEY_PREFIX = sbt.internal.librarymanagement.mavenint.SbtPomExtraProperties.POM_INFO_KEY_PREFIX
}
import sbt._, Keys._

type MavenRepository = sbt.librarymanagement.MavenRepository

type IvySbt = sbt.internal.librarymanagement.IvySbt

lazy val needsIvyXmlLocal = Seq(sbt.Keys.publishLocalConfiguration) ++ {
try {
val cls = sbt.Keys.getClass
val m = cls.getMethod("makeIvyXmlLocalConfiguration")
val task = m.invoke(sbt.Keys).asInstanceOf[sbt.TaskKey[sbt.PublishConfiguration]]
List(task)
} catch {
case _: Throwable => // FIXME Too wide
Nil
}
}
object SbtCompatibility {
lazy val needsIvyXmlLocal = Seq(publishLocalConfiguration) ++ getPubConf("makeIvyXmlLocalConfiguration")
lazy val needsIvyXml = Seq(publishConfiguration) ++ getPubConf("makeIvyXmlConfiguration")

lazy val needsIvyXml = Seq(sbt.Keys.publishConfiguration) ++ {
private[this] def getPubConf(method: String) =
try {
val cls = sbt.Keys.getClass
val m = cls.getMethod("makeIvyXmlConfiguration")
val task = m.invoke(sbt.Keys).asInstanceOf[sbt.TaskKey[sbt.PublishConfiguration]]
val cls = Keys.getClass
val m = cls.getMethod(method)
val task = m.invoke(Keys).asInstanceOf[TaskKey[PublishConfiguration]]
List(task)
} catch {
case _: Throwable => // FIXME Too wide
Nil
}
}

}
6 changes: 3 additions & 3 deletions sbt-shared/src/main/scala/coursier/FromSbt.scala
Expand Up @@ -5,12 +5,12 @@ import coursier.ivy.IvyXml.{mappings => ivyXmlMappings}
import java.net.{MalformedURLException, URL}

import coursier.core.Authentication
import sbt.internal.librarymanagement.mavenint.SbtPomExtraProperties
import sbt.librarymanagement._
import sbt.{CrossVersion, ModuleID, Resolver}

import scalaz.{-\/, \/-}

import SbtCompatibility._

object FromSbt {

def sbtModuleIdName(
Expand Down Expand Up @@ -206,7 +206,7 @@ object FromSbt {
authentication: Option[Authentication]
): Option[Repository] =
resolver match {
case r: SbtCompatibility.MavenRepository =>
case r: sbt.librarymanagement.MavenRepository =>
mavenRepositoryOpt(r.root, log, authentication)

case r: sbt.FileRepository
Expand Down
2 changes: 1 addition & 1 deletion sbt-shared/src/main/scala/coursier/ToSbt.scala
Expand Up @@ -4,8 +4,8 @@ import java.io.File
import java.util.GregorianCalendar
import java.util.concurrent.ConcurrentHashMap

import sbt.librarymanagement._
import coursier.maven.MavenSource
import SbtCompatibility._

object ToSbt {

Expand Down