From 3de165c1ddab8510ee83fc223b93511d2ddd4310 Mon Sep 17 00:00:00 2001 From: Peter Janssen Date: Fri, 28 May 2021 17:12:22 +0200 Subject: [PATCH 1/2] Expand allowed maven repository id characters to match maven see https://github.com/apache/maven/blob/5c45b3fe22d8ec4270b2cf1016581b8927d2913d/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java#L84 --- ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala index 4f172ce94..a1793b20d 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala @@ -504,7 +504,7 @@ class MakePom(val log: Logger) { s.toArray.map(_.asInstanceOf[DependencyResolver]) def toID(name: String) = checkID(name.filter(isValidIDCharacter).mkString, name) - def isValidIDCharacter(c: Char) = c.isLetterOrDigit + def isValidIDCharacter(c: Char) = """\/:"<>|?*""".contains(c) private def checkID(id: String, name: String) = if (id.isEmpty) sys.error("Could not convert '" + name + "' to an ID") else id def mavenRepository(repo: MavenRepository): XNode = From 976ff440376787e63e48fce7995ea02c83a69ce7 Mon Sep 17 00:00:00 2001 From: Peter Janssen Date: Tue, 1 Jun 2021 11:18:32 +0200 Subject: [PATCH 2/2] Fix logic and added test --- .../sbt/internal/librarymanagement/MakePom.scala | 2 +- .../internal/librarymanagement/MakePomSpec.scala | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala b/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala index a1793b20d..a030a277a 100644 --- a/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala +++ b/ivy/src/main/scala/sbt/internal/librarymanagement/MakePom.scala @@ -504,7 +504,7 @@ class MakePom(val log: Logger) { s.toArray.map(_.asInstanceOf[DependencyResolver]) def toID(name: String) = checkID(name.filter(isValidIDCharacter).mkString, name) - def isValidIDCharacter(c: Char) = """\/:"<>|?*""".contains(c) + def isValidIDCharacter(c: Char) = !"""\/:"<>|?*""".contains(c) private def checkID(id: String, name: String) = if (id.isEmpty) sys.error("Could not convert '" + name + "' to an ID") else id def mavenRepository(repo: MavenRepository): XNode = diff --git a/ivy/src/test/scala/sbt/internal/librarymanagement/MakePomSpec.scala b/ivy/src/test/scala/sbt/internal/librarymanagement/MakePomSpec.scala index 30c36e093..6b3aafd17 100644 --- a/ivy/src/test/scala/sbt/internal/librarymanagement/MakePomSpec.scala +++ b/ivy/src/test/scala/sbt/internal/librarymanagement/MakePomSpec.scala @@ -1,6 +1,7 @@ package sbt.internal.librarymanagement import sbt.internal.util.ConsoleLogger +import sbt.librarymanagement.MavenRepository import verify.BasicTestSuite // http://ant.apache.org/ivy/history/2.3.0/ivyfile/dependency.html @@ -74,6 +75,18 @@ object MakePomSpec extends BasicTestSuite { beParsedAsError("foo+") } + test("repository id should not contain maven illegal repo id characters") { + val repository = mp.mavenRepository( + MavenRepository( + """repository-id-\with-/illegal:"<-chars>|?*-others~!@#$%^&`';{}[]=+_,.""", + "uri" + ) + ) + assert( + (repository \ "id").text == "repository-id-with-illegal-chars-others~!@#$%^&`';{}[]=+_,." + ) + } + val mp = new MakePom(ConsoleLogger()) def convertTo(s: String, expected: String): Unit = { assert(MakePom.makeDependencyVersion(s) == expected)