Merge pull request #7 from alexarchambault/develop

Add sbt-lm-coursier plugin
This commit is contained in:
Alexandre Archambault 2018-11-20 14:13:48 +01:00 committed by GitHub
commit a554ec4f06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
143 changed files with 1337 additions and 406 deletions

View File

@ -16,6 +16,7 @@ jobs:
- env: SBT_COURSIER=1 SBT_COURSIER_TEST_GROUP=2
- env: SBT_SHADING=1
- env: SBT_PGP_COURSIER=1
- env: LM_COURSIER=1
- stage: release
script: sbt ci-release
branches:

View File

@ -24,7 +24,7 @@ environment:
build_script:
- ps: Start-Job -filepath .\metadata\scripts\start-it-auth-server.ps1 -ArgumentList $pwd\metadata, $env:TEST_REPOSITORY_HOST, $env:TEST_REPOSITORY_PORT, $env:TEST_REPOSITORY_USER, $env:TEST_REPOSITORY_PASSWORD
test_script:
- sbt ++2.12.7 sbt-coursier/scripted sbt-shading/scripted
- sbt ++2.12.7 "sbt-lm-coursier/scripted shared-1/*" "sbt-lm-coursier/scripted shared-2/*" sbt-coursier/scripted sbt-shading/scripted
branches:
only:
- master

View File

@ -19,16 +19,43 @@ val coursierVersion = "1.1.0-M8"
lazy val `lm-coursier` = project
.in(file("modules/lm-coursier"))
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
.settings(
shared,
libraryDependencies ++= Seq(
"io.get-coursier" %% "coursier" % coursierVersion,
"io.get-coursier" %% "coursier-cache" % coursierVersion,
"io.get-coursier" %% "coursier-extra" % coursierVersion,
"org.scala-sbt" %% "librarymanagement-core" % "1.0.2"
)
// We depend on librarymanagement-ivy rather than just
// librarymanagement-core to handle the ModuleDescriptor passed
// to DependencyResolutionInterface.update, which is an
// IvySbt#Module (seems DependencyResolutionInterface.moduleDescriptor
// is ignored).
"org.scala-sbt" %% "librarymanagement-ivy" % "1.0.2",
"org.scalatest" %% "scalatest" % "3.0.5" % Test
),
managedSourceDirectories in Compile +=
baseDirectory.value / "src" / "main" / "contraband-scala",
sourceManaged in (Compile, generateContrabands) := baseDirectory.value / "src" / "main" / "contraband-scala",
contrabandFormatsForType in generateContrabands in Compile := DatatypeConfig.getFormats
)
lazy val `sbt-lm-coursier` = project
.in(file("modules/sbt-lm-coursier"))
.enablePlugins(ScriptedPlugin)
.dependsOn(`lm-coursier`)
.settings(
plugin,
sbtTestDirectory := sbtTestDirectory.in(`sbt-coursier`).value,
scriptedDependencies := {
scriptedDependencies.value
// TODO Get those automatically
// (but shouldn't scripted itself handle that…?)
publishLocal.in(`lm-coursier`).value
}
)
lazy val `sbt-coursier` = project
.in(file("modules/sbt-coursier"))
.enablePlugins(ScriptedPlugin)
@ -93,6 +120,7 @@ lazy val `sbt-coursier-root` = project
.aggregate(
`lm-coursier`,
`sbt-coursier`,
`sbt-lm-coursier`,
`sbt-pgp-coursier`,
`sbt-shading`
)

View File

