mirror of https://github.com/sbt/sbt.git
Define ConfigRef and use it in Artifact
This commit is contained in:
parent
bc0ed18308
commit
9f2f700762
|
|
@ -9,7 +9,7 @@ final class Artifact private (
|
|||
val `type`: String,
|
||||
val extension: String,
|
||||
val classifier: Option[String],
|
||||
val configurations: Vector[String],
|
||||
val configurations: Vector[sbt.librarymanagement.ConfigRef],
|
||||
val url: Option[java.net.URL],
|
||||
val extraAttributes: Map[String, String],
|
||||
val checksum: Option[sbt.librarymanagement.Checksum]) extends sbt.librarymanagement.ArtifactExtra with Serializable {
|
||||
|
|
@ -26,7 +26,7 @@ final class Artifact private (
|
|||
override def toString: String = {
|
||||
"Artifact(" + name + ", " + `type` + ", " + extension + ", " + classifier + ", " + configurations + ", " + url + ", " + extraAttributes + ", " + checksum + ")"
|
||||
}
|
||||
protected[this] def copy(name: String = name, `type`: String = `type`, extension: String = extension, classifier: Option[String] = classifier, configurations: Vector[String] = configurations, url: Option[java.net.URL] = url, extraAttributes: Map[String, String] = extraAttributes, checksum: Option[sbt.librarymanagement.Checksum] = checksum): Artifact = {
|
||||
protected[this] def copy(name: String = name, `type`: String = `type`, extension: String = extension, classifier: Option[String] = classifier, configurations: Vector[sbt.librarymanagement.ConfigRef] = configurations, url: Option[java.net.URL] = url, extraAttributes: Map[String, String] = extraAttributes, checksum: Option[sbt.librarymanagement.Checksum] = checksum): Artifact = {
|
||||
new Artifact(name, `type`, extension, classifier, configurations, url, extraAttributes, checksum)
|
||||
}
|
||||
def withName(name: String): Artifact = {
|
||||
|
|
@ -41,7 +41,7 @@ final class Artifact private (
|
|||
def withClassifier(classifier: Option[String]): Artifact = {
|
||||
copy(classifier = classifier)
|
||||
}
|
||||
def withConfigurations(configurations: Vector[String]): Artifact = {
|
||||
def withConfigurations(configurations: Vector[sbt.librarymanagement.ConfigRef]): Artifact = {
|
||||
copy(configurations = configurations)
|
||||
}
|
||||
def withUrl(url: Option[java.net.URL]): Artifact = {
|
||||
|
|
@ -57,5 +57,5 @@ final class Artifact private (
|
|||
object Artifact extends sbt.librarymanagement.ArtifactFunctions {
|
||||
|
||||
def apply(name: String): Artifact = new Artifact(name, Artifact.DefaultType, Artifact.DefaultExtension, None, Vector.empty, None, Map.empty, None)
|
||||
def apply(name: String, `type`: String, extension: String, classifier: Option[String], configurations: Vector[String], url: Option[java.net.URL], extraAttributes: Map[String, String], checksum: Option[sbt.librarymanagement.Checksum]): Artifact = new Artifact(name, `type`, extension, classifier, configurations, url, extraAttributes, checksum)
|
||||
def apply(name: String, `type`: String, extension: String, classifier: Option[String], configurations: Vector[sbt.librarymanagement.ConfigRef], url: Option[java.net.URL], extraAttributes: Map[String, String], checksum: Option[sbt.librarymanagement.Checksum]): Artifact = new Artifact(name, `type`, extension, classifier, configurations, url, extraAttributes, checksum)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
// DO NOT EDIT MANUALLY
|
||||
package sbt.librarymanagement
|
||||
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
|
||||
trait ArtifactFormats { self: sbt.librarymanagement.ChecksumFormats with sjsonnew.BasicJsonProtocol =>
|
||||
trait ArtifactFormats { self: sbt.librarymanagement.ConfigRefFormats with sbt.librarymanagement.ChecksumFormats with sjsonnew.BasicJsonProtocol =>
|
||||
implicit lazy val ArtifactFormat: JsonFormat[sbt.librarymanagement.Artifact] = new JsonFormat[sbt.librarymanagement.Artifact] {
|
||||
override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.librarymanagement.Artifact = {
|
||||
jsOpt match {
|
||||
|
|
@ -15,7 +15,7 @@ implicit lazy val ArtifactFormat: JsonFormat[sbt.librarymanagement.Artifact] = n
|
|||
val `type` = unbuilder.readField[String]("type")
|
||||
val extension = unbuilder.readField[String]("extension")
|
||||
val classifier = unbuilder.readField[Option[String]]("classifier")
|
||||
val configurations = unbuilder.readField[Vector[String]]("configurations")
|
||||
val configurations = unbuilder.readField[Vector[sbt.librarymanagement.ConfigRef]]("configurations")
|
||||
val url = unbuilder.readField[Option[java.net.URL]]("url")
|
||||
val extraAttributes = unbuilder.readField[Map[String, String]]("extraAttributes")
|
||||
val checksum = unbuilder.readField[Option[sbt.librarymanagement.Checksum]]("checksum")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
|
||||
*/
|
||||
|
||||
// DO NOT EDIT MANUALLY
|
||||
package sbt.librarymanagement
|
||||
/** A reference to Configuration. */
|
||||
final class ConfigRef private (
|
||||
/** The name of the configuration that eventually get used by Maven. */
|
||||
val name: String) extends Serializable {
|
||||
|
||||
|
||||
|
||||
override def equals(o: Any): Boolean = o match {
|
||||
case x: ConfigRef => (this.name == x.name)
|
||||
case _ => false
|
||||
}
|
||||
override def hashCode: Int = {
|
||||
37 * (37 * (17 + "ConfigRef".##) + name.##)
|
||||
}
|
||||
override def toString: String = {
|
||||
"ConfigRef(" + name + ")"
|
||||
}
|
||||
protected[this] def copy(name: String = name): ConfigRef = {
|
||||
new ConfigRef(name)
|
||||
}
|
||||
def withName(name: String): ConfigRef = {
|
||||
copy(name = name)
|
||||
}
|
||||
}
|
||||
object ConfigRef extends sbt.librarymanagement.ConfigRefFunctions {
|
||||
|
||||
def apply(name: String): ConfigRef = new ConfigRef(name)
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/**
|
||||
* This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]].
|
||||
*/
|
||||
|
||||
// DO NOT EDIT MANUALLY
|
||||
package sbt.librarymanagement
|
||||
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
|
||||
trait ConfigRefFormats { self: sjsonnew.BasicJsonProtocol =>
|
||||
implicit lazy val ConfigRefFormat: JsonFormat[sbt.librarymanagement.ConfigRef] = new JsonFormat[sbt.librarymanagement.ConfigRef] {
|
||||
override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.librarymanagement.ConfigRef = {
|
||||
jsOpt match {
|
||||
case Some(js) =>
|
||||
unbuilder.beginObject(js)
|
||||
val name = unbuilder.readField[String]("name")
|
||||
unbuilder.endObject()
|
||||
sbt.librarymanagement.ConfigRef(name)
|
||||
case None =>
|
||||
deserializationError("Expected JsObject but found None")
|
||||
}
|
||||
}
|
||||
override def write[J](obj: sbt.librarymanagement.ConfigRef, builder: Builder[J]): Unit = {
|
||||
builder.beginObject()
|
||||
builder.addField("name", obj.name)
|
||||
builder.endObject()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
// DO NOT EDIT MANUALLY
|
||||
package sbt.librarymanagement
|
||||
trait LibraryManagementCodec extends sjsonnew.BasicJsonProtocol
|
||||
with sbt.librarymanagement.ConfigRefFormats
|
||||
with sbt.librarymanagement.ChecksumFormats
|
||||
with sbt.librarymanagement.ArtifactFormats
|
||||
with sbt.librarymanagement.ArtifactTypeFilterFormats
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
{ "name": "type", "type": "String", "default": "Artifact.DefaultType", "since": "0.0.1" },
|
||||
{ "name": "extension", "type": "String", "default": "Artifact.DefaultExtension", "since": "0.0.1" },
|
||||
{ "name": "classifier", "type": "Option[String]", "default": "None", "since": "0.0.1" },
|
||||
{ "name": "configurations", "type": "String*", "default": "Vector.empty", "since": "0.0.1" },
|
||||
{ "name": "configurations", "type": "sbt.librarymanagement.ConfigRef*", "default": "Vector.empty", "since": "0.0.1" },
|
||||
{ "name": "url", "type": "Option[java.net.URL]", "default": "None", "since": "0.0.1" },
|
||||
{ "name": "extraAttributes", "type": "Map[String, String]", "default": "Map.empty", "since": "0.0.1" },
|
||||
{ "name": "checksum", "type": "Option[sbt.librarymanagement.Checksum]", "default": "None", "since": "0.0.1" }
|
||||
|
|
@ -61,6 +61,23 @@
|
|||
],
|
||||
"toString": "s\"$caller\""
|
||||
},
|
||||
{
|
||||
"name": "ConfigRef",
|
||||
"namespace": "sbt.librarymanagement",
|
||||
"target": "Scala",
|
||||
"type": "record",
|
||||
"doc": [
|
||||
"A reference to Configuration."
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"name": "name",
|
||||
"type": "String",
|
||||
"doc": [ "The name of the configuration that eventually get used by Maven." ]
|
||||
}
|
||||
],
|
||||
"parentsCompanion": "sbt.librarymanagement.ConfigRefFunctions"
|
||||
},
|
||||
{
|
||||
"name": "ConfigurationReport",
|
||||
"namespace": "sbt.librarymanagement",
|
||||
|
|
|
|||
|
|
@ -603,10 +603,12 @@ private[sbt] object IvySbt {
|
|||
private def toIvyArtifact(
|
||||
moduleID: ModuleDescriptor,
|
||||
a: Artifact,
|
||||
allConfigurations: Iterable[String]
|
||||
allConfigurations: Vector[ConfigRef]
|
||||
): MDArtifact = {
|
||||
val artifact = new MDArtifact(moduleID, a.name, a.`type`, a.extension, null, extra(a, false))
|
||||
copyConfigurations(a, artifact.addConfiguration, allConfigurations)
|
||||
copyConfigurations(a,
|
||||
(ref: ConfigRef) => { artifact.addConfiguration(ref.name) },
|
||||
allConfigurations)
|
||||
artifact
|
||||
}
|
||||
def getExtraAttributes(revID: ExtendableItem): Map[String, String] = {
|
||||
|
|
@ -816,7 +818,7 @@ private[sbt] object IvySbt {
|
|||
url.orNull,
|
||||
extraMap
|
||||
)
|
||||
copyConfigurations(artifact, ivyArtifact.addConfiguration)
|
||||
copyConfigurations(artifact, (ref: ConfigRef) => { ivyArtifact.addConfiguration(ref.name) })
|
||||
for (conf <- dependencyDescriptor.getModuleConfigurations)
|
||||
dependencyDescriptor.addDependencyArtifact(conf, ivyArtifact)
|
||||
}
|
||||
|
|
@ -849,13 +851,13 @@ private[sbt] object IvySbt {
|
|||
|
||||
dependencyDescriptor
|
||||
}
|
||||
def copyConfigurations(artifact: Artifact, addConfiguration: String => Unit): Unit =
|
||||
copyConfigurations(artifact, addConfiguration, "*" :: Nil)
|
||||
def copyConfigurations(artifact: Artifact, addConfiguration: ConfigRef => Unit): Unit =
|
||||
copyConfigurations(artifact, addConfiguration, Vector(ConfigRef("*")))
|
||||
|
||||
private[this] def copyConfigurations(
|
||||
artifact: Artifact,
|
||||
addConfiguration: String => Unit,
|
||||
allConfigurations: Iterable[String]
|
||||
addConfiguration: ConfigRef => Unit,
|
||||
allConfigurations: Vector[ConfigRef]
|
||||
): Unit = {
|
||||
val confs =
|
||||
if (artifact.configurations.isEmpty) allConfigurations
|
||||
|
|
@ -923,7 +925,7 @@ private[sbt] object IvySbt {
|
|||
configurations.foreach(config => mod.addConfiguration(toIvyConfiguration(config)))
|
||||
|
||||
def mapArtifacts(moduleID: ModuleDescriptor, artifacts: Seq[Artifact]): Seq[IArtifact] = {
|
||||
lazy val allConfigurations = moduleID.getPublicConfigurationsNames
|
||||
lazy val allConfigurations = moduleID.getPublicConfigurationsNames.toVector map ConfigRef.apply
|
||||
for (artifact <- artifacts) yield toIvyArtifact(moduleID, artifact, allConfigurations)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -217,7 +217,9 @@ object IvyRetrieve {
|
|||
getType,
|
||||
getExt,
|
||||
Option(getExtraAttribute("classifier")),
|
||||
getConfigurations.toVector,
|
||||
getConfigurations.toVector map { c: String =>
|
||||
ConfigRef(c)
|
||||
},
|
||||
Option(getUrl)
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ abstract class ArtifactExtra {
|
|||
def `type`: String
|
||||
def extension: String
|
||||
def classifier: Option[String]
|
||||
def configurations: Vector[String]
|
||||
def configurations: Vector[ConfigRef]
|
||||
def url: Option[URL]
|
||||
def extraAttributes: Map[String, String]
|
||||
def checksum: Option[Checksum]
|
||||
|
|
@ -21,7 +21,7 @@ abstract class ArtifactExtra {
|
|||
`type`: String = `type`,
|
||||
extension: String = extension,
|
||||
classifier: Option[String] = classifier,
|
||||
configurations: Vector[String] = configurations,
|
||||
configurations: Vector[ConfigRef] = configurations,
|
||||
url: Option[URL] = url,
|
||||
extraAttributes: Map[String, String] = extraAttributes,
|
||||
checksum: Option[Checksum] = checksum
|
||||
|
|
@ -58,7 +58,7 @@ abstract class ArtifactFunctions {
|
|||
`type`: String,
|
||||
extension: String,
|
||||
classifier: Option[String],
|
||||
configurations: Vector[String],
|
||||
configurations: Vector[ConfigRef],
|
||||
url: Option[URL]
|
||||
): Artifact = Artifact(name, `type`, extension, classifier, configurations, url, empty, None)
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ abstract class ArtifactFunctions {
|
|||
|
||||
def sources(name: String) = classified(name, SourceClassifier)
|
||||
def javadoc(name: String) = classified(name, DocClassifier)
|
||||
def pom(name: String) = Artifact(name, PomType, PomType, None, Vector(Pom.name), None)
|
||||
def pom(name: String) = Artifact(name, PomType, PomType, None, Vector(Pom), None)
|
||||
|
||||
// Possible ivy artifact types such that sbt will treat those artifacts at sources / docs
|
||||
val DefaultSourceTypes = Set("src", "source", "sources")
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@ final class Configuration private[sbt] (
|
|||
def withTransitive(transitive: Boolean): Configuration = {
|
||||
copy(transitive = transitive)
|
||||
}
|
||||
|
||||
def toConfigRef: ConfigRef = ConfigRef(name)
|
||||
}
|
||||
object Configuration {
|
||||
private[sbt] def apply(id: String, name: String): Configuration =
|
||||
|
|
|
|||
|
|
@ -134,3 +134,8 @@ private[sbt] object ConfigurationMacro {
|
|||
.enclosingContextChain
|
||||
.map(_.tree.asInstanceOf[c.Tree])
|
||||
}
|
||||
|
||||
abstract class ConfigRefFunctions {
|
||||
implicit def configToConfigRef(c: Configuration): ConfigRef =
|
||||
c.toConfigRef
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue