diff --git a/modules/data/src/main/scala/scaladex/data/cleanup/GithubRepoExtractor.scala b/modules/data/src/main/scala/scaladex/data/cleanup/GithubRepoExtractor.scala index fcb745bfc..9e776e435 100644 --- a/modules/data/src/main/scala/scaladex/data/cleanup/GithubRepoExtractor.scala +++ b/modules/data/src/main/scala/scaladex/data/cleanup/GithubRepoExtractor.scala @@ -56,7 +56,7 @@ class GithubRepoExtractor(paths: DataPaths): val fromPoms = pom.scm match case Some(scm) => List(scm.connection, scm.developerConnection, scm.url).flatten - .flatMap(ScmInfoParser.parse) + .flatMap(ScmInfoParser.parseRawConnection) .filter(g => !g.organization.isEmpty() && !g.repository.isEmpty()) case None => List() diff --git a/modules/data/src/main/scala/scaladex/data/cleanup/ScmInfoParser.scala b/modules/data/src/main/scala/scaladex/data/cleanup/ScmInfoParser.scala index 0c753c5b1..f9e555b44 100644 --- a/modules/data/src/main/scala/scaladex/data/cleanup/ScmInfoParser.scala +++ b/modules/data/src/main/scala/scaladex/data/cleanup/ScmInfoParser.scala @@ -9,7 +9,6 @@ import fastparse.* object ScmInfoParser extends Parsers: import fastparse.NoWhitespace.* - // More info in Rfc3986 private def Unreserved[A: P] = P(Alpha | Digit | "-".! | ".".! | "_".! | "~".!).! private def Segment[A: P] = P(Unreserved | SubDelims | ":" | "@").! @@ -26,7 +25,7 @@ object ScmInfoParser extends Parsers: .! ~ "/" ~ Segment.rep(1).!.map(removeDotGit) ) - def parse(scmInfo: String): Option[Project.Reference] = + def parseRawConnection(scmInfo: String): Option[Project.Reference] = fastparse.parse(scmInfo, x => ScmUrl(x)) match case Parsed.Success((organization, repo), _) => Some(Project.Reference.from(organization, repo)) diff --git a/modules/data/src/test/scala/scaladex/data/cleanup/ScmInfoParserTests.scala b/modules/data/src/test/scala/scaladex/data/cleanup/ScmInfoParserTests.scala index 62d3b13ef..8ce6ce075 100644 --- a/modules/data/src/test/scala/scaladex/data/cleanup/ScmInfoParserTests.scala +++ b/modules/data/src/test/scala/scaladex/data/cleanup/ScmInfoParserTests.scala @@ -7,38 +7,36 @@ import org.scalatest.matchers.should.Matchers class ScmInfoParserTests extends AnyFunSpec with Matchers: describe("ScmInfoParse") { it("correctly parse valid SCM strings") { - // Implicit protocol ScmInfoParser - .parse("scm:git:git@github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:git@github.com:foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") - // HTTPS ScmInfoParser - .parse("scm:https://github.com/foobarbuz/example.git") + .parseRawConnection("scm:https://github.com/foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") ScmInfoParser - .parse("scm:https://github.com/foobarbuz/example") + .parseRawConnection("scm:https://github.com/foobarbuz/example") .map(_.toString) shouldBe Some("foobarbuz/example") - // Git ScmInfoParser - .parse("scm:git:git://github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:git://github.com:foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") ScmInfoParser - .parse("scm:git://github.com:foobarbuz/example.git") + .parseRawConnection("scm:git://github.com:foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") - // SSH ScmInfoParser - .parse("scm:git:ssh://git@github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:ssh://git@github.com:foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") ScmInfoParser - .parse("scm:git:ssh://github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:ssh://github.com:foobarbuz/example.git") .map(_.toString) shouldBe Some("foobarbuz/example") - // Unknown protocol ScmInfoParser - .parse("scm:git:unknown://git@github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:unknown://git@github.com:foobarbuz/example.git") .map(_.toString) shouldBe None ScmInfoParser - .parse("scm:git:unknown://github.com:foobarbuz/example.git") + .parseRawConnection("scm:git:unknown://github.com:foobarbuz/example.git") .map(_.toString) shouldBe None + ScmInfoParser + .parseRawConnection("scm:git@github.com:mghmay/play-json-shaper.git") + .map(_.toString) shouldBe Some("mghmay/play-json-shaper") } } end ScmInfoParserTests