Replace tuple with proper record type for licenses

This commit is contained in:
Matthew de Detrich 2021-07-04 15:09:59 +02:00 committed by Eugene Yokota
parent 02c7cf309d
commit eea840be2c
14 changed files with 142 additions and 40 deletions

View File

@ -49,6 +49,7 @@ trait LibraryManagementCodec extends sbt.librarymanagement.ConfigRefFormats
with sbt.librarymanagement.SftpRepositoryFormats
with sbt.librarymanagement.ResolverFormats
with sbt.librarymanagement.ModuleConfigurationFormats
with sbt.librarymanagement.LicenseFormats
with sbt.librarymanagement.ScmInfoFormats
with sbt.librarymanagement.ModuleInfoFormats
with sbt.librarymanagement.IvyFileConfigurationFormats

View File

@ -0,0 +1,53 @@
/**
* This code is generated using [[https://www.scala-sbt.org/contraband]].
*/
// DO NOT EDIT MANUALLY
package sbt.librarymanagement
/** Basic license information for a project module */
final class License private (
val spdxId: String,
val uri: java.net.URI,
val distribution: Option[String],
val comments: Option[String]) extends Serializable {
private def this(spdxId: String, uri: java.net.URI) = this(spdxId, uri, None, None)
override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match {
case x: License => (this.spdxId == x.spdxId) && (this.uri == x.uri) && (this.distribution == x.distribution) && (this.comments == x.comments)
case _ => false
})
override def hashCode: Int = {
37 * (37 * (37 * (37 * (37 * (17 + "sbt.librarymanagement.License".##) + spdxId.##) + uri.##) + distribution.##) + comments.##)
}
override def toString: String = {
"License(" + spdxId + ", " + uri + ", " + distribution + ", " + comments + ")"
}
private def copy(spdxId: String = spdxId, uri: java.net.URI = uri, distribution: Option[String] = distribution, comments: Option[String] = comments): License = {
new License(spdxId, uri, distribution, comments)
}
def withSpdxId(spdxId: String): License = {
copy(spdxId = spdxId)
}
def withUri(uri: java.net.URI): License = {
copy(uri = uri)
}
def withDistribution(distribution: Option[String]): License = {
copy(distribution = distribution)
}
def withDistribution(distribution: String): License = {
copy(distribution = Option(distribution))
}
def withComments(comments: Option[String]): License = {
copy(comments = comments)
}
def withComments(comments: String): License = {
copy(comments = Option(comments))
}
}
object License extends sbt.librarymanagement.LicenseFunctions {
def apply(spdxId: String, uri: java.net.URI): License = new License(spdxId, uri)
def apply(spdxId: String, uri: java.net.URI, distribution: Option[String], comments: Option[String]): License = new License(spdxId, uri, distribution, comments)
def apply(spdxId: String, uri: java.net.URI, distribution: String, comments: String): License = new License(spdxId, uri, Option(distribution), Option(comments))
}

View File

@ -0,0 +1,33 @@
/**
* This code is generated using [[https://www.scala-sbt.org/contraband]].
*/
// DO NOT EDIT MANUALLY
package sbt.librarymanagement
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
trait LicenseFormats { self: sjsonnew.BasicJsonProtocol =>
implicit lazy val LicenseFormat: JsonFormat[sbt.librarymanagement.License] = new JsonFormat[sbt.librarymanagement.License] {
override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.librarymanagement.License = {
__jsOpt match {
case Some(__js) =>
unbuilder.beginObject(__js)
val spdxId = unbuilder.readField[String]("spdxId")
val uri = unbuilder.readField[java.net.URI]("uri")
val distribution = unbuilder.readField[Option[String]]("distribution")
val comments = unbuilder.readField[Option[String]]("comments")
unbuilder.endObject()
sbt.librarymanagement.License(spdxId, uri, distribution, comments)
case None =>
deserializationError("Expected JsObject but found None")
}
}
override def write[J](obj: sbt.librarymanagement.License, builder: Builder[J]): Unit = {
builder.beginObject()
builder.addField("spdxId", obj.spdxId)
builder.addField("uri", obj.uri)
builder.addField("distribution", obj.distribution)
builder.addField("comments", obj.comments)
builder.endObject()
}
}
}

View File

@ -5,7 +5,7 @@
// DO NOT EDIT MANUALLY
package sbt.librarymanagement
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
trait ModuleDescriptorConfigurationFormats { self: sbt.librarymanagement.ScalaModuleInfoFormats & sbt.librarymanagement.ConfigurationFormats & sjsonnew.BasicJsonProtocol & sbt.librarymanagement.ModuleIDFormats & sbt.librarymanagement.ArtifactFormats & sbt.librarymanagement.ConfigRefFormats & sbt.librarymanagement.ChecksumFormats & sbt.librarymanagement.InclExclRuleFormats & sbt.librarymanagement.CrossVersionFormats & sbt.librarymanagement.DisabledFormats & sbt.librarymanagement.BinaryFormats & sbt.librarymanagement.ConstantFormats & sbt.librarymanagement.PatchFormats & sbt.librarymanagement.FullFormats & sbt.librarymanagement.For3Use2_13Formats & sbt.librarymanagement.For2_13Use3Formats & sbt.librarymanagement.ModuleInfoFormats & sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats & sbt.internal.librarymanagement.formats.NodeSeqFormat & sbt.librarymanagement.ConflictManagerFormats =>
trait ModuleDescriptorConfigurationFormats { self: sbt.librarymanagement.ScalaModuleInfoFormats & sbt.librarymanagement.ConfigurationFormats & sjsonnew.BasicJsonProtocol & sbt.librarymanagement.ModuleIDFormats & sbt.librarymanagement.ArtifactFormats & sbt.librarymanagement.ConfigRefFormats & sbt.librarymanagement.ChecksumFormats & sbt.librarymanagement.InclExclRuleFormats & sbt.librarymanagement.CrossVersionFormats & sbt.librarymanagement.DisabledFormats & sbt.librarymanagement.BinaryFormats & sbt.librarymanagement.ConstantFormats & sbt.librarymanagement.PatchFormats & sbt.librarymanagement.FullFormats & sbt.librarymanagement.For3Use2_13Formats & sbt.librarymanagement.For2_13Use3Formats & sbt.librarymanagement.ModuleInfoFormats & sbt.librarymanagement.LicenseFormats & sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats & sbt.internal.librarymanagement.formats.NodeSeqFormat & sbt.librarymanagement.ConflictManagerFormats =>
implicit lazy val ModuleDescriptorConfigurationFormat: JsonFormat[sbt.librarymanagement.ModuleDescriptorConfiguration] = new JsonFormat[sbt.librarymanagement.ModuleDescriptorConfiguration] {
override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.librarymanagement.ModuleDescriptorConfiguration = {
__jsOpt match {

View File

@ -10,13 +10,14 @@ final class ModuleInfo private (
val description: String,
val homepage: Option[java.net.URI],
val startYear: Option[Int],
val licenses: Vector[scala.Tuple2[String, java.net.URI]],
val licenses: Vector[sbt.librarymanagement.License],
val organizationName: String,
val organizationHomepage: Option[java.net.URI],
val scmInfo: Option[sbt.librarymanagement.ScmInfo],
val developers: Vector[sbt.librarymanagement.Developer]) extends Serializable {
private def this(nameFormal: String) = this(nameFormal, "", None, None, Vector.empty, "", None, None, Vector.empty)
private def this(nameFormal: String, description: String, homepage: Option[java.net.URI], startYear: Option[Int], organizationName: String, organizationHomepage: Option[java.net.URI], scmInfo: Option[sbt.librarymanagement.ScmInfo], developers: Vector[sbt.librarymanagement.Developer]) = this(nameFormal, description, homepage, startYear, Vector.empty, organizationName, organizationHomepage, scmInfo, developers)
override def equals(o: Any): Boolean = this.eq(o.asInstanceOf[AnyRef]) || (o match {
case x: ModuleInfo => (this.nameFormal == x.nameFormal) && (this.description == x.description) && (this.homepage == x.homepage) && (this.startYear == x.startYear) && (this.licenses == x.licenses) && (this.organizationName == x.organizationName) && (this.organizationHomepage == x.organizationHomepage) && (this.scmInfo == x.scmInfo) && (this.developers == x.developers)
@ -28,7 +29,7 @@ final class ModuleInfo private (
override def toString: String = {
"ModuleInfo(" + nameFormal + ", " + description + ", " + homepage + ", " + startYear + ", " + licenses + ", " + organizationName + ", " + organizationHomepage + ", " + scmInfo + ", " + developers + ")"
}
private def copy(nameFormal: String = nameFormal, description: String = description, homepage: Option[java.net.URI] = homepage, startYear: Option[Int] = startYear, licenses: Vector[scala.Tuple2[String, java.net.URI]] = licenses, organizationName: String = organizationName, organizationHomepage: Option[java.net.URI] = organizationHomepage, scmInfo: Option[sbt.librarymanagement.ScmInfo] = scmInfo, developers: Vector[sbt.librarymanagement.Developer] = developers): ModuleInfo = {
private def copy(nameFormal: String = nameFormal, description: String = description, homepage: Option[java.net.URI] = homepage, startYear: Option[Int] = startYear, licenses: Vector[sbt.librarymanagement.License] = licenses, organizationName: String = organizationName, organizationHomepage: Option[java.net.URI] = organizationHomepage, scmInfo: Option[sbt.librarymanagement.ScmInfo] = scmInfo, developers: Vector[sbt.librarymanagement.Developer] = developers): ModuleInfo = {
new ModuleInfo(nameFormal, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, developers)
}
def withNameFormal(nameFormal: String): ModuleInfo = {
@ -43,7 +44,7 @@ final class ModuleInfo private (
def withStartYear(startYear: Option[Int]): ModuleInfo = {
copy(startYear = startYear)
}
def withLicenses(licenses: Vector[scala.Tuple2[String, java.net.URI]]): ModuleInfo = {
def withLicenses(licenses: Vector[sbt.librarymanagement.License]): ModuleInfo = {
copy(licenses = licenses)
}
def withOrganizationName(organizationName: String): ModuleInfo = {
@ -62,5 +63,6 @@ final class ModuleInfo private (
object ModuleInfo {
def apply(nameFormal: String): ModuleInfo = new ModuleInfo(nameFormal)
def apply(nameFormal: String, description: String, homepage: Option[java.net.URI], startYear: Option[Int], licenses: Vector[scala.Tuple2[String, java.net.URI]], organizationName: String, organizationHomepage: Option[java.net.URI], scmInfo: Option[sbt.librarymanagement.ScmInfo], developers: Vector[sbt.librarymanagement.Developer]): ModuleInfo = new ModuleInfo(nameFormal, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, developers)
def apply(nameFormal: String, description: String, homepage: Option[java.net.URI], startYear: Option[Int], organizationName: String, organizationHomepage: Option[java.net.URI], scmInfo: Option[sbt.librarymanagement.ScmInfo], developers: Vector[sbt.librarymanagement.Developer]): ModuleInfo = new ModuleInfo(nameFormal, description, homepage, startYear, organizationName, organizationHomepage, scmInfo, developers)
def apply(nameFormal: String, description: String, homepage: Option[java.net.URI], startYear: Option[Int], licenses: Vector[sbt.librarymanagement.License], organizationName: String, organizationHomepage: Option[java.net.URI], scmInfo: Option[sbt.librarymanagement.ScmInfo], developers: Vector[sbt.librarymanagement.Developer]): ModuleInfo = new ModuleInfo(nameFormal, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, developers)
}

View File

@ -5,7 +5,7 @@
// DO NOT EDIT MANUALLY
package sbt.librarymanagement
import _root_.sjsonnew.{ Unbuilder, Builder, JsonFormat, deserializationError }
trait ModuleInfoFormats { self: sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats & sjsonnew.BasicJsonProtocol =>
trait ModuleInfoFormats { self: sbt.librarymanagement.LicenseFormats & sjsonnew.BasicJsonProtocol & sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats =>
implicit lazy val ModuleInfoFormat: JsonFormat[sbt.librarymanagement.ModuleInfo] = new JsonFormat[sbt.librarymanagement.ModuleInfo] {
override def read[J](__jsOpt: Option[J], unbuilder: Unbuilder[J]): sbt.librarymanagement.ModuleInfo = {
__jsOpt match {
@ -15,7 +15,7 @@ implicit lazy val ModuleInfoFormat: JsonFormat[sbt.librarymanagement.ModuleInfo]
val description = unbuilder.readField[String]("description")
val homepage = unbuilder.readField[Option[java.net.URI]]("homepage")
val startYear = unbuilder.readField[Option[Int]]("startYear")
val licenses = unbuilder.readField[Vector[scala.Tuple2[String, java.net.URI]]]("licenses")
val licenses = unbuilder.readField[Vector[sbt.librarymanagement.License]]("licenses")
val organizationName = unbuilder.readField[String]("organizationName")
val organizationHomepage = unbuilder.readField[Option[java.net.URI]]("organizationHomepage")
val scmInfo = unbuilder.readField[Option[sbt.librarymanagement.ScmInfo]]("scmInfo")

View File

@ -6,6 +6,6 @@
package sbt.librarymanagement
import _root_.sjsonnew.JsonFormat
trait ModuleSettingsFormats { self: sbt.librarymanagement.ScalaModuleInfoFormats & sbt.librarymanagement.ConfigurationFormats & sjsonnew.BasicJsonProtocol & sbt.librarymanagement.IvyFileConfigurationFormats & sbt.librarymanagement.PomConfigurationFormats & sbt.librarymanagement.ModuleIDFormats & sbt.librarymanagement.ArtifactFormats & sbt.librarymanagement.ConfigRefFormats & sbt.librarymanagement.ChecksumFormats & sbt.librarymanagement.InclExclRuleFormats & sbt.librarymanagement.CrossVersionFormats & sbt.librarymanagement.DisabledFormats & sbt.librarymanagement.BinaryFormats & sbt.librarymanagement.ConstantFormats & sbt.librarymanagement.PatchFormats & sbt.librarymanagement.FullFormats & sbt.librarymanagement.For3Use2_13Formats & sbt.librarymanagement.For2_13Use3Formats & sbt.librarymanagement.ModuleInfoFormats & sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats & sbt.internal.librarymanagement.formats.NodeSeqFormat & sbt.librarymanagement.ConflictManagerFormats & sbt.librarymanagement.ModuleDescriptorConfigurationFormats =>
trait ModuleSettingsFormats { self: sbt.librarymanagement.ScalaModuleInfoFormats & sbt.librarymanagement.ConfigurationFormats & sjsonnew.BasicJsonProtocol & sbt.librarymanagement.IvyFileConfigurationFormats & sbt.librarymanagement.PomConfigurationFormats & sbt.librarymanagement.ModuleIDFormats & sbt.librarymanagement.ArtifactFormats & sbt.librarymanagement.ConfigRefFormats & sbt.librarymanagement.ChecksumFormats & sbt.librarymanagement.InclExclRuleFormats & sbt.librarymanagement.CrossVersionFormats & sbt.librarymanagement.DisabledFormats & sbt.librarymanagement.BinaryFormats & sbt.librarymanagement.ConstantFormats & sbt.librarymanagement.PatchFormats & sbt.librarymanagement.FullFormats & sbt.librarymanagement.For3Use2_13Formats & sbt.librarymanagement.For2_13Use3Formats & sbt.librarymanagement.ModuleInfoFormats & sbt.librarymanagement.LicenseFormats & sbt.librarymanagement.ScmInfoFormats & sbt.librarymanagement.DeveloperFormats & sbt.internal.librarymanagement.formats.NodeSeqFormat & sbt.librarymanagement.ConflictManagerFormats & sbt.librarymanagement.ModuleDescriptorConfigurationFormats =>
implicit lazy val ModuleSettingsFormat: JsonFormat[sbt.librarymanagement.ModuleSettings] = flatUnionFormat3[sbt.librarymanagement.ModuleSettings, sbt.librarymanagement.IvyFileConfiguration, sbt.librarymanagement.PomConfiguration, sbt.librarymanagement.ModuleDescriptorConfiguration]("type")
}

View File

@ -367,11 +367,11 @@
{ "name": "description", "type": "String", "default": "\"\"", "since": "0.0.1" },
{ "name": "homepage", "type": "Option[java.net.URI]", "default": "None", "since": "0.0.1" },
{ "name": "startYear", "type": "Option[Int]", "default": "None", "since": "0.0.1" },
{ "name": "licenses", "type": "scala.Tuple2[String, java.net.URI]*", "default": "Vector.empty", "since": "0.0.1" },
{ "name": "licenses", "type": "sbt.librarymanagement.License*", "default": "Vector.empty", "since": "2.0.0" },
{ "name": "organizationName", "type": "String", "default": "\"\"", "since": "0.0.1" },
{ "name": "organizationHomepage", "type": "Option[java.net.URI]", "default": "None", "since": "0.0.1" },
{ "name": "scmInfo", "type": "Option[sbt.librarymanagement.ScmInfo]", "default": "None", "since": "0.0.1" },
{ "name": "developers", "type": "sbt.librarymanagement.Developer*", "default": "Vector.empty", "since": "0.0.1" }
{ "name": "developers", "type": "sbt.librarymanagement.Developer*", "default": "Vector.empty", "since": "0.0.1" }
]
},
{
@ -733,6 +733,20 @@
{ "name": "devConnection", "type": "String?", "default": "None", "since": "0.0.1" }
]
},
{
"name": "License",
"namespace": "sbt.librarymanagement",
"target": "Scala",
"type": "record",
"doc": "Basic license information for a project module",
"fields": [
{ "name": "spdxId", "type": "String" },
{ "name": "uri", "type": "java.net.URI" },
{ "name": "distribution", "type": "String?", "default": "None", "since": "0.0.1" },
{ "name": "comments", "type": "String?", "default": "None", "since": "0.0.1" }
],
"parentsCompanion": "sbt.librarymanagement.LicenseFunctions"
},
{
"name": "SshAuthentication",
"namespace": "sbt.librarymanagement",

View File

@ -1,25 +0,0 @@
package sbt.librarymanagement
import java.net.URL
import java.net.URI
/**
* Commonly used software licenses
* Names are SPDX ids:
* https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json
*/
object License {
lazy val Apache2: (String, URL) =
("Apache-2.0", new URI("https://www.apache.org/licenses/LICENSE-2.0.txt").toURL)
lazy val MIT: (String, URL) =
("MIT", new URI("https://opensource.org/licenses/MIT").toURL)
lazy val CC0: (String, URL) =
("CC0-1.0", new URI("https://creativecommons.org/publicdomain/zero/1.0/legalcode").toURL)
def PublicDomain: (String, URL) = CC0
lazy val GPL3_or_later: (String, URL) =
("GPL-3.0-or-later", new URI("https://spdx.org/licenses/GPL-3.0-or-later.html").toURL)
}

View File

@ -0,0 +1,24 @@
package sbt.librarymanagement
import java.net.URI
/**
* Commonly used software licenses
* Names are SPDX ids:
* https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json
*/
trait LicenseFunctions:
lazy val Apache2: License =
License("Apache-2.0", URI("https://www.apache.org/licenses/LICENSE-2.0.txt"))
lazy val MIT: License =
License("MIT", URI("https://opensource.org/licenses/MIT"))
lazy val CC0: License =
License("CC0-1.0", URI("https://creativecommons.org/publicdomain/zero/1.0/legalcode"))
def PublicDomain: License = CC0
lazy val GPL3_or_later: License =
License("GPL-3.0-or-later", URI("https://spdx.org/licenses/GPL-3.0-or-later.html"))
end LicenseFunctions

View File

@ -332,7 +332,7 @@ final class IvySbt(
mod.setHomePage(h.toString)
}
moduleInfo.licenses foreach { l =>
mod.addLicense(new License(l._1, l._2.toString))
mod.addLicense(new License(l.spdxId, l.uri.toString))
}
IvySbt.addConfigurations(mod, configurations)
IvySbt.addArtifacts(mod, module.explicitArtifacts)

View File

@ -381,7 +381,7 @@ object Keys {
val description = settingKey[String]("Project description.").withRank(BSetting)
val homepage = settingKey[Option[URI]]("Project homepage.").withRank(BSetting)
val startYear = settingKey[Option[Int]]("Year in which the project started.").withRank(BMinusSetting)
val licenses = settingKey[Seq[(String, URI)]]("Project licenses as (name, url) pairs.").withRank(BMinusSetting)
val licenses = settingKey[Seq[License]]("Project licenses as (name, url) pairs.").withRank(BMinusSetting)
val organization = settingKey[String]("Organization/group ID.").withRank(APlusSetting)
val organizationName = settingKey[String]("Organization full/formal name.").withRank(BMinusSetting)
val organizationHomepage = settingKey[Option[URI]]("Organization homepage.").withRank(BMinusSetting)

View File

@ -309,8 +309,8 @@ trait Import {
given Conversion[DependencyBuilders.OrganizationArtifactName, InclExclRule] =
InclExclRule.organizationArtifactNameToExclusionRule
// todo: fix
// val License = sbt.librarymanagement.License
type License = sbt.librarymanagement.License
val License = sbt.librarymanagement.License
type LogicalClock = sbt.librarymanagement.LogicalClock
val LogicalClock = sbt.librarymanagement.LogicalClock

View File

@ -10,7 +10,7 @@ ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
ThisBuild / organizationName := "example"
ThisBuild / csrCacheDirectory := (ThisBuild / baseDirectory).value / "coursier-cache"
// ThisBuild / licenses := List(License.Apache2)
ThisBuild / licenses += License.Apache2
lazy val Dev = config("dev").extend(Compile)
.describedAs("Dependencies required for development environments")