Skip to content

Commit 11be650

Browse files
authored
Allow slashes in branches in the repos.md file (#2297)
1 parent a39f91a commit 11be650

File tree

3 files changed

+38
-13
lines changed

3 files changed

+38
-13
lines changed

modules/core/src/main/scala/org/scalasteward/core/application/StewardAlg.scala

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import org.scalasteward.core.vcs.data.Repo
3333
import org.scalasteward.core.vcs.github.{GitHubApp, GitHubAppApiAlg, GitHubAuthAlg}
3434
import org.typelevel.log4cats.Logger
3535
import scala.concurrent.duration._
36-
import org.scalasteward.core.git.Branch
3736

3837
final class StewardAlg[F[_]](config: Config)(implicit
3938
dateTimeAlg: DateTimeAlg[F],
@@ -51,18 +50,10 @@ final class StewardAlg[F[_]](config: Config)(implicit
5150
F: Sync[F]
5251
) {
5352
private def readRepos(reposFile: File): Stream[F, Repo] =
54-
Stream.evals[F, List, Repo] {
55-
fileAlg.readFile(reposFile).map { maybeContent =>
56-
val regex = """-\s+(.+)/([^/]+)""".r
57-
val regexWithBranch = """-\s+(.+)/([^/]+):([^/]+)""".r
58-
val content = maybeContent.getOrElse("")
59-
content.linesIterator.collect {
60-
case regexWithBranch(owner, repo, branch) =>
61-
Repo(owner.trim, repo.trim, Some(Branch(branch.trim)))
62-
case regex(owner, repo) => Repo(owner.trim, repo.trim)
63-
}.toList
64-
}
65-
}
53+
Stream
54+
.eval(fileAlg.readFile(reposFile).map(_.getOrElse("")))
55+
.flatMap(content => Stream.fromIterator(content.linesIterator, 1024))
56+
.mapFilter(Repo.parse)
6657

6758
private def getGitHubAppRepos(githubApp: GitHubApp): Stream[F, Repo] =
6859
Stream.evals[F, List, Repo] {

modules/core/src/main/scala/org/scalasteward/core/vcs/data/Repo.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ final case class Repo(
3333
}
3434

3535
object Repo {
36+
def parse(s: String): Option[Repo] = {
37+
val regex = """-\s+([^/:]+)/([^/:]+)(:.+)?""".r
38+
s match {
39+
case regex(owner, repo, branch) =>
40+
Some(Repo(owner.trim, repo.trim, Option(branch).map(b => Branch(b.tail.trim))))
41+
case _ =>
42+
None
43+
}
44+
}
45+
3646
implicit val repoEq: Eq[Repo] =
3747
Eq.fromUniversalEquals
3848

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.scalasteward.core.vcs.data
2+
3+
import munit.FunSuite
4+
import org.scalasteward.core.git.Branch
5+
6+
class RepoTest extends FunSuite {
7+
test("parse") {
8+
assertEquals(
9+
Repo.parse("- typelevel/cats-effect"),
10+
Some(Repo("typelevel", "cats-effect", None))
11+
)
12+
assertEquals(
13+
Repo.parse("- typelevel/cats-effect:3.x"),
14+
Some(Repo("typelevel", "cats-effect", Some(Branch("3.x"))))
15+
)
16+
assertEquals(
17+
Repo.parse("- typelevel/cats-effect:series/3.x"),
18+
Some(Repo("typelevel", "cats-effect", Some(Branch("series/3.x"))))
19+
)
20+
21+
assertEquals(Repo.parse("typelevel/cats-effect"), None)
22+
assertEquals(Repo.parse("- typelevel-cats-effect"), None)
23+
}
24+
}

0 commit comments

Comments
 (0)