Skip to content

Commit 3bf3f64

Browse files
author
Devon Stewart
committed
Break out ApplyAlg
1 parent 32b3a7a commit 3bf3f64

File tree

3 files changed

+80
-36
lines changed

3 files changed

+80
-36
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import org.scalasteward.core.edit.hooks.HookExecutor
3232
import org.scalasteward.core.edit.scalafix.{ScalafixMigrationsFinder, ScalafixMigrationsLoader}
3333
import org.scalasteward.core.git.{GenGitAlg, GitAlg}
3434
import org.scalasteward.core.io.{FileAlg, ProcessAlg, WorkspaceAlg}
35-
import org.scalasteward.core.nurture.{NurtureAlg, PullRequestData, PullRequestRepository}
35+
import org.scalasteward.core.nurture.{ApplyAlg, NurtureAlg, PullRequestData, PullRequestRepository}
3636
import org.scalasteward.core.persistence.{CachingKeyValueStore, JsonKeyValueStore}
3737
import org.scalasteward.core.repocache._
3838
import org.scalasteward.core.repoconfig.RepoConfigAlg
@@ -47,6 +47,7 @@ import org.typelevel.log4cats.Logger
4747
import org.typelevel.log4cats.slf4j.Slf4jLogger
4848

4949
final class Context[F[_]](implicit
50+
val applyAlg: ApplyAlg[F],
5051
val buildToolDispatcher: BuildToolDispatcher[F],
5152
val coursierAlg: CoursierAlg[F],
5253
val dateTimeAlg: DateTimeAlg[F],
@@ -146,6 +147,7 @@ object Context {
146147
implicit val refreshErrorAlg: RefreshErrorAlg[F] = new RefreshErrorAlg[F](refreshErrorStore)
147148
implicit val repoCacheAlg: RepoCacheAlg[F] = new RepoCacheAlg[F](config)
148149
implicit val editAlg: EditAlg[F] = new EditAlg[F]
150+
implicit val applyAlg: ApplyAlg[F] = new ApplyAlg[F]
149151
implicit val nurtureAlg: NurtureAlg[F] = new NurtureAlg[F](config)
150152
implicit val pruningAlg: PruningAlg[F] = new PruningAlg[F]
151153
implicit val gitHubAppApiAlg: GitHubAppApiAlg[F] = new GitHubAppApiAlg[F](config.vcsApiHost)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright 2018-2021 Scala Steward contributors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.scalasteward.core.nurture
18+
19+
import cats.effect.BracketThrow
20+
import cats.implicits._
21+
import org.typelevel.log4cats.Logger
22+
import org.scalasteward.core.data.ProcessResult.Ignored
23+
import org.scalasteward.core.data._
24+
import org.scalasteward.core.edit.EditAlg
25+
import org.scalasteward.core.git.{Branch, Commit, GitAlg}
26+
27+
final class ApplyAlg[F[_]](implicit
28+
editAlg: EditAlg[F],
29+
gitAlg: GitAlg[F],
30+
logger: Logger[F],
31+
F: BracketThrow[F]
32+
) {
33+
def applyNewUpdate(
34+
data: UpdateData,
35+
seenBranches: List[Branch],
36+
pushCommits: (UpdateData, List[Commit]) => F[ProcessResult],
37+
createPullRequest: UpdateData => F[ProcessResult]
38+
): F[ProcessResult] =
39+
gitAlg.returnToCurrentBranch(data.repo) {
40+
val createBranch = logger.info(s"Create branch ${data.updateBranch.name}") >>
41+
gitAlg.createBranch(data.repo, data.updateBranch)
42+
editAlg.applyUpdate(data.repoData, data.update, createBranch).flatMap { editCommits =>
43+
if (editCommits.isEmpty) logger.warn("No commits created").as(Ignored)
44+
else
45+
seenBranches
46+
.forallM(gitAlg.diff(data.repo, _).map(_.nonEmpty))
47+
.ifM(
48+
pushCommits(data, editCommits) >> createPullRequest(data),
49+
logger.warn("Discovered a duplicate branch, not pushing").as[ProcessResult](Ignored)
50+
)
51+
}
52+
}
53+
54+
def mergeAndApplyAgain(
55+
data: UpdateData,
56+
seenBranches: List[Branch],
57+
pushCommits: (UpdateData, List[Commit]) => F[ProcessResult]
58+
): F[ProcessResult] =
59+
for {
60+
_ <- logger.info(
61+
s"Merge branch ${data.baseBranch.name} into ${data.updateBranch.name} and apply again"
62+
)
63+
maybeMergeCommit <- gitAlg.mergeTheirs(data.repo, data.baseBranch)
64+
editCommits <- editAlg.applyUpdate(data.repoData, data.update)
65+
result <-
66+
seenBranches
67+
.forallM(gitAlg.diff(data.repo, _).map(_.nonEmpty))
68+
.ifM(
69+
pushCommits(data, maybeMergeCommit.toList ++ editCommits),
70+
logger.warn("Discovered a duplicate branch, not pushing").as[ProcessResult](Ignored)
71+
)
72+
} yield result
73+
}

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

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import org.scalasteward.core.application.Config
2828
import org.scalasteward.core.coursier.CoursierAlg
2929
import org.scalasteward.core.data.ProcessResult.{Created, Ignored, Updated}
3030
import org.scalasteward.core.data._
31-
import org.scalasteward.core.edit.EditAlg
3231
import org.scalasteward.core.git.{Branch, Commit, GitAlg}
3332
import org.scalasteward.core.repoconfig.PullRequestUpdateStrategy
3433
import org.scalasteward.core.edit.scalafix.ScalafixMigrationsFinder
@@ -40,7 +39,6 @@ import org.scalasteward.core.{git, util, vcs}
4039

4140
final class NurtureAlg[F[_]](config: Config)(implicit
4241
coursierAlg: CoursierAlg[F],
43-
editAlg: EditAlg[F],
4442
gitAlg: GitAlg[F],
4543
logger: Logger[F],
4644
pullRequestRepository: PullRequestRepository[F],
@@ -50,6 +48,7 @@ final class NurtureAlg[F[_]](config: Config)(implicit
5048
vcsRepoAlg: VCSRepoAlg[F],
5149
streamCompiler: Stream.Compiler[F, F],
5250
urlChecker: UrlChecker[F],
51+
applyAlg: ApplyAlg[F],
5352
F: BracketThrow[F],
5453
FS: Sync[F]
5554
) {
@@ -115,7 +114,7 @@ final class NurtureAlg[F[_]](config: Config)(implicit
115114
case Some(pr) =>
116115
logger.info(s"Found PR ${pr.html_url}") >> updatePullRequest(data, seenBranches)
117116
case None =>
118-
applyNewUpdate(data, seenBranches)
117+
applyAlg.applyNewUpdate(data, seenBranches, pushCommits, createPullRequest)
119118
}
120119
_ <- pullRequests.headOption.traverse_ { pr =>
121120
pullRequestRepository.createOrUpdate(
@@ -159,22 +158,6 @@ final class NurtureAlg[F[_]](config: Config)(implicit
159158
gitAlg.removeBranch(repo, branch)
160159
}
161160

162-
def applyNewUpdate(data: UpdateData, seenBranches: List[Branch]): F[ProcessResult] =
163-
gitAlg.returnToCurrentBranch(data.repo) {
164-
val createBranch = logger.info(s"Create branch ${data.updateBranch.name}") >>
165-
gitAlg.createBranch(data.repo, data.updateBranch)
166-
editAlg.applyUpdate(data.repoData, data.update, createBranch).flatMap { editCommits =>
167-
if (editCommits.isEmpty) logger.warn("No commits created").as(Ignored)
168-
else
169-
seenBranches
170-
.forallM(gitAlg.diff(data.repo, _).map(_.nonEmpty))
171-
.ifM(
172-
pushCommits(data, editCommits) >> createPullRequest(data),
173-
logger.warn("Discovered a duplicate branch, not pushing").as[ProcessResult](Ignored)
174-
)
175-
}
176-
}
177-
178161
def pushCommits(data: UpdateData, commits: List[Commit]): F[ProcessResult] =
179162
if (commits.isEmpty) F.pure[ProcessResult](Ignored)
180163
else
@@ -227,7 +210,8 @@ final class NurtureAlg[F[_]](config: Config)(implicit
227210
_ <- gitAlg.checkoutBranch(data.repo, data.updateBranch)
228211
update <- shouldBeUpdated(data)
229212
result <-
230-
if (update) mergeAndApplyAgain(data, seenBranches) else F.pure[ProcessResult](Ignored)
213+
if (update) applyAlg.mergeAndApplyAgain(data, seenBranches, pushCommits)
214+
else F.pure[ProcessResult](Ignored)
231215
} yield result
232216
}
233217
else
@@ -253,21 +237,6 @@ final class NurtureAlg[F[_]](config: Config)(implicit
253237
result.flatMap { case (update, msg) => logger.info(msg).as(update) }
254238
}
255239

256-
def mergeAndApplyAgain(data: UpdateData, seenBranches: List[Branch]): F[ProcessResult] =
257-
for {
258-
_ <- logger.info(
259-
s"Merge branch ${data.baseBranch.name} into ${data.updateBranch.name} and apply again"
260-
)
261-
maybeMergeCommit <- gitAlg.mergeTheirs(data.repo, data.baseBranch)
262-
editCommits <- editAlg.applyUpdate(data.repoData, data.update)
263-
result <-
264-
seenBranches
265-
.forallM(gitAlg.diff(data.repo, _).map(_.nonEmpty))
266-
.ifM(
267-
pushCommits(data, maybeMergeCommit.toList ++ editCommits),
268-
logger.warn("Discovered a duplicate branch, not pushing").as[ProcessResult](Ignored)
269-
)
270-
} yield result
271240
}
272241

273242
object NurtureAlg {

0 commit comments

Comments
 (0)