mirror of https://github.com/sbt/sbt.git
Move ivy xml generation
In the hope that this might address issues with shading plugin on single core machines
This commit is contained in:
parent
4b3923d3e5
commit
5583efffd0
|
|
@ -55,6 +55,21 @@ object CoursierPlugin extends AutoPlugin {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def makeIvyXmlBefore[T](
|
||||||
|
task: TaskKey[T],
|
||||||
|
shadedConfigOpt: Option[(String, String)]
|
||||||
|
): Setting[Task[T]] =
|
||||||
|
// not 100% sure that make writeFiles below happen before the actions triggered by task.value...
|
||||||
|
task := {
|
||||||
|
val currentProject = {
|
||||||
|
val proj = coursierProject.value
|
||||||
|
val publications = coursierPublications.value
|
||||||
|
proj.copy(publications = publications)
|
||||||
|
}
|
||||||
|
IvyXml.writeFiles(currentProject, shadedConfigOpt, ivySbt.value, streams.value.log)
|
||||||
|
task.value
|
||||||
|
}
|
||||||
|
|
||||||
def coursierSettings(
|
def coursierSettings(
|
||||||
shadedConfigOpt: Option[(String, String)],
|
shadedConfigOpt: Option[(String, String)],
|
||||||
packageConfigs: Seq[(Configuration, String)]
|
packageConfigs: Seq[(Configuration, String)]
|
||||||
|
|
@ -83,6 +98,8 @@ object CoursierPlugin extends AutoPlugin {
|
||||||
withClassifiers = true,
|
withClassifiers = true,
|
||||||
sbtClassifiers = true
|
sbtClassifiers = true
|
||||||
),
|
),
|
||||||
|
makeIvyXmlBefore(deliverLocalConfiguration, shadedConfigOpt),
|
||||||
|
makeIvyXmlBefore(deliverConfiguration, shadedConfigOpt),
|
||||||
update <<= Tasks.updateTask(
|
update <<= Tasks.updateTask(
|
||||||
shadedConfigOpt,
|
shadedConfigOpt,
|
||||||
withClassifiers = false
|
withClassifiers = false
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package coursier
|
package coursier
|
||||||
|
|
||||||
import coursier.ivy.{ IvyXml, IvyRepository }
|
import coursier.ivy.IvyRepository
|
||||||
|
import coursier.ivy.IvyXml.{ mappings => ivyXmlMappings }
|
||||||
|
|
||||||
import java.net.{ MalformedURLException, URL }
|
import java.net.{ MalformedURLException, URL }
|
||||||
|
|
||||||
|
|
@ -71,7 +72,7 @@ object FromSbt {
|
||||||
)
|
)
|
||||||
|
|
||||||
val mapping = module.configurations.getOrElse("compile")
|
val mapping = module.configurations.getOrElse("compile")
|
||||||
val allMappings = IvyXml.mappings(mapping)
|
val allMappings = ivyXmlMappings(mapping)
|
||||||
|
|
||||||
val attributes =
|
val attributes =
|
||||||
if (module.explicitArtifacts.isEmpty)
|
if (module.explicitArtifacts.isEmpty)
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,49 @@
|
||||||
package coursier
|
package coursier
|
||||||
|
|
||||||
import scala.xml.{ Node, PrefixedAttribute }
|
import coursier.internal.FileUtil
|
||||||
|
import org.apache.ivy.core.module.id.ModuleRevisionId
|
||||||
|
|
||||||
object MakeIvyXml {
|
import scala.collection.JavaConverters._
|
||||||
|
import scala.xml.{Node, PrefixedAttribute}
|
||||||
|
|
||||||
def apply(project0: Project, shadedConfigOpt: Option[String]): Node = {
|
object IvyXml {
|
||||||
|
|
||||||
|
// These are required for publish to be fine, later on.
|
||||||
|
def writeFiles(
|
||||||
|
currentProject: Project,
|
||||||
|
shadedConfigOpt: Option[(String, String)],
|
||||||
|
ivySbt: sbt.IvySbt,
|
||||||
|
log: sbt.Logger
|
||||||
|
): Unit = {
|
||||||
|
|
||||||
|
val ivyCacheManager = ivySbt.withIvy(log)(ivy =>
|
||||||
|
ivy.getResolutionCacheManager
|
||||||
|
)
|
||||||
|
|
||||||
|
val ivyModule = ModuleRevisionId.newInstance(
|
||||||
|
currentProject.module.organization,
|
||||||
|
currentProject.module.name,
|
||||||
|
currentProject.version,
|
||||||
|
currentProject.module.attributes.asJava
|
||||||
|
)
|
||||||
|
|
||||||
|
val cacheIvyFile = ivyCacheManager.getResolvedIvyFileInCache(ivyModule)
|
||||||
|
val cacheIvyPropertiesFile = ivyCacheManager.getResolvedIvyPropertiesInCache(ivyModule)
|
||||||
|
|
||||||
|
val printer = new scala.xml.PrettyPrinter(80, 2)
|
||||||
|
|
||||||
|
val content0 = """<?xml version="1.0" encoding="UTF-8"?>""" + '\n' +
|
||||||
|
printer.format(content(currentProject, shadedConfigOpt.map(_._2)))
|
||||||
|
cacheIvyFile.getParentFile.mkdirs()
|
||||||
|
log.info(s"Writing Ivy file $cacheIvyFile")
|
||||||
|
FileUtil.write(cacheIvyFile, content0.getBytes("UTF-8"))
|
||||||
|
|
||||||
|
// Just writing an empty file here... Are these only used?
|
||||||
|
cacheIvyPropertiesFile.getParentFile.mkdirs()
|
||||||
|
FileUtil.write(cacheIvyPropertiesFile, Array())
|
||||||
|
}
|
||||||
|
|
||||||
|
def content(project0: Project, shadedConfigOpt: Option[String]): Node = {
|
||||||
|
|
||||||
val filterOutDependencies =
|
val filterOutDependencies =
|
||||||
shadedConfigOpt.toSet[String].flatMap { shadedConfig =>
|
shadedConfigOpt.toSet[String].flatMap { shadedConfig =>
|
||||||
|
|
@ -844,42 +844,10 @@ object Tasks {
|
||||||
proj.copy(publications = publications)
|
proj.copy(publications = publications)
|
||||||
}
|
}
|
||||||
|
|
||||||
val ivySbt0 = ivySbt.value
|
|
||||||
val ivyCacheManager = ivySbt0.withIvy(streams.value.log)(ivy =>
|
|
||||||
ivy.getResolutionCacheManager
|
|
||||||
)
|
|
||||||
|
|
||||||
val ivyModule = ModuleRevisionId.newInstance(
|
|
||||||
currentProject.module.organization,
|
|
||||||
currentProject.module.name,
|
|
||||||
currentProject.version,
|
|
||||||
currentProject.module.attributes.asJava
|
|
||||||
)
|
|
||||||
val cacheIvyFile = ivyCacheManager.getResolvedIvyFileInCache(ivyModule)
|
|
||||||
val cacheIvyPropertiesFile = ivyCacheManager.getResolvedIvyPropertiesInCache(ivyModule)
|
|
||||||
|
|
||||||
val log = streams.value.log
|
val log = streams.value.log
|
||||||
|
|
||||||
val verbosityLevel = coursierVerbosity.value
|
val verbosityLevel = coursierVerbosity.value
|
||||||
|
|
||||||
// required for publish to be fine, later on
|
|
||||||
def writeIvyFiles() = {
|
|
||||||
val printer = new scala.xml.PrettyPrinter(80, 2)
|
|
||||||
|
|
||||||
val b = new StringBuilder
|
|
||||||
b ++= """<?xml version="1.0" encoding="UTF-8"?>"""
|
|
||||||
b += '\n'
|
|
||||||
b ++= printer.format(MakeIvyXml(currentProject, shadedConfigOpt.map(_._2)))
|
|
||||||
cacheIvyFile.getParentFile.mkdirs()
|
|
||||||
FileUtil.write(cacheIvyFile, b.result().getBytes("UTF-8"))
|
|
||||||
|
|
||||||
// Just writing an empty file here... Are these only used?
|
|
||||||
cacheIvyPropertiesFile.getParentFile.mkdirs()
|
|
||||||
FileUtil.write(cacheIvyPropertiesFile, "".getBytes("UTF-8"))
|
|
||||||
}
|
|
||||||
|
|
||||||
writeIvyFiles()
|
|
||||||
|
|
||||||
val res = {
|
val res = {
|
||||||
if (withClassifiers && sbtClassifiers)
|
if (withClassifiers && sbtClassifiers)
|
||||||
coursierSbtClassifiersResolution
|
coursierSbtClassifiersResolution
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package coursier
|
package coursier
|
||||||
|
|
||||||
import coursier.ivy.IvyXml
|
import coursier.ivy.IvyXml.{ mappings => ivyXmlMappings }
|
||||||
import sbt.Keys._
|
import sbt.Keys._
|
||||||
import sbt.{AutoPlugin, Compile, Configuration, TaskKey, inConfig}
|
import sbt.{AutoPlugin, Compile, Configuration, TaskKey, inConfig}
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ object ShadingPlugin extends AutoPlugin {
|
||||||
.map(c => c.copy(extendsConfigs = c.extendsConfigs.filter(_.name != Shaded.name))),
|
.map(c => c.copy(extendsConfigs = c.extendsConfigs.filter(_.name != Shaded.name))),
|
||||||
libraryDependencies := libraryDependencies.in(baseSbtConfiguration).value.filter { dep =>
|
libraryDependencies := libraryDependencies.in(baseSbtConfiguration).value.filter { dep =>
|
||||||
val isShaded = dep.configurations.exists { mappings =>
|
val isShaded = dep.configurations.exists { mappings =>
|
||||||
IvyXml.mappings(mappings).exists(_._1 == Shaded.name)
|
ivyXmlMappings(mappings).exists(_._1 == Shaded.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
!isShaded
|
!isShaded
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue