Skip to content

Commit cd8f6b9

Browse files
authored
Merge pull request #3560 from scala-steward-org/topic/checkCache-as-for-comp
Rewrite `RepoCacheAlg.checkCache` as for-comprehension
2 parents 30e1311 + aa4fbd2 commit cd8f6b9

File tree

3 files changed

+25
-24
lines changed

3 files changed

+25
-24
lines changed

modules/core/src/main/scala/org/scalasteward/core/repocache/RefreshErrorAlg.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ final class RefreshErrorAlg[F[_]](
3535
dateTimeAlg: DateTimeAlg[F],
3636
F: MonadThrow[F]
3737
) {
38-
def skipIfFailedRecently[A](repo: Repo)(fa: F[A]): F[A] =
38+
def throwIfFailedRecently(repo: Repo): F[Unit] =
3939
failedRecently(repo).flatMap {
40-
case None => fa
40+
case None => F.unit
4141
case Some(fd) =>
4242
val msg = s"Skipping due to previous error for ${showDuration(fd)}"
43-
F.raiseError[A](new Throwable(msg) with NoStackTrace)
43+
F.raiseError(new Throwable(msg) with NoStackTrace)
4444
}
4545

4646
def persistError[A](repo: Repo)(fa: F[A]): F[A] =

modules/core/src/main/scala/org/scalasteward/core/repocache/RepoCacheAlg.scala

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,17 @@ final class RepoCacheAlg[F[_]](config: Config)(implicit
4040
F: MonadThrow[F]
4141
) {
4242
def checkCache(repo: Repo): F[(RepoData, RepoOut)] =
43-
logger.info(s"Check cache of ${repo.show}") >>
44-
refreshErrorAlg.skipIfFailedRecently(repo) {
45-
(
46-
forgeApiAlg.createForkOrGetRepoWithBranch(repo, config.forgeCfg.doNotFork),
47-
repoCacheRepository.findCache(repo)
48-
).parTupled.flatMap { case ((repoOut, branchOut), maybeCache) =>
49-
val latestSha1 = branchOut.commit.sha
50-
maybeCache
51-
.filter(_.sha1 === latestSha1)
52-
.fold(cloneAndRefreshCache(repo, repoOut))(supplementCache(repo, _).pure[F])
53-
.map(data => (data, repoOut))
54-
}
55-
}
43+
for {
44+
_ <- logger.info(s"Check cache of ${repo.show}")
45+
_ <- refreshErrorAlg.throwIfFailedRecently(repo)
46+
getRepoAndBranch = forgeApiAlg.createForkOrGetRepoWithBranch(repo, config.forgeCfg.doNotFork)
47+
tuple <- (getRepoAndBranch, repoCacheRepository.findCache(repo)).parTupled
48+
((repoOut, branchOut), maybeCache) = tuple
49+
latestSha1 = branchOut.commit.sha
50+
data <- maybeCache
51+
.filter(_.sha1 === latestSha1)
52+
.fold(cloneAndRefreshCache(repo, repoOut))(supplementCache(repo, _).pure[F])
53+
} yield (data, repoOut)
5654

5755
private def supplementCache(repo: Repo, cache: RepoCache): RepoData =
5856
RepoData(repo, cache, repoConfigAlg.mergeWithGlobal(cache.maybeRepoConfig))

modules/core/src/test/scala/org/scalasteward/core/repocache/RefreshErrorAlgTest.scala

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,26 @@ import org.scalasteward.core.mock.MockContext.context.refreshErrorAlg
77
import org.scalasteward.core.mock.{MockEff, MockEffOps, MockState}
88

99
class RefreshErrorAlgTest extends CatsEffectSuite {
10-
test("skipIfFailedRecently: not failed") {
10+
test("throwIfFailedRecently: not failed") {
1111
val repo = Repo("refresh-error", "test-1")
12-
val expected = 42
13-
refreshErrorAlg.skipIfFailedRecently(repo)(MockEff.pure(expected)).runA(MockState.empty).map {
14-
obtained => assertEquals(obtained, expected)
12+
val p = refreshErrorAlg.throwIfFailedRecently(repo)
13+
14+
val expected = "()"
15+
p.runA(MockState.empty).attempt.map { obtained =>
16+
val obtainedStr = obtained.fold(_.getMessage, _.toString).take(expected.length)
17+
assertEquals(obtainedStr, expected)
1518
}
1619
}
1720

18-
test("skipIfFailedRecently: failed") {
21+
test("throwIfFailedRecently: failed") {
1922
val repo = Repo("refresh-error", "test-2")
2023
val p = refreshErrorAlg.persistError(repo)(MockEff.raiseError(new Throwable())).attempt >>
21-
refreshErrorAlg.skipIfFailedRecently(repo)(MockEff.unit)
24+
refreshErrorAlg.throwIfFailedRecently(repo)
2225

2326
val expected = "Skipping due to previous error"
2427
p.runA(MockState.empty).attempt.map { obtained =>
25-
val message = obtained.fold(_.getMessage, _.toString).take(expected.length)
26-
assertEquals(message, expected)
28+
val obtainedStr = obtained.fold(_.getMessage, _.toString).take(expected.length)
29+
assertEquals(obtainedStr, expected)
2730
}
2831
}
2932
}

0 commit comments

Comments
 (0)