From aa9a43b483c6ad1af3434414e9c1702e671ed785 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Wed, 30 Dec 2015 01:34:46 +0100 Subject: [PATCH] More for extra attributes from POM (#2) --- .../main/scala/coursier/cli/Coursier.scala | 3 +-- cli/src/main/scala/coursier/cli/Helper.scala | 4 ++-- .../src/main/scala/coursier/Fetch.scala | 4 ++-- .../coursier/maven/MavenRepository.scala | 22 ++++++------------- .../scala/coursier/maven/MavenSource.scala | 2 +- .../src/main/scala/coursier/maven/Pom.scala | 4 +++- plugin/src/main/scala/coursier/FromSbt.scala | 2 +- 7 files changed, 17 insertions(+), 24 deletions(-) diff --git a/cli/src/main/scala/coursier/cli/Coursier.scala b/cli/src/main/scala/coursier/cli/Coursier.scala index 40dc8ac42..4bc3d55d5 100644 --- a/cli/src/main/scala/coursier/cli/Coursier.scala +++ b/cli/src/main/scala/coursier/cli/Coursier.scala @@ -31,8 +31,7 @@ case class CommonOptions( @HelpMessage("Do not add default repositories (~/.ivy2/local, and Central)") noDefault: Boolean = false, @HelpMessage("Modify names in Maven repository paths for SBT plugins") - @ValueDescription("Attribute prefix (typically \"e\")") - sbtPluginHack: String = "", + sbtPluginHack: Boolean = false, @HelpMessage("Force module version") @ValueDescription("organization:name:forcedVersion") @ExtraName("V") diff --git a/cli/src/main/scala/coursier/cli/Helper.scala b/cli/src/main/scala/coursier/cli/Helper.scala index 4800b8f03..48b01a276 100644 --- a/cli/src/main/scala/coursier/cli/Helper.scala +++ b/cli/src/main/scala/coursier/cli/Helper.scala @@ -118,9 +118,9 @@ class Helper( repositories0.collect { case Right(r) => r } val repositories = - if (common.sbtPluginHack.nonEmpty) + if (common.sbtPluginHack) repositories1.map { - case m: MavenRepository => m.copy(sbtAttrStub = Some(common.sbtPluginHack)) + case m: MavenRepository => m.copy(sbtAttrStub = true) case other => other } else diff --git a/core/shared/src/main/scala/coursier/Fetch.scala b/core/shared/src/main/scala/coursier/Fetch.scala index ffaef450e..65d393ad3 100644 --- a/core/shared/src/main/scala/coursier/Fetch.scala +++ b/core/shared/src/main/scala/coursier/Fetch.scala @@ -42,7 +42,7 @@ object Fetch { val task = lookups.foldLeft[F[Seq[String] \/ (Artifact.Source, Project)]](F.point(-\/(Nil))) { case (acc, (repo, eitherProjTask)) => val looseModuleValidation = repo match { - case m: MavenRepository => m.sbtAttrStub.nonEmpty // that sucks so much + case m: MavenRepository => m.sbtAttrStub // that sucks so much case _ => false } val moduleCmp = if (looseModuleValidation) module.copy(attributes = Map.empty) else module @@ -66,7 +66,7 @@ object Fetch { EitherT(F.map(task)(_.leftMap(_.reverse))) .map {case x @ (source, proj) => val looseModuleValidation = source match { - case m: MavenSource => m.sbtAttrStub.nonEmpty // omfg + case m: MavenSource => m.sbtAttrStub // omfg case _ => false } val projModule = diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index 7092b073d..821cd1866 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -45,24 +45,16 @@ object MavenRepository { "test" -> Seq("runtime") ) - def dirModuleName(module: Module, sbtAttrStub: Option[String]): String = - sbtAttrStub.fold(module.name) { prefix => - def attr(name: String) = { - val base = module.attributes.get(name) - - if (prefix.isEmpty) - base - else - base.orElse(module.attributes.get(s"$prefix:$name")) - } - + def dirModuleName(module: Module, sbtAttrStub: Boolean): String = + if (sbtAttrStub) { var name = module.name - for (scalaVersion <- attr("scalaVersion")) + for (scalaVersion <- module.attributes.get("scalaVersion")) name = name + "_" + scalaVersion - for (sbtVersion <- attr("sbtVersion")) + for (sbtVersion <- module.attributes.get("sbtVersion")) name = name + "_" + sbtVersion name - } + } else + module.name } @@ -71,7 +63,7 @@ case class MavenRepository( ivyLike: Boolean = false, changing: Option[Boolean] = None, /** Hackish hack for sbt plugins mainly - what this does really sucks */ - sbtAttrStub: Option[String] = None + sbtAttrStub: Boolean = false ) extends Repository { import Repository._ diff --git a/core/shared/src/main/scala/coursier/maven/MavenSource.scala b/core/shared/src/main/scala/coursier/maven/MavenSource.scala index 193c7f4ba..f07a4f5b3 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenSource.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenSource.scala @@ -7,7 +7,7 @@ case class MavenSource( ivyLike: Boolean, changing: Option[Boolean] = None, /** See doc on MavenRepository */ - sbtAttrStub: Option[String] = None + sbtAttrStub: Boolean ) extends Artifact.Source { import Repository._ diff --git a/core/shared/src/main/scala/coursier/maven/Pom.scala b/core/shared/src/main/scala/coursier/maven/Pom.scala index f7d893a5d..433d90c84 100644 --- a/core/shared/src/main/scala/coursier/maven/Pom.scala +++ b/core/shared/src/main/scala/coursier/maven/Pom.scala @@ -382,6 +382,8 @@ object Pom { "branch" ) + val extraAttributeDropPrefix = "e:" + def extraAttribute(s: String): String \/ (Module, String) = { // vaguely does the same as: // https://github.com/apache/ant-ivy/blob/2.2.0/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java#L291 @@ -410,7 +412,7 @@ object Pom { parts <- partsOrError attrs = parts.grouped(2).collect { case Seq(k, v) if v != "NULL" => - k -> v + k.stripPrefix(extraAttributeDropPrefix) -> v }.toMap org <- attrFrom(attrs, extraAttributeOrg) name <- attrFrom(attrs, extraAttributeName) diff --git a/plugin/src/main/scala/coursier/FromSbt.scala b/plugin/src/main/scala/coursier/FromSbt.scala index 253a48c34..0611e2ed2 100644 --- a/plugin/src/main/scala/coursier/FromSbt.scala +++ b/plugin/src/main/scala/coursier/FromSbt.scala @@ -119,7 +119,7 @@ object FromSbt { case sbt.MavenRepository(_, root) => if (root.startsWith("http://") || root.startsWith("https://")) { val root0 = if (root.endsWith("/")) root else root + "/" - Some(MavenRepository(root0, sbtAttrStub = Some("e"))) + Some(MavenRepository(root0, sbtAttrStub = true)) } else { Console.err.println(s"Warning: unrecognized Maven repository protocol in $root, ignoring it") None