@ -0,0 +1,75 @@
/**
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
*/
// DO NOT EDIT MANUALLY
package coursier.lmcoursier
final class CoursierConfiguration private (
val log: Option[xsbti.Logger],
val resolvers: Vector[sbt.librarymanagement.Resolver],
val otherResolvers: Vector[sbt.librarymanagement.Resolver],
val reorderResolvers: Boolean,
val parallelDownloads: Int,
val maxIterations: Int,
val sbtScalaOrganization: Option[String],
val sbtScalaVersion: Option[String],
val sbtScalaJars: Vector[java.io.File]) extends Serializable {
private def this() = this(None, sbt.librarymanagement.Resolver.defaults, Vector.empty, true, 6, 100, None, None, Vector.empty)
override def equals(o: Any): Boolean = o match {
case x: CoursierConfiguration => (this.log == x.log) && (this.resolvers == x.resolvers) && (this.otherResolvers == x.otherResolvers) && (this.reorderResolvers == x.reorderResolvers) && (this.parallelDownloads == x.parallelDownloads) && (this.maxIterations == x.maxIterations) && (this.sbtScalaOrganization == x.sbtScalaOrganization) && (this.sbtScalaVersion == x.sbtScalaVersion) && (this.sbtScalaJars == x.sbtScalaJars)
case _ => false
}
override def hashCode: Int = {
37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (37 * (17 + "coursier.lmcoursier.CoursierConfiguration".##) + log.##) + resolvers.##) + otherResolvers.##) + reorderResolvers.##) + parallelDownloads.##) + maxIterations.##) + sbtScalaOrganization.##) + sbtScalaVersion.##) + sbtScalaJars.##)
}
override def toString: String = {
"CoursierConfiguration(" + log + ", " + resolvers + ", " + otherResolvers + ", " + reorderResolvers + ", " + parallelDownloads + ", " + maxIterations + ", " + sbtScalaOrganization + ", " + sbtScalaVersion + ", " + sbtScalaJars + ")"
}
private[this] def copy(log: Option[xsbti.Logger] = log, resolvers: Vector[sbt.librarymanagement.Resolver] = resolvers, otherResolvers: Vector[sbt.librarymanagement.Resolver] = otherResolvers, reorderResolvers: Boolean = reorderResolvers, parallelDownloads: Int = parallelDownloads, maxIterations: Int = maxIterations, sbtScalaOrganization: Option[String] = sbtScalaOrganization, sbtScalaVersion: Option[String] = sbtScalaVersion, sbtScalaJars: Vector[java.io.File] = sbtScalaJars): CoursierConfiguration = {
new CoursierConfiguration(log, resolvers, otherResolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars)
}
def withLog(log: Option[xsbti.Logger]): CoursierConfiguration = {
copy(log = log)
}
def withLog(log: xsbti.Logger): CoursierConfiguration = {
copy(log = Option(log))
}
def withResolvers(resolvers: Vector[sbt.librarymanagement.Resolver]): CoursierConfiguration = {
copy(resolvers = resolvers)
}
def withOtherResolvers(otherResolvers: Vector[sbt.librarymanagement.Resolver]): CoursierConfiguration = {
copy(otherResolvers = otherResolvers)
}
def withReorderResolvers(reorderResolvers: Boolean): CoursierConfiguration = {
copy(reorderResolvers = reorderResolvers)
}
def withParallelDownloads(parallelDownloads: Int): CoursierConfiguration = {
copy(parallelDownloads = parallelDownloads)
}
def withMaxIterations(maxIterations: Int): CoursierConfiguration = {
copy(maxIterations = maxIterations)
}
def withSbtScalaOrganization(sbtScalaOrganization: Option[String]): CoursierConfiguration = {
copy(sbtScalaOrganization = sbtScalaOrganization)
}
def withSbtScalaOrganization(sbtScalaOrganization: String): CoursierConfiguration = {
copy(sbtScalaOrganization = Option(sbtScalaOrganization))
}
def withSbtScalaVersion(sbtScalaVersion: Option[String]): CoursierConfiguration = {
copy(sbtScalaVersion = sbtScalaVersion)
}
def withSbtScalaVersion(sbtScalaVersion: String): CoursierConfiguration = {
copy(sbtScalaVersion = Option(sbtScalaVersion))
}
def withSbtScalaJars(sbtScalaJars: Vector[java.io.File]): CoursierConfiguration = {
copy(sbtScalaJars = sbtScalaJars)
}
}
object CoursierConfiguration {
def apply(): CoursierConfiguration = new CoursierConfiguration()
def apply(log: Option[xsbti.Logger], resolvers: Vector[sbt.librarymanagement.Resolver], otherResolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: Option[String], sbtScalaVersion: Option[String], sbtScalaJars: Vector[java.io.File]): CoursierConfiguration = new CoursierConfiguration(log, resolvers, otherResolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars)
def apply(log: xsbti.Logger, resolvers: Vector[sbt.librarymanagement.Resolver], otherResolvers: Vector[sbt.librarymanagement.Resolver], reorderResolvers: Boolean, parallelDownloads: Int, maxIterations: Int, sbtScalaOrganization: String, sbtScalaVersion: String, sbtScalaJars: Vector[java.io.File]): CoursierConfiguration = new CoursierConfiguration(Option(log), resolvers, otherResolvers, reorderResolvers, parallelDownloads, maxIterations, Option(sbtScalaOrganization), Option(sbtScalaVersion), sbtScalaJars)
}

View File

@ -0,0 +1,43 @@
/**
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
*/
// DO NOT EDIT MANUALLY
package coursier.lmcoursier
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
trait CoursierConfigurationFormats { self: sbt.internal.librarymanagement.formats.LoggerFormat with sbt.librarymanagement.ResolverFormats with sjsonnew.BasicJsonProtocol =>
implicit lazy val CoursierConfigurationFormat: JsonFormat[coursier.lmcoursier.CoursierConfiguration] = new JsonFormat[coursier.lmcoursier.CoursierConfiguration] {
override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): coursier.lmcoursier.CoursierConfiguration = {
jsOpt match {
case Some(js) =>
unbuilder.beginObject(js)
val log = unbuilder.readField[Option[xsbti.Logger]]("log")
val resolvers = unbuilder.readField[Vector[sbt.librarymanagement.Resolver]]("resolvers")
val otherResolvers = unbuilder.readField[Vector[sbt.librarymanagement.Resolver]]("otherResolvers")
val reorderResolvers = unbuilder.readField[Boolean]("reorderResolvers")
val parallelDownloads = unbuilder.readField[Int]("parallelDownloads")
val maxIterations = unbuilder.readField[Int]("maxIterations")
val sbtScalaOrganization = unbuilder.readField[Option[String]]("sbtScalaOrganization")
val sbtScalaVersion = unbuilder.readField[Option[String]]("sbtScalaVersion")
val sbtScalaJars = unbuilder.readField[Vector[java.io.File]]("sbtScalaJars")
unbuilder.endObject()
coursier.lmcoursier.CoursierConfiguration(log, resolvers, otherResolvers, reorderResolvers, parallelDownloads, maxIterations, sbtScalaOrganization, sbtScalaVersion, sbtScalaJars)
case None =>
deserializationError("Expected JsObject but found None")
}
}
override def write[J](obj: coursier.lmcoursier.CoursierConfiguration, builder: Builder[J]): Unit = {
builder.beginObject()
builder.addField("log", obj.log)
builder.addField("resolvers", obj.resolvers)
builder.addField("otherResolvers", obj.otherResolvers)
builder.addField("reorderResolvers", obj.reorderResolvers)
builder.addField("parallelDownloads", obj.parallelDownloads)
builder.addField("maxIterations", obj.maxIterations)
builder.addField("sbtScalaOrganization", obj.sbtScalaOrganization)
builder.addField("sbtScalaVersion", obj.sbtScalaVersion)
builder.addField("sbtScalaJars", obj.sbtScalaJars)
builder.endObject()
}
}
}

View File

@ -0,0 +1,67 @@
{
"codecNamespace": "coursier.lmcoursier",
"types": [
{
"name": "CoursierConfiguration",
"namespace": "coursier.lmcoursier",
"target": "Scala",
"type": "record",
"fields": [
{
"name": "log",
"type": "xsbti.Logger?",
"default": "None",
"since": "0.0.1"
},
{
"name": "resolvers",
"type": "sbt.librarymanagement.Resolver*",
"default": "sbt.librarymanagement.Resolver.defaults",
"since": "0.0.1"
},
{
"name": "otherResolvers",
"type": "sbt.librarymanagement.Resolver*",
"default": "Vector.empty",
"since": "0.0.1"
},
{
"name": "reorderResolvers",
"type": "Boolean",
"default": "true",
"since": "0.0.1"
},
{
"name": "parallelDownloads",
"type": "Int",
"default": "6",
"since": "0.0.1"
},
{
"name": "maxIterations",
"type": "Int",
"default": "100",
"since": "0.0.1"
},
{
"name": "sbtScalaOrganization",
"type": "String?",
"default": "None",
"since": "0.0.1"
},
{
"name": "sbtScalaVersion",
"type": "String?",
"default": "None",
"since": "0.0.1"
},
{
"name": "sbtScalaJars",
"type": "java.io.File*",
"default": "Vector.empty",
"since": "0.0.1"
}
]
}
]
}

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File
import java.util.concurrent.ExecutorService

View File

@ -0,0 +1,208 @@
package coursier.lmcoursier
import java.io.{File, OutputStreamWriter}
import _root_.coursier.{Artifact, Cache, CachePolicy, FileError, Organization, Project, Resolution, TermDisplay, organizationString}
import _root_.coursier.core.Configuration
import _root_.coursier.ivy.IvyRepository
import sbt.internal.librarymanagement.IvySbt
import sbt.librarymanagement._
import sbt.util.Logger
class CoursierDependencyResolution(conf: CoursierConfiguration) extends DependencyResolutionInterface {
private def sbtBinaryVersion = "1.0"
lazy val resolvers =
if (conf.reorderResolvers)
ResolutionParams.reorderResolvers(conf.resolvers)
else
conf.resolvers
def moduleDescriptor(moduleSetting: ModuleDescriptorConfiguration): CoursierModuleDescriptor =
CoursierModuleDescriptor(moduleSetting, conf)
def update(
module: ModuleDescriptor,
configuration: UpdateConfiguration,
uwconfig: UnresolvedWarningConfiguration,
log: Logger
): Either[UnresolvedWarning, UpdateReport] = {
// TODO Take stuff in configuration into account? uwconfig too?
val module0 = module match {
case c: CoursierModuleDescriptor =>
// seems not to happen, not sure what DependencyResolutionInterface.moduleDescriptor is for
c.descriptor
case i: IvySbt#Module =>
i.moduleSettings match {
case d: ModuleDescriptorConfiguration => d
case other => sys.error(s"unrecognized module settings: $other")
}
case _ =>
sys.error(s"unrecognized ModuleDescriptor type: $module")
}
val so = module0.scalaModuleInfo.fold(org"org.scala-lang")(m => Organization(m.scalaOrganization))
val sv = module0.scalaModuleInfo.map(_.scalaFullVersion)
// FIXME Manage to do stuff below without a scala version?
.getOrElse(scala.util.Properties.versionNumberString)
val sbv = module0.scalaModuleInfo.map(_.scalaBinaryVersion).getOrElse {
sv.split('.').take(2).mkString(".")
}
val verbosityLevel = 0
val ttl = Cache.defaultTtl
val createLogger = { () =>
new TermDisplay(new OutputStreamWriter(System.err), fallbackMode = true)
}
val cache = Cache.default
val cachePolicies = CachePolicy.default
val checksums = Cache.defaultChecksums
val projectName = "" // used for logging only
val ivyProperties = ResolutionParams.defaultIvyProperties()
val mainRepositories = resolvers
.flatMap { resolver =>
FromSbt.repository(
resolver,
ivyProperties,
log,
None // FIXME What about authentication?
)
}
val globalPluginsRepos =
for (p <- ResolutionParams.globalPluginPatterns(sbtBinaryVersion))
yield IvyRepository.fromPattern(
p,
withChecksums = false,
withSignatures = false,
withArtifacts = false
)
val interProjectDependencies: Seq[Project] = Nil // TODO Don't use Nil here
val interProjectRepo = InterProjectRepository(interProjectDependencies)
val internalRepositories = globalPluginsRepos :+ interProjectRepo
val dependencies = module0.dependencies.flatMap { d =>
// crossVersion already taken into account, wiping it here
val d0 = d.withCrossVersion(CrossVersion.Disabled())
FromSbt.dependencies(d0, sv, sbv)
}
val configGraphs = Inputs.ivyGraphs(
Inputs.configExtends(module0.configurations)
)
val resolutionParams = ResolutionParams(
dependencies = dependencies,
fallbackDependencies = Nil,
configGraphs = configGraphs,
autoScalaLib = true,
mainRepositories = mainRepositories,
parentProjectCache = Map.empty,
interProjectDependencies = interProjectDependencies,
internalRepositories = internalRepositories,
userEnabledProfiles = Set.empty,
userForceVersions = Map.empty,
typelevel = false,
so = so,
sv = sv,
sbtClassifiers = false,
parallelDownloads = conf.parallelDownloads,
projectName = projectName,
maxIterations = conf.maxIterations,
createLogger = createLogger,
cache = cache,
cachePolicies = cachePolicies,
ttl = ttl,
checksums = checksums
)
def artifactsParams(resolutions: Map[Set[Configuration], Resolution]) =
ArtifactsParams(
classifiers = None,
res = resolutions.values.toSeq,
includeSignatures = false,
parallelDownloads = conf.parallelDownloads,
createLogger = createLogger,
cache = cache,
artifactsChecksums = checksums,
ttl = ttl,
cachePolicies = cachePolicies,
projectName = projectName,
sbtClassifiers = false
)
val sbtBootJarOverrides = SbtBootJars(
conf.sbtScalaOrganization.fold(org"org.scala-lang")(Organization(_)),
conf.sbtScalaVersion.getOrElse(sv),
conf.sbtScalaJars
)
val configs = Inputs.coursierConfigurations(module0.configurations)
def updateParams(
resolutions: Map[Set[Configuration], Resolution],
artifacts: Map[Artifact, Either[FileError, File]]
) =
UpdateParams(
shadedConfigOpt = None,
artifacts = artifacts,
classifiers = None,
configs = configs,
dependencies = dependencies,
res = resolutions,
ignoreArtifactErrors = false,
includeSignatures = false,
sbtBootJarOverrides = sbtBootJarOverrides
)
val e = for {
resolutions <- ResolutionRun.resolutions(resolutionParams, verbosityLevel, log)
artifactsParams0 = artifactsParams(resolutions)
artifacts <- ArtifactsRun.artifacts(artifactsParams0, verbosityLevel, log)
updateParams0 = updateParams(resolutions, artifacts)
updateReport <- UpdateRun.update(updateParams0, verbosityLevel, log)
} yield updateReport
e.left.map(unresolvedWarningOrThrow(uwconfig, _))
}
private def resolutionException(ex: ResolutionError): Either[Throwable, ResolveException] =
ex match {
case e: ResolutionError.MetadataDownloadErrors =>
val r = new ResolveException(
e.errors.flatMap(_._2),
e.errors.map {
case ((mod, ver), _) =>
ModuleID(mod.organization.value, mod.name.value, ver)
.withExtraAttributes(mod.attributes)
}
)
Right(r)
case _ => Left(ex.exception())
}
private def unresolvedWarningOrThrow(
uwconfig: UnresolvedWarningConfiguration,
ex: ResolutionError
): UnresolvedWarning =
resolutionException(ex) match {
case Left(t) => throw t
case Right(e) =>
UnresolvedWarning(e, uwconfig)
}
}
object CoursierDependencyResolution {
def apply(configuration: CoursierConfiguration): DependencyResolution =
DependencyResolution(new CoursierDependencyResolution(configuration))
}

View File

@ -0,0 +1,13 @@
package coursier.lmcoursier
import sbt.librarymanagement.LibraryManagementCodec
trait CoursierLibraryManagementCodec
extends sjsonnew.BasicJsonProtocol
with LibraryManagementCodec
// with sbt.internal.librarymanagement.formats.GlobalLockFormat
with sbt.internal.librarymanagement.formats.LoggerFormat
with sbt.librarymanagement.ResolverFormats
with CoursierConfigurationFormats
object CoursierLibraryManagementCodec extends CoursierLibraryManagementCodec

View File

@ -0,0 +1,24 @@
package coursier.lmcoursier
import sbt.librarymanagement._
import sjsonnew.support.murmurhash.Hasher
final case class CoursierModuleDescriptor(
descriptor: ModuleDescriptorConfiguration,
conf: CoursierConfiguration
) extends ModuleDescriptor {
def directDependencies: Vector[ModuleID] =
descriptor.dependencies
def scalaModuleInfo: Option[ScalaModuleInfo] =
descriptor.scalaModuleInfo
def moduleSettings: CoursierModuleSettings =
CoursierModuleSettings()
lazy val extraInputHash: Long = {
import CustomLibraryManagementCodec._
Hasher.hash(conf).toOption.fold(0L)(_.toLong)
}
}

View File

@ -0,0 +1,5 @@
package coursier.lmcoursier
import sbt.librarymanagement.ModuleSettings
case class CoursierModuleSettings() extends ModuleSettings

View File

@ -0,0 +1,37 @@
package coursier.lmcoursier
import sbt.librarymanagement.Resolver
import sjsonnew.JsonFormat
object CustomLibraryManagementCodec extends CoursierLibraryManagementCodec {
private type ConfFormat = (
Vector[Resolver],
Vector[Resolver],
Boolean,
Int,
Int
)
private def from(c: CoursierConfiguration): ConfFormat =
(
c.resolvers,
c.otherResolvers,
c.reorderResolvers,
c.parallelDownloads,
c.maxIterations
)
private def to(c: ConfFormat): CoursierConfiguration =
CoursierConfiguration()
.withResolvers(c._1)
.withOtherResolvers(c._2)
.withReorderResolvers(c._3)
.withParallelDownloads(c._4)
.withMaxIterations(c._5)
// Redefine to use a subset of properties, that are serializable
override implicit lazy val CoursierConfigurationFormat: JsonFormat[CoursierConfiguration] =
projectFormat[CoursierConfiguration, ConfFormat](from, to)
}

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import coursier.ivy.IvyRepository
import coursier.ivy.IvyXml.{mappings => ivyXmlMappings}

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import coursier.core.{Configuration, ModuleName, Organization, Project}
import sbt.librarymanagement.{InclExclRule, ModuleID}

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import coursier.Fetch
import coursier.core._

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
object Lock {

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import coursier.FileError
import coursier.core.Module

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
final class ResolutionException(
val error: ResolutionError

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File
import java.net.URL

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.util.concurrent.ExecutorService

View File

@ -0,0 +1,51 @@
package coursier.lmcoursier
import sbt.librarymanagement.{ MavenRepository, Resolver, URLRepository }
object Resolvers {
private val slowReposBase = Seq(
"https://repo.typesafe.com/",
"https://repo.scala-sbt.org/",
"http://repo.typesafe.com/",
"http://repo.scala-sbt.org/"
)
private val fastReposBase = Seq(
"http://repo1.maven.org/",
"https://repo1.maven.org/"
)
private def url(res: Resolver): Option[String] =
res match {
case m: MavenRepository =>
Some(m.root)
case u: URLRepository =>
u.patterns.artifactPatterns.headOption
.orElse(u.patterns.ivyPatterns.headOption)
case _ =>
None
}
private def filterResolvers(bases: Seq[String],
resolvers: Seq[(Resolver, Option[String])]): Seq[Resolver] =
resolvers
.filter(tuple => tuple._2.exists(url => bases.exists(base => url.startsWith(base))))
.map(_._1)
def reorder(resolvers: Seq[Resolver]): Seq[Resolver] = {
val byUrl = resolvers.map(r => (r, url(r)))
val fast = filterResolvers(fastReposBase, byUrl)
val slow = filterResolvers(slowReposBase, byUrl)
val rest = resolvers.diff(fast).diff(slow)
val reordered = fast ++ rest ++ slow
assert(reordered.size == resolvers.size,
"Reordered resolvers should be the same size as the unordered ones.")
reordered
}
}

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.util.concurrent.ConcurrentHashMap

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File
import java.net.URL

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File

View File

@ -1,4 +1,4 @@
package coursier.sbtcoursier
package coursier.lmcoursier
import java.io.File

View File

@ -0,0 +1,166 @@
package coursier.lmcoursier
import org.scalatest.{Matchers, PropSpec}
import sbt.internal.librarymanagement.cross.CrossVersionUtil
import sbt.internal.util.ConsoleLogger
import sbt.librarymanagement._
import sbt.librarymanagement.Configurations.Component
import sbt.librarymanagement.Resolver.{DefaultMavenRepository, JCenterRepository, JavaNet2Repository}
import sbt.librarymanagement.{Resolver, UnresolvedWarningConfiguration, UpdateConfiguration}
import sbt.librarymanagement.syntax._
final class ResolutionSpec extends PropSpec with Matchers {
lazy val log = ConsoleLogger()
def configurations = Vector(Compile, Test, Runtime, Provided, Optional, Component)
def module(
lmEngine: DependencyResolution,
moduleId: ModuleID,
deps: Vector[ModuleID],
scalaFullVersion: Option[String],
overrideScalaVersion: Boolean = true
): ModuleDescriptor = {
val scalaModuleInfo = scalaFullVersion map { fv =>
ScalaModuleInfo(
scalaFullVersion = fv,
scalaBinaryVersion = CrossVersionUtil.binaryScalaVersion(fv),
configurations = configurations,
checkExplicit = true,
filterImplicit = false,
overrideScalaVersion = overrideScalaVersion
)
}
val moduleSetting = ModuleDescriptorConfiguration(moduleId, ModuleInfo("foo"))
.withDependencies(deps)
.withConfigurations(configurations)
.withScalaModuleInfo(scalaModuleInfo)
lmEngine.moduleDescriptor(moduleSetting)
}
def resolvers = Vector(
DefaultMavenRepository,
JavaNet2Repository,
JCenterRepository,
Resolver.sbtPluginRepo("releases")
)
val lmEngine = CoursierDependencyResolution(CoursierConfiguration().withResolvers(resolvers))
private final val stubModule = "com.example" % "foo" % "0.1.0" % "compile"
property("very simple module") {
val dependencies = Vector(
"com.typesafe.scala-logging" % "scala-logging_2.12" % "3.7.2" % "compile",
"org.scalatest" % "scalatest_2.12" % "3.0.4" % "test"
).map(_.withIsTransitive(false))
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
resolution should be('right)
val r = resolution.right.get
r.configurations.map(_.configuration) should have size configurations.length
val compileConfig = r.configurations.find(_.configuration == Compile.toConfigRef).get
compileConfig.modules should have size 1
val runtimeConfig = r.configurations.find(_.configuration == Runtime.toConfigRef).get
runtimeConfig.modules should have size 1
val testConfig = r.configurations.find(_.configuration == Test.toConfigRef).get
testConfig.modules should have size 2
}
property("resolve compiler bridge") {
val dependencies =
Vector(("org.scala-sbt" % "compiler-interface" % "1.0.4" % "component").sources())
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
val r = resolution.right.get
val componentConfig = r.configurations.find(_.configuration == Component.toConfigRef).get
componentConfig.modules should have size 2
componentConfig.modules.head.artifacts should have size 1
componentConfig.modules.head.artifacts.head._1.classifier should contain("sources")
}
property("resolve sbt jars") {
val dependencies =
Vector("org.scala-sbt" % "sbt" % "1.1.0" % "provided")
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
val r = resolution.right.get
val modules = r.configurations.flatMap(_.modules)
modules.map(_.module.name) should contain("main_2.12")
}
property("resolve with default resolvers") {
val dependencies =
Vector(("org.scala-sbt" % "compiler-interface" % "1.0.4" % "component").sources())
val lmEngine =
CoursierDependencyResolution(
CoursierConfiguration()
.withResolvers(Resolver.combineDefaultResolvers(Vector.empty))
)
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
resolution should be('right)
}
property("resolve plugin") {
val pluginAttributes = Map("scalaVersion" -> "2.12", "sbtVersion" -> "1.0")
val dependencies =
Vector(("org.xerial.sbt" % "sbt-sonatype" % "2.0").withExtraAttributes(pluginAttributes))
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
val r = resolution.right.get
val componentConfig = r.configurations.find(_.configuration == Compile.toConfigRef).get
componentConfig.modules.map(_.module.name) should have size 5
}
property("strip e: prefix from plugin attributes") {
val pluginAttributes = Map("e:scalaVersion" -> "2.12", "e:sbtVersion" -> "1.0")
val dependencies =
Vector(("org.xerial.sbt" % "sbt-sonatype" % "2.0").withExtraAttributes(pluginAttributes))
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
resolution should be('right)
}
property("resolve plugins hosted on repo.typesafe.com") {
val pluginAttributes = Map("e:scalaVersion" -> "2.12", "e:sbtVersion" -> "1.0")
val dependencies =
Vector(("com.typesafe.sbt" % "sbt-git" % "0.9.3").withExtraAttributes(pluginAttributes))
val coursierModule = module(lmEngine, stubModule, dependencies, Some("2.12.4"))
val resolution =
lmEngine.update(coursierModule, UpdateConfiguration(), UnresolvedWarningConfiguration(), log)
resolution should be('right)
}
property("reorder fast and slow resolvers") {
val resolvers = Vector(
JavaNet2Repository,
Resolver.sbtPluginRepo("releases"),
DefaultMavenRepository
)
val engine = new CoursierDependencyResolution(CoursierConfiguration().withResolvers(resolvers))
engine.resolvers.last.name should be("sbt-plugin-releases")
engine.resolvers should have size resolvers.length
}
}

View File

@ -4,6 +4,7 @@ import java.io.File
import coursier.{Artifact, FileError}
import coursier.core._
import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._
import coursier.sbtcoursier.Structure._
import sbt.librarymanagement.{Artifact => _, Configuration => _, _}

View File

@ -4,6 +4,7 @@ import java.io.OutputStreamWriter
import coursier.{Cache, CachePolicy, TermDisplay}
import coursier.core.{Configuration, ResolutionProcess}
import coursier.lmcoursier.SbtCoursierCache
import sbt.librarymanagement.{Configuration => _, Resolver => _, _}
import sbt.{Cache => _, Configuration => _, _}
import sbt.Keys._

View File

@ -1,6 +1,7 @@
package coursier.sbtcoursier
import coursier.core._
import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._
import coursier.util.Print.Colors
import coursier.util.{Parse, Print}
@ -33,44 +34,41 @@ object DisplayTasks {
proj.copy(publications = publications)
}
Def.taskDyn {
val resolutionsTask =
if (sbtClassifiers)
Def.task {
val currentProject = currentProjectTask.value
val classifiersRes = coursierSbtClassifiersResolution.value
Map(currentProject.configurations.keySet -> classifiersRes)
}
else
Def.task(coursierResolutions.value)
Def.task {
val currentProject = currentProjectTask.value
val config = Configuration(configuration.value.name)
val configs = coursierConfigurations.value
val includedConfigs = configs.getOrElse(config, Set.empty) + config
Def.taskDyn {
val currentProject = currentProjectTask.value
val resolutions = resolutionsTask.value
val resolutionsTask =
if (sbtClassifiers)
Def.task {
val classifiersRes = coursierSbtClassifiersResolution.value
Map(currentProject.configurations.keySet -> classifiersRes)
}
else
Def.task(coursierResolutions.value)
for {
(subGraphConfigs, res) <- resolutions.toSeq
if subGraphConfigs.exists(includedConfigs)
} yield {
Def.task {
val resolutions = resolutionsTask.value
for {
(subGraphConfigs, res) <- resolutions.toSeq
if subGraphConfigs.exists(includedConfigs)
} yield {
val dependencies0 = currentProject.dependencies.collect {
case (cfg, dep) if includedConfigs(cfg) && subGraphConfigs(cfg) => dep
}.sortBy { dep =>
(dep.module.organization, dep.module.name, dep.version)
}
val subRes = res.subset(dependencies0.toSet)
ResolutionResult(subGraphConfigs, subRes, dependencies0)
}
val dependencies0 = currentProject.dependencies.collect {
case (cfg, dep) if includedConfigs(cfg) && subGraphConfigs(cfg) => dep
}.sortBy { dep =>
(dep.module.organization, dep.module.name, dep.version)
}
val subRes = res.subset(dependencies0.toSet)
ResolutionResult(subGraphConfigs, subRes, dependencies0)
}
}
}

View File

@ -4,6 +4,7 @@ import java.net.URL
import coursier.ProjectCache
import coursier.core._
import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._
import coursier.sbtcoursier.Structure._
import sbt.librarymanagement.{Configuration => _, _}

View File

@ -1,5 +1,6 @@
package coursier.sbtcoursier
import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._
import coursier.sbtcoursier.Structure._
import sbt.{Classpaths, Def}

View File

@ -6,6 +6,7 @@ import coursier.{Cache, ProjectCache}
import coursier.core._
import coursier.extra.Typelevel
import coursier.ivy.IvyRepository
import coursier.lmcoursier._
import coursier.maven.MavenRepository
import coursier.sbtcoursier.Keys._
import sbt.Def

View File

@ -1,6 +1,7 @@
package coursier.sbtcoursier
import coursier.core._
import coursier.lmcoursier._
import coursier.sbtcoursier.Keys._
import sbt.Def
import sbt.Keys._

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -3,6 +3,6 @@ package coursier
object Helper {
def checkEmpty(): Boolean =
coursier.sbtcoursier.SbtCoursierCache.default.isEmpty
coursier.lmcoursier.SbtCoursierCache.default.isEmpty
}
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,13 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
addSbtPlugin("com.lucidchart" % "sbt-scalafmt" % "1.15")

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -0,0 +1 @@
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2-1")

View File

@ -1,13 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2-1")
"io.get-coursier" % name % version
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1 @@
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")

View File

@ -1,13 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,13 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.19")

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -1,13 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}
addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2")

View File

@ -1,11 +1,13 @@
{
val pluginVersion = sys.props.getOrElse(
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
sys.error("plugin.version Java property not set")
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
"io.get-coursier" % name % version
}

View File

@ -1,11 +0,0 @@
{
val pluginVersion = sys.props.getOrElse(
"plugin.version",
throw new RuntimeException(
"""|The system property 'plugin.version' is not defined.
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
)
)
addSbtPlugin("io.get-coursier" % "sbt-coursier" % pluginVersion)
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

View File

@ -0,0 +1,13 @@
addSbtPlugin {
val name = sys.props.getOrElse(
"plugin.name",
sys.error("plugin.name Java property not set")
)
val version = sys.props.getOrElse(
"plugin.version",
sys.error("plugin.version Java property not set")
)
"io.get-coursier" % name % version
}

Some files were not shown because too many files have changed in this diff Show More