Skip to content

Commit 278d32d

Browse files
authored
Merge pull request #1635 from scala-steward-org/topic/clean-vcsapialg
Clean up and remove duplication in VCSApiAlg
2 parents 90c70ed + 68fac57 commit 278d32d

File tree

6 files changed

+29
-51
lines changed

6 files changed

+29
-51
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ final class NurtureAlg[F[_]](implicit
6666
def cloneAndSync(repo: Repo): F[(Repo, Branch)] =
6767
for {
6868
_ <- logger.info(s"Clone and synchronize ${repo.show}")
69-
repoOut <- vcsApiAlg.createForkOrGetRepo(config, repo)
69+
repoOut <- vcsApiAlg.createForkOrGetRepo(repo, config.doNotFork)
7070
_ <-
7171
gitAlg
7272
.cloneExists(repo)
7373
.ifM(F.unit, vcsRepoAlg.clone(repo, repoOut) >> vcsRepoAlg.syncFork(repo, repoOut))
74-
defaultBranch <- vcsRepoAlg.defaultBranch(repoOut)
74+
defaultBranch <- vcsApiAlg.parentOrRepo(repoOut, config.doNotFork).map(_.default_branch)
7575
} yield (repoOut.repo, defaultBranch)
7676

7777
def updateDependencies(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ final class RepoCacheAlg[F[_]](implicit
4848
logger.info(s"Skipping due to previous error"),
4949
for {
5050
((repoOut, branchOut), cachedSha1) <- (
51-
vcsApiAlg.createForkOrGetRepoWithDefaultBranch(config, repo),
51+
vcsApiAlg.createForkOrGetRepoWithDefaultBranch(repo, config.doNotFork),
5252
repoCacheRepository.findSha1(repo)
5353
).parTupled
5454
latestSha1 = branchOut.commit.sha

modules/core/src/main/scala/org/scalasteward/core/vcs/VCSApiAlg.scala

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

1717
package org.scalasteward.core.vcs
1818

19-
import cats.Monad
2019
import cats.syntax.all._
21-
import org.scalasteward.core.application.Config
2220
import org.scalasteward.core.git.Branch
23-
import org.scalasteward.core.util.MonadThrowable
21+
import org.scalasteward.core.util.{ApplicativeThrowable, MonadThrowable}
2422
import org.scalasteward.core.vcs.data._
2523

2624
trait VCSApiAlg[F[_]] {
@@ -34,33 +32,27 @@ trait VCSApiAlg[F[_]] {
3432

3533
def listPullRequests(repo: Repo, head: String, base: Branch): F[List[PullRequestOut]]
3634

37-
final def createForkOrGetRepo(config: Config, repo: Repo): F[RepoOut] =
38-
if (config.doNotFork) getRepo(repo)
39-
else createFork(repo)
35+
final def createForkOrGetRepo(repo: Repo, doNotFork: Boolean): F[RepoOut] =
36+
if (doNotFork) getRepo(repo) else createFork(repo)
4037

41-
final def createForkOrGetRepoWithDefaultBranch(config: Config, repo: Repo)(implicit
38+
final def createForkOrGetRepoWithDefaultBranch(repo: Repo, doNotFork: Boolean)(implicit
4239
F: MonadThrowable[F]
4340
): F[(RepoOut, BranchOut)] =
44-
if (config.doNotFork) getRepoWithDefaultBranch(repo)
45-
else createForkWithDefaultBranch(repo)
41+
for {
42+
forkOrRepo <- createForkOrGetRepo(repo, doNotFork)
43+
defaultBranch <- getDefaultBranchOfParentOrRepo(forkOrRepo, doNotFork)
44+
} yield (forkOrRepo, defaultBranch)
4645

47-
final def createForkWithDefaultBranch(repo: Repo)(implicit
46+
final def getDefaultBranchOfParentOrRepo(repoOut: RepoOut, doNotFork: Boolean)(implicit
4847
F: MonadThrowable[F]
49-
): F[(RepoOut, BranchOut)] =
50-
for {
51-
fork <- createFork(repo)
52-
parent <- fork.parentOrRaise[F]
53-
branchOut <- getDefaultBranch(parent)
54-
} yield (fork, branchOut)
48+
): F[BranchOut] =
49+
parentOrRepo(repoOut, doNotFork).flatMap(getDefaultBranch)
5550

56-
final def getRepoWithDefaultBranch(repo: Repo)(implicit
57-
F: Monad[F]
58-
): F[(RepoOut, BranchOut)] =
59-
for {
60-
repoOut <- getRepo(repo)
61-
branchOut <- getDefaultBranch(repoOut)
62-
} yield (repoOut, branchOut)
51+
final def parentOrRepo(repoOut: RepoOut, doNotFork: Boolean)(implicit
52+
F: ApplicativeThrowable[F]
53+
): F[RepoOut] =
54+
if (doNotFork) F.pure(repoOut) else repoOut.parentOrRaise[F]
6355

64-
final def getDefaultBranch(repoOut: RepoOut): F[BranchOut] =
56+
private def getDefaultBranch(repoOut: RepoOut): F[BranchOut] =
6557
getBranch(repoOut.repo, repoOut.default_branch)
6658
}

modules/core/src/main/scala/org/scalasteward/core/vcs/VCSRepoAlg.scala

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,14 @@ import cats.syntax.all._
2020
import org.http4s.Uri
2121
import org.http4s.Uri.UserInfo
2222
import org.scalasteward.core.application.Config
23-
import org.scalasteward.core.git.{Branch, GitAlg}
23+
import org.scalasteward.core.git.GitAlg
2424
import org.scalasteward.core.util
2525
import org.scalasteward.core.util.MonadThrowable
2626
import org.scalasteward.core.vcs.data.{Repo, RepoOut}
2727

2828
trait VCSRepoAlg[F[_]] {
2929
def clone(repo: Repo, repoOut: RepoOut): F[Unit]
3030

31-
def defaultBranch(repoOut: RepoOut): F[Branch]
32-
3331
def syncFork(repo: Repo, repoOut: RepoOut): F[Unit]
3432
}
3533

@@ -42,10 +40,6 @@ object VCSRepoAlg {
4240
_ <- gitAlg.setAuthor(repo, config.gitAuthor)
4341
} yield ()
4442

45-
override def defaultBranch(repoOut: RepoOut): F[Branch] =
46-
if (config.doNotFork) repoOut.default_branch.pure[F]
47-
else repoOut.parentOrRaise[F].map(_.default_branch)
48-
4943
override def syncFork(repo: Repo, repoOut: RepoOut): F[Unit] =
5044
if (config.doNotFork) ().pure[F]
5145
else

modules/core/src/test/scala/org/scalasteward/core/bitbucket/http4s/Http4sBitbucketApiAlgTest.scala

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,29 +161,25 @@ class Http4sBitbucketApiAlgTest extends AnyFunSuite with Matchers {
161161
val pullRequest = PullRequestOut(prUrl, PullRequestState.Open, "scala-steward-pr")
162162

163163
test("createForkOrGetRepo") {
164-
val repoOut =
165-
bitbucketApiAlg.createForkOrGetRepo(config, repo).unsafeRunSync()
164+
val repoOut = bitbucketApiAlg.createForkOrGetRepo(repo, doNotFork = false).unsafeRunSync()
166165
repoOut shouldBe fork
167166
}
168167

169168
test("createForkOrGetRepo without forking") {
170-
val repoOut =
171-
bitbucketApiAlg.createForkOrGetRepo(config.copy(doNotFork = true), repo).unsafeRunSync()
169+
val repoOut = bitbucketApiAlg.createForkOrGetRepo(repo, doNotFork = true).unsafeRunSync()
172170
repoOut shouldBe parent
173171
}
174172

175173
test("createForkOrGetRepoWithDefaultBranch") {
176174
val (repoOut, branchOut) =
177-
bitbucketApiAlg.createForkOrGetRepoWithDefaultBranch(config, repo).unsafeRunSync()
175+
bitbucketApiAlg.createForkOrGetRepoWithDefaultBranch(repo, doNotFork = false).unsafeRunSync()
178176
repoOut shouldBe fork
179177
branchOut shouldBe defaultBranch
180178
}
181179

182180
test("createForkOrGetRepoWithDefaultBranch without forking") {
183181
val (repoOut, branchOut) =
184-
bitbucketApiAlg
185-
.createForkOrGetRepoWithDefaultBranch(config.copy(doNotFork = true), repo)
186-
.unsafeRunSync()
182+
bitbucketApiAlg.createForkOrGetRepoWithDefaultBranch(repo, doNotFork = true).unsafeRunSync()
187183
repoOut shouldBe parent
188184
branchOut shouldBe defaultBranch
189185
}
@@ -193,7 +189,7 @@ class Http4sBitbucketApiAlgTest extends AnyFunSuite with Matchers {
193189
"scala-steward-pr",
194190
"body",
195191
"master",
196-
Branch("master")
192+
master
197193
)
198194
val pr = bitbucketApiAlg.createPullRequest(repo, data).unsafeRunSync()
199195
pr shouldBe pullRequest

modules/core/src/test/scala/org/scalasteward/core/github/http4s/Http4sGitHubApiAlgTest.scala

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,29 +85,25 @@ class Http4sGitHubApiAlgTest extends AnyFunSuite with Matchers {
8585
)
8686

8787
test("createForkOrGetRepo") {
88-
val repoOut =
89-
gitHubApiAlg.createForkOrGetRepo(config, repo).unsafeRunSync()
88+
val repoOut = gitHubApiAlg.createForkOrGetRepo(repo, doNotFork = false).unsafeRunSync()
9089
repoOut shouldBe fork
9190
}
9291

9392
test("createForkOrGetRepo without forking") {
94-
val repoOut =
95-
gitHubApiAlg.createForkOrGetRepo(config.copy(doNotFork = true), repo).unsafeRunSync()
93+
val repoOut = gitHubApiAlg.createForkOrGetRepo(repo, doNotFork = true).unsafeRunSync()
9694
repoOut shouldBe parent
9795
}
9896

9997
test("createForkOrGetRepoWithDefaultBranch") {
10098
val (repoOut, branchOut) =
101-
gitHubApiAlg.createForkOrGetRepoWithDefaultBranch(config, repo).unsafeRunSync()
99+
gitHubApiAlg.createForkOrGetRepoWithDefaultBranch(repo, doNotFork = false).unsafeRunSync()
102100
repoOut shouldBe fork
103101
branchOut shouldBe defaultBranch
104102
}
105103

106104
test("createForkOrGetRepoWithDefaultBranch without forking") {
107105
val (repoOut, branchOut) =
108-
gitHubApiAlg
109-
.createForkOrGetRepoWithDefaultBranch(config.copy(doNotFork = true), repo)
110-
.unsafeRunSync()
106+
gitHubApiAlg.createForkOrGetRepoWithDefaultBranch(repo, doNotFork = true).unsafeRunSync()
111107
repoOut shouldBe parent
112108
branchOut shouldBe defaultBranch
113109
}

0 commit comments

Comments
 (0)