17
17
package org .scalasteward .core .nurture
18
18
19
19
import cats .Applicative
20
- import cats .effect .BracketThrow
20
+ import cats .effect .{BracketThrow , Sync }
21
+ import cats .effect .concurrent .Ref
21
22
import cats .implicits ._
22
23
import eu .timepit .refined .types .numeric .NonNegInt
23
24
import fs2 .Stream
@@ -49,13 +50,15 @@ final class NurtureAlg[F[_]](config: Config)(implicit
49
50
vcsRepoAlg : VCSRepoAlg [F ],
50
51
streamCompiler : Stream .Compiler [F , F ],
51
52
urlChecker : UrlChecker [F ],
52
- F : BracketThrow [F ]
53
+ F : BracketThrow [F ],
54
+ FS : Sync [F ]
53
55
) {
54
56
def nurture (data : RepoData , fork : RepoOut , updates : List [Update .Single ]): F [Unit ] =
55
57
for {
56
58
_ <- logger.info(s " Nurture ${data.repo.show}" )
57
59
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)
59
62
} yield ()
60
63
61
64
def cloneAndSync (repo : Repo , fork : RepoOut ): F [Branch ] =
@@ -68,7 +71,8 @@ final class NurtureAlg[F[_]](config: Config)(implicit
68
71
data : RepoData ,
69
72
fork : Repo ,
70
73
baseBranch : Branch ,
71
- updates : List [Update .Single ]
74
+ updates : List [Update .Single ],
75
+ seenBranches : Ref [F , List [Branch ]]
72
76
): F [Unit ] =
73
77
for {
74
78
_ <- F .unit
@@ -82,8 +86,13 @@ final class NurtureAlg[F[_]](config: Config)(implicit
82
86
UpdateData (data, fork, update, baseBranch, baseSha1, git.branchFor(update))
83
87
processUpdate(updateData).flatMap {
84
88
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)
87
96
}
88
97
},
89
98
data.config.updates.limit
0 commit comments