Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 | ":" | "@").!
Expand All @@ -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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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