Skip to content

Commit 1939b3b

Browse files
committed
Clean up VCSRepoAlg
1 parent e5dd20b commit 1939b3b

File tree

2 files changed

+47
-40
lines changed

2 files changed

+47
-40
lines changed

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

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,25 @@ final class VCSRepoAlg[F[_]](config: Config)(implicit
3333
F: MonadThrow[F]
3434
) {
3535
def cloneAndSync(repo: Repo, repoOut: RepoOut): F[Unit] =
36-
for {
37-
_ <-
38-
if (config.doNotFork) logger.info(s"Clone ${repo.show}")
39-
else logger.info(s"Clone and synchronize ${repo.show}")
40-
_ <- clone(repo, repoOut)
41-
_ <- syncFork(repo, repoOut)
42-
_ <- logger.attemptLogWarn_("Initializing and cloning submodules failed") {
43-
gitAlg.initSubmodules(repo)
44-
}
45-
} yield ()
36+
clone(repo, repoOut) >>
37+
(if (config.doNotFork) F.unit else syncFork(repo, repoOut)) >>
38+
initSubmodules(repo)
4639

4740
private def clone(repo: Repo, repoOut: RepoOut): F[Unit] =
48-
for {
49-
_ <- gitAlg.clone(repo, withLogin(repoOut.clone_url))
50-
_ <- gitAlg.setAuthor(repo, config.gitCfg.gitAuthor)
51-
} yield ()
41+
logger.info(s"Clone ${repoOut.repo.show}") >>
42+
gitAlg.clone(repo, withLogin(repoOut.clone_url)) >>
43+
gitAlg.setAuthor(repo, config.gitCfg.gitAuthor)
5244

53-
private[vcs] def syncFork(repo: Repo, repoOut: RepoOut): F[Unit] =
54-
if (config.doNotFork) F.unit
55-
else
56-
repoOut.parentOrRaise[F].flatMap { parent =>
45+
private def syncFork(repo: Repo, repoOut: RepoOut): F[Unit] =
46+
repoOut.parentOrRaise[F].flatMap { parent =>
47+
logger.info(s"Synchronize with ${parent.repo.show}") >>
5748
gitAlg.syncFork(repo, withLogin(parent.clone_url), parent.default_branch)
58-
}
49+
}
50+
51+
private def initSubmodules(repo: Repo): F[Unit] =
52+
logger.attemptLogWarn_("Initializing and cloning submodules failed") {
53+
gitAlg.initSubmodules(repo)
54+
}
5955

6056
private val withLogin: Uri => Uri =
6157
util.uri.withUserInfo.set(UserInfo(config.vcsLogin, None))

modules/core/src/test/scala/org/scalasteward/core/vcs/VCSRepoAlgTest.scala

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,37 @@ import org.scalasteward.core.mock.{MockContext, MockEff, MockState}
1010
import org.scalasteward.core.vcs.data.{Repo, RepoOut, UserOut}
1111

1212
class VCSRepoAlgTest extends FunSuite {
13-
val repo: Repo = Repo("fthomas", "datapackage")
14-
val repoDir: String = (config.workspace / "fthomas/datapackage").toString
15-
val parentRepoOut: RepoOut = RepoOut(
13+
private val repo = Repo("fthomas", "datapackage")
14+
private val repoDir = (config.workspace / "fthomas/datapackage").toString
15+
private val parentRepoOut = RepoOut(
1616
"datapackage",
1717
UserOut("fthomas"),
1818
None,
1919
uri"https://github.com/fthomas/datapackage",
2020
Branch("master")
2121
)
2222

23-
val forkRepoOut: RepoOut = RepoOut(
23+
private val forkRepoOut = RepoOut(
2424
"datapackage",
25-
UserOut("scalasteward"),
25+
UserOut("scala-steward"),
2626
Some(parentRepoOut),
2727
uri"https://github.com/scala-steward/datapackage",
2828
Branch("master")
2929
)
3030

31-
test("cloneAndSync") {
31+
private val parentUrl = s"https://${config.vcsLogin}@github.com/fthomas/datapackage"
32+
private val forkUrl = s"https://${config.vcsLogin}@github.com/scala-steward/datapackage"
33+
34+
test("cloneAndSync: doNotFork = false") {
3235
val state = vcsRepoAlg.cloneAndSync(repo, forkRepoOut).runS(MockState.empty).unsafeRunSync()
33-
val url0 = s"https://${config.vcsLogin}@github.com/fthomas/datapackage"
34-
val url1 = s"https://${config.vcsLogin}@github.com/scala-steward/datapackage"
3536
val expected = MockState.empty.copy(
3637
trace = Vector(
37-
Log("Clone and synchronize fthomas/datapackage"),
38-
Cmd(envVars, config.workspace.toString, "git", "clone", url1, repoDir),
38+
Log("Clone scala-steward/datapackage"),
39+
Cmd(envVars, config.workspace.toString, "git", "clone", forkUrl, repoDir),
3940
Cmd(envVars, repoDir, "git", "config", "user.email", "[email protected]"),
4041
Cmd(envVars, repoDir, "git", "config", "user.name", "Bot Doe"),
41-
Cmd(envVars, repoDir, "git", "remote", "add", "upstream", url0),
42+
Log("Synchronize with fthomas/datapackage"),
43+
Cmd(envVars, repoDir, "git", "remote", "add", "upstream", parentUrl),
4244
Cmd(envVars, repoDir, "git", "fetch", "--force", "--tags", "upstream", "master"),
4345
Cmd(envVars, repoDir, "git", "checkout", "-B", "master", "--track", "upstream/master"),
4446
Cmd(envVars, repoDir, "git", "merge", "upstream/master"),
@@ -49,21 +51,30 @@ class VCSRepoAlgTest extends FunSuite {
4951
assertEquals(state, expected)
5052
}
5153

52-
test("syncFork should throw an exception when doNotFork = false and there is no parent") {
53-
val result = vcsRepoAlg
54-
.syncFork(repo, parentRepoOut)
54+
test("cloneAndSync: doNotFork = true") {
55+
val config = MockContext.config.copy(doNotFork = true)
56+
val state = new VCSRepoAlg[MockEff](config)
57+
.cloneAndSync(repo, parentRepoOut)
5558
.runS(MockState.empty)
56-
.attempt
5759
.unsafeRunSync()
58-
assert(clue(result).isLeft)
60+
val expected = MockState.empty.copy(
61+
trace = Vector(
62+
Log("Clone fthomas/datapackage"),
63+
Cmd(envVars, config.workspace.toString, "git", "clone", parentUrl, repoDir),
64+
Cmd(envVars, repoDir, "git", "config", "user.email", "[email protected]"),
65+
Cmd(envVars, repoDir, "git", "config", "user.name", "Bot Doe"),
66+
Cmd(envVars, repoDir, "git", "submodule", "update", "--init", "--recursive")
67+
)
68+
)
69+
assertEquals(state, expected)
5970
}
6071

61-
test("syncFork should do nothing when doNotFork = true") {
62-
val config = MockContext.config.copy(doNotFork = true)
63-
val state = new VCSRepoAlg[MockEff](config)
64-
.syncFork(repo, parentRepoOut)
72+
test("cloneAndSync: doNotFork = false, no parent") {
73+
val result = vcsRepoAlg
74+
.cloneAndSync(repo, parentRepoOut)
6575
.runS(MockState.empty)
76+
.attempt
6677
.unsafeRunSync()
67-
assertEquals(state, MockState.empty)
78+
assert(clue(result).isLeft)
6879
}
6980
}

0 commit comments

Comments
 (0)