From 183c2bcfe2a84295deea82eed2179a72c50289cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-R=C3=A9mi=20Desjardins?= Date: Wed, 10 Sep 2014 20:18:28 -0700 Subject: [PATCH 1/6] Add developers keySetting The motivation for this is mainly to avoid having to define a pomExtra to publish to Maven central --- ivy/src/main/scala/sbt/IvyInterface.scala | 4 +++- ivy/src/main/scala/sbt/MakePom.scala | 16 ++++++++++++++++ main/src/main/scala/sbt/Defaults.scala | 2 +- main/src/main/scala/sbt/Keys.scala | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ivy/src/main/scala/sbt/IvyInterface.scala b/ivy/src/main/scala/sbt/IvyInterface.scala index 05720e6aa..3e63c4871 100644 --- a/ivy/src/main/scala/sbt/IvyInterface.scala +++ b/ivy/src/main/scala/sbt/IvyInterface.scala @@ -10,7 +10,7 @@ import org.apache.ivy.plugins.resolver.{ DependencyResolver, IBiblioResolver } import org.apache.ivy.util.url.CredentialsStore /** Additional information about a project module */ -final case class ModuleInfo(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None) { +final case class ModuleInfo(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None, developers: Seq[Developer] = Seq()) { def formally(name: String) = copy(nameFormal = name) def describing(desc: String, home: Option[URL]) = copy(description = desc, homepage = home) def licensed(lics: (String, URL)*) = copy(licenses = lics) @@ -20,6 +20,8 @@ final case class ModuleInfo(nameFormal: String, description: String = "", homepa /** Basic SCM information for a project module */ final case class ScmInfo(browseUrl: URL, connection: String, devConnection: Option[String] = None) +final case class Developer(id: String, name: String, email: String, url: URL) + /** Rule to exclude unwanted dependencies pulled in transitively by a module. */ final case class ExclusionRule(organization: String = "*", name: String = "*", artifact: String = "*", configurations: Seq[String] = Nil) diff --git a/ivy/src/main/scala/sbt/MakePom.scala b/ivy/src/main/scala/sbt/MakePom.scala index e05221b43..eba0cd94d 100644 --- a/ivy/src/main/scala/sbt/MakePom.scala +++ b/ivy/src/main/scala/sbt/MakePom.scala @@ -42,6 +42,7 @@ class MakePom(val log: Logger) { { makeStartYear(moduleInfo) } { makeOrganization(moduleInfo) } { makeScmInfo(moduleInfo) } + { makeDeveloperInfo(moduleInfo) } { extra } { val deps = depsInConfs(module, configurations) @@ -100,6 +101,21 @@ class MakePom(val log: Logger) { case _ => NodeSeq.Empty } } + def makeDeveloperInfo(moduleInfo: ModuleInfo): NodeSeq = + { + if (moduleInfo.developers.nonEmpty) { + + moduleInfo.developers.map{ developer: Developer => + + { developer.id } + { developer.name } + { developer.email } + { developer.url } + + } + + } else NodeSeq.Empty + } def makeProperties(module: ModuleDescriptor, dependencies: Seq[DependencyDescriptor]): NodeSeq = { val extra = IvySbt.getExtraAttributes(module) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 8d933dc02..7cf91d619 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1042,7 +1042,7 @@ object Classpaths { organization <<= organization or normalizedName, organizationName <<= organizationName or organization, organizationHomepage <<= organizationHomepage or homepage, - projectInfo <<= (name, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo) apply ModuleInfo, + projectInfo <<= (name, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, developers) apply ModuleInfo, overrideBuildResolvers <<= appConfiguration(isOverrideRepositories), externalResolvers <<= (externalResolvers.task.?, resolvers, appResolvers) { case (Some(delegated), Seq(), _) => delegated diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 8ff0aefe1..e8a3347c7 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -214,6 +214,7 @@ object Keys { val organization = SettingKey[String]("organization", "Organization/group ID.", APlusSetting) val organizationName = SettingKey[String]("organization-name", "Organization full/formal name.", BMinusSetting) val organizationHomepage = SettingKey[Option[URL]]("organization-homepage", "Organization homepage.", BMinusSetting) + val developers = SettingKey[List[Developer]]("developers", "List of developers implicated in the project", BMinusSetting) val apiURL = SettingKey[Option[URL]]("api-url", "Base URL for API documentation.", BMinusSetting) val entryApiURL = AttributeKey[URL]("entry-api-url", "Base URL for the API documentation for a classpath entry.") val apiMappings = TaskKey[Map[File, URL]]("api-mappings", "Mappings from classpath entry to API documentation base URL.", BMinusSetting) From 880f3733d96d0d0c37eb8878bb101e3fd014451a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-R=C3=A9mi=20Desjardins?= Date: Thu, 11 Sep 2014 09:36:37 -0700 Subject: [PATCH 2/6] Add constructor to avoid binary compatibility issues --- ivy/src/main/scala/sbt/IvyInterface.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ivy/src/main/scala/sbt/IvyInterface.scala b/ivy/src/main/scala/sbt/IvyInterface.scala index 3e63c4871..3a3d77cf1 100644 --- a/ivy/src/main/scala/sbt/IvyInterface.scala +++ b/ivy/src/main/scala/sbt/IvyInterface.scala @@ -11,6 +11,8 @@ import org.apache.ivy.util.url.CredentialsStore /** Additional information about a project module */ final case class ModuleInfo(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None, developers: Seq[Developer] = Seq()) { + def this(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None) = + new ModuleInfo(nameFormal = nameFormal, description = description, homepage = homepage, startYear = startYear, licenses = licenses, organizationName = organizationName, organizationHomepage = organizationHomepage, scmInfo = scmInfo, developers = Seq()) def formally(name: String) = copy(nameFormal = name) def describing(desc: String, home: Option[URL]) = copy(description = desc, homepage = home) def licensed(lics: (String, URL)*) = copy(licenses = lics) From b754c04a30891c74cac3ec679f9c212b772b7976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-R=C3=A9mi=20Desjardins?= Date: Mon, 15 Sep 2014 10:02:08 -0700 Subject: [PATCH 3/6] Add missing default option --- main/src/main/scala/sbt/Defaults.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 9321c5e35..58ddd7efa 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1009,6 +1009,7 @@ object Classpaths { homepage :== None, startYear :== None, licenses :== Nil, + developers :== Nil, scmInfo :== None, offline :== false, defaultConfiguration :== Some(Configurations.Compile), From c61ca347cff341067cfcb3fc336b80f608d3bf92 Mon Sep 17 00:00:00 2001 From: Jean-Remi Desjardins Date: Mon, 15 Sep 2014 22:37:35 -0700 Subject: [PATCH 4/6] Add notes --- notes/0.13.7/cross-ivy-maven.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/notes/0.13.7/cross-ivy-maven.md b/notes/0.13.7/cross-ivy-maven.md index 1dc45d06d..7b16c586f 100644 --- a/notes/0.13.7/cross-ivy-maven.md +++ b/notes/0.13.7/cross-ivy-maven.md @@ -1,6 +1,11 @@ [1586]: https://github.com/sbt/sbt/pull/1586 + [1590]: Https://github.com/sbt/sbt/pull/1590 [@jsuereth]: https://github.com/jsuereth + +### Improvements + +* Add developers key ### Fixes with compatibility implications From b1b44f9c3f0147f8fe81cbe5881c3bd0d57d91fa Mon Sep 17 00:00:00 2001 From: Jean-Remi Desjardins Date: Mon, 15 Sep 2014 22:38:44 -0700 Subject: [PATCH 5/6] Change additional constructor to what it should probably be I am at a total loss for why this is not compiling. --- ivy/src/main/scala/sbt/IvyInterface.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/IvyInterface.scala b/ivy/src/main/scala/sbt/IvyInterface.scala index 3a3d77cf1..2f3258793 100644 --- a/ivy/src/main/scala/sbt/IvyInterface.scala +++ b/ivy/src/main/scala/sbt/IvyInterface.scala @@ -12,7 +12,7 @@ import org.apache.ivy.util.url.CredentialsStore /** Additional information about a project module */ final case class ModuleInfo(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None, developers: Seq[Developer] = Seq()) { def this(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None) = - new ModuleInfo(nameFormal = nameFormal, description = description, homepage = homepage, startYear = startYear, licenses = licenses, organizationName = organizationName, organizationHomepage = organizationHomepage, scmInfo = scmInfo, developers = Seq()) + this(nameFormal, description, homepage, startYear, licenses, organizationName, organizationHomepage, scmInfo, Seq()) def formally(name: String) = copy(nameFormal = name) def describing(desc: String, home: Option[URL]) = copy(description = desc, homepage = home) def licensed(lics: (String, URL)*) = copy(licenses = lics) From e3975015b8c6ef897a406136f997a3cb09b49895 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-R=C3=A9mi=20Desjardins?= Date: Tue, 16 Sep 2014 09:26:43 -0700 Subject: [PATCH 6/6] Fix obtuse compilation error --- ivy/src/main/scala/sbt/IvyInterface.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ivy/src/main/scala/sbt/IvyInterface.scala b/ivy/src/main/scala/sbt/IvyInterface.scala index 3a3d77cf1..c5d4db1ea 100644 --- a/ivy/src/main/scala/sbt/IvyInterface.scala +++ b/ivy/src/main/scala/sbt/IvyInterface.scala @@ -11,8 +11,8 @@ import org.apache.ivy.util.url.CredentialsStore /** Additional information about a project module */ final case class ModuleInfo(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None, developers: Seq[Developer] = Seq()) { - def this(nameFormal: String, description: String = "", homepage: Option[URL] = None, startYear: Option[Int] = None, licenses: Seq[(String, URL)] = Nil, organizationName: String = "", organizationHomepage: Option[URL] = None, scmInfo: Option[ScmInfo] = None) = - new ModuleInfo(nameFormal = nameFormal, description = description, homepage = homepage, startYear = startYear, licenses = licenses, organizationName = organizationName, organizationHomepage = organizationHomepage, scmInfo = scmInfo, developers = Seq()) + def this(nameFormal: String, description: String, homepage: Option[URL], startYear: Option[Int], licenses: Seq[(String, URL)], organizationName: String, organizationHomepage: Option[URL], scmInfo: Option[ScmInfo]) = + this(nameFormal = nameFormal, description = description, homepage = homepage, startYear = startYear, licenses = licenses, organizationName = organizationName, organizationHomepage = organizationHomepage, scmInfo = scmInfo, developers = Seq()) def formally(name: String) = copy(nameFormal = name) def describing(desc: String, home: Option[URL]) = copy(description = desc, homepage = home) def licensed(lics: (String, URL)*) = copy(licenses = lics)