1717package org .scalasteward .core .nurture
1818
1919import cats .Applicative
20- import cats .effect .BracketThrow
20+ import cats .effect .{BracketThrow , Sync }
21+ import cats .effect .concurrent .Ref
2122import cats .implicits ._
2223import eu .timepit .refined .types .numeric .NonNegInt
2324import fs2 .Stream
@@ -49,13 +50,15 @@ final class NurtureAlg[F[_]](config: Config)(implicit
4950 vcsRepoAlg : VCSRepoAlg [F ],
5051 streamCompiler : Stream .Compiler [F , F ],
5152 urlChecker : UrlChecker [F ],
52- F : BracketThrow [F ]
53+ F : BracketThrow [F ],
54+ FS : Sync [F ]
5355) {
5456 def nurture (data : RepoData , fork : RepoOut , updates : List [Update .Single ]): F [Unit ] =
5557 for {
5658 _ <- logger.info(s " Nurture ${data.repo.show}" )
5759 baseBranch <- cloneAndSync(data.repo, fork)
58- _ <- updateDependencies(data, fork.repo, baseBranch, updates)
60+ seenBranches <- Ref [F ].of(List .empty[Branch ])
61+ _ <- updateDependencies(data, fork.repo, baseBranch, updates, seenBranches)
5962 } yield ()
6063
6164 def cloneAndSync (repo : Repo , fork : RepoOut ): F [Branch ] =
@@ -68,7 +71,8 @@ final class NurtureAlg[F[_]](config: Config)(implicit
6871 data : RepoData ,
6972 fork : Repo ,
7073 baseBranch : Branch ,
71- updates : List [Update .Single ]
74+ updates : List [Update .Single ],
75+ seenBranches : Ref [F , List [Branch ]]
7276 ): F [Unit ] =
7377 for {
7478 _ <- F .unit
@@ -82,8 +86,13 @@ final class NurtureAlg[F[_]](config: Config)(implicit
8286 UpdateData (data, fork, update, baseBranch, baseSha1, git.branchFor(update))
8387 processUpdate(updateData).flatMap {
8488 case result @ Created (newPrNumber) =>
85- closeObsoletePullRequests(updateData, newPrNumber).as[ProcessResult ](result)
86- case result @ _ => F .pure(result)
89+ (for {
90+ _ <- closeObsoletePullRequests(updateData, newPrNumber)
91+ _ <- seenBranches.update(updateData.updateBranch :: _)
92+ } yield ()).as[ProcessResult ](result)
93+ case result @ Updated =>
94+ seenBranches.update(updateData.updateBranch :: _).as[ProcessResult ](result)
95+ case result @ Ignored => F .pure(result)
8796 }
8897 },
8998 data.config.updates.limit
0 commit comments