Skip to content

Commit a8ccd68

Browse files
authored
Merge pull request #1638 from scala-steward-org/topic/no-sync-in-nurturealg
Do not require Sync for NurtureAlg
2 parents c83bbb4 + 810b445 commit a8ccd68

File tree

2 files changed

+38
-32
lines changed

2 files changed

+38
-32
lines changed

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

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.scalasteward.core.application
1818

1919
import better.files.File
20-
import cats.Monad
2120
import cats.effect.ExitCode
2221
import cats.syntax.all._
2322
import fs2.Stream
@@ -29,8 +28,8 @@ import org.scalasteward.core.nurture.NurtureAlg
2928
import org.scalasteward.core.repocache.RepoCacheAlg
3029
import org.scalasteward.core.update.PruningAlg
3130
import org.scalasteward.core.util
32-
import org.scalasteward.core.util.DateTimeAlg
3331
import org.scalasteward.core.util.logger.LoggerOps
32+
import org.scalasteward.core.util.{BracketThrowable, DateTimeAlg}
3433
import org.scalasteward.core.vcs.data.Repo
3534

3635
final class StewardAlg[F[_]](implicit
@@ -46,7 +45,7 @@ final class StewardAlg[F[_]](implicit
4645
selfCheckAlg: SelfCheckAlg[F],
4746
streamCompiler: Stream.Compiler[F, F],
4847
workspaceAlg: WorkspaceAlg[F],
49-
F: Monad[F]
48+
F: BracketThrowable[F]
5049
) {
5150
private def printBanner: F[Unit] = {
5251
val banner =
@@ -60,27 +59,31 @@ final class StewardAlg[F[_]](implicit
6059
logger.info(msg)
6160
}
6261

63-
private def readRepos(reposFile: File): F[List[Repo]] =
64-
fileAlg.readFile(reposFile).map { maybeContent =>
65-
val regex = """-\s+(.+)/([^/]+)""".r
66-
val content = maybeContent.getOrElse("")
67-
content.linesIterator.collect { case regex(owner, repo) =>
68-
Repo(owner.trim, repo.trim)
69-
}.toList
62+
private def readRepos(reposFile: File): Stream[F, Repo] =
63+
Stream.evals {
64+
fileAlg.readFile(reposFile).map { maybeContent =>
65+
val regex = """-\s+(.+)/([^/]+)""".r
66+
val content = maybeContent.getOrElse("")
67+
content.linesIterator.collect { case regex(owner, repo) =>
68+
Repo(owner.trim, repo.trim)
69+
}.toList
70+
}
7071
}
7172

7273
private def steward(repo: Repo): F[Either[Throwable, Unit]] = {
7374
val label = s"Steward ${repo.show}"
7475
logger.infoTotalTime(label) {
75-
for {
76-
_ <- logger.info(util.string.lineLeftRight(label))
77-
_ <- repoCacheAlg.checkCache(repo)
78-
(attentionNeeded, updates) <- pruningAlg.needsAttention(repo)
79-
result <- {
80-
if (attentionNeeded) nurtureAlg.nurture(repo, updates)
81-
else gitAlg.removeClone(repo).as(().asRight[Throwable])
82-
}
83-
} yield result
76+
F.guarantee {
77+
for {
78+
_ <- logger.info(util.string.lineLeftRight(label))
79+
_ <- repoCacheAlg.checkCache(repo)
80+
(attentionNeeded, updates) <- pruningAlg.needsAttention(repo)
81+
result <- {
82+
if (attentionNeeded) nurtureAlg.nurture(repo, updates)
83+
else F.pure(().asRight[Throwable])
84+
}
85+
} yield result
86+
}(gitAlg.removeClone(repo))
8487
}
8588
}
8689

@@ -89,12 +92,13 @@ final class StewardAlg[F[_]](implicit
8992
for {
9093
_ <- printBanner
9194
_ <- selfCheckAlg.checkAll
95+
_ <- workspaceAlg.cleanWorkspace
9296
exitCode <- sbtAlg.addGlobalPlugins {
93-
for {
94-
_ <- workspaceAlg.cleanWorkspace
95-
repos <- readRepos(config.reposFile)
96-
result <- Stream.emits(repos).evalMap(steward).compile.foldMonoid
97-
} yield result.fold(_ => ExitCode.Error, _ => ExitCode.Success)
97+
readRepos(config.reposFile)
98+
.evalMap(steward)
99+
.compile
100+
.foldMonoid
101+
.map(_.fold(_ => ExitCode.Error, _ => ExitCode.Success))
98102
}
99103
} yield exitCode
100104
}

modules/core/src/main/scala/org/scalasteward/core/nurture/NurtureAlg.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616

1717
package org.scalasteward.core.nurture
1818

19-
import cats.effect.Sync
19+
import cats.Applicative
2020
import cats.implicits._
2121
import eu.timepit.refined.types.numeric.PosInt
22+
import fs2.Stream
2223
import io.chrisdavenport.log4cats.Logger
2324
import org.scalasteward.core.application.Config
2425
import org.scalasteward.core.coursier.CoursierAlg
@@ -30,7 +31,7 @@ import org.scalasteward.core.repocache.RepoCacheRepository
3031
import org.scalasteward.core.repoconfig.{PullRequestUpdateStrategy, RepoConfigAlg}
3132
import org.scalasteward.core.scalafix.MigrationAlg
3233
import org.scalasteward.core.util.logger.LoggerOps
33-
import org.scalasteward.core.util.{DateTimeAlg, HttpExistenceClient}
34+
import org.scalasteward.core.util.{BracketThrowable, DateTimeAlg, HttpExistenceClient}
3435
import org.scalasteward.core.vcs.data.{NewPullRequestData, Repo}
3536
import org.scalasteward.core.vcs.{VCSApiAlg, VCSExtraAlg, VCSRepoAlg}
3637
import org.scalasteward.core.{git, util, vcs}
@@ -50,15 +51,16 @@ final class NurtureAlg[F[_]](implicit
5051
migrationAlg: MigrationAlg,
5152
pullRequestRepository: PullRequestRepository[F],
5253
repoCacheRepository: RepoCacheRepository[F],
53-
F: Sync[F]
54+
streamCompiler: Stream.Compiler[F, F],
55+
F: BracketThrowable[F]
5456
) {
5557
def nurture(repo: Repo, updates: List[Update.Single]): F[Either[Throwable, Unit]] = {
5658
val label = s"Nurture ${repo.show}"
5759
logger.infoTotalTime(label) {
5860
logger.attemptLog(util.string.lineLeftRight(label)) {
59-
F.bracket(cloneAndSync(repo)) { case (fork, baseBranch) =>
61+
cloneAndSync(repo).flatMap { case (fork, baseBranch) =>
6062
updateDependencies(repo, fork, baseBranch, updates)
61-
}(_ => gitAlg.removeClone(repo))
63+
}
6264
}
6365
}
6466
}
@@ -232,15 +234,15 @@ final class NurtureAlg[F[_]](implicit
232234
}
233235

234236
object NurtureAlg {
235-
def processUpdates[F[_]: Sync](
237+
def processUpdates[F[_]](
236238
updates: List[Update],
237239
updateF: Update => F[ProcessResult],
238240
updatesLimit: Option[PosInt]
239-
): F[Unit] =
241+
)(implicit streamCompiler: Stream.Compiler[F, F], F: Applicative[F]): F[Unit] =
240242
updatesLimit match {
241243
case None => updates.traverse_(updateF)
242244
case Some(limit) =>
243-
fs2.Stream
245+
Stream
244246
.emits(updates)
245247
.evalMap(updateF)
246248
.through(util.takeUntil(limit.value) {

0 commit comments

Comments
 (0)