@@ -124,6 +124,23 @@ class GitAlgTest extends AnyFunSuite with Matchers {
124124 } yield (c1, m1, c2, m2)
125125 p.unsafeRunSync() shouldBe ((true , false , false , true ))
126126 }
127+
128+ test(" mergeTheirs2" ) {
129+ val repo = Repo (" merge" , " theirs2" )
130+ val p = for {
131+ repoDir <- workspaceAlg.repoDir(repo)
132+ _ <- GitAlgTest .createGitRepoWithConflictFileRemovedOnMaster[IO ](repoDir)
133+ master = Branch (" master" )
134+ branch = Branch (" conflicts-yes" )
135+ c1 <- ioGitAlg.hasConflicts(repo, branch, master)
136+ m1 <- ioGitAlg.isMerged(repo, master, branch)
137+ _ <- ioGitAlg.checkoutBranch(repo, branch)
138+ _ <- ioGitAlg.mergeTheirs(repo, master)
139+ c2 <- ioGitAlg.hasConflicts(repo, branch, master)
140+ m2 <- ioGitAlg.isMerged(repo, master, branch)
141+ } yield (c1, m1, c2, m2)
142+ p.unsafeRunSync() shouldBe ((true , false , false , true ))
143+ }
127144}
128145
129146object GitAlgTest {
@@ -154,9 +171,43 @@ object GitAlgTest {
154171 _ <- processAlg.exec(Nel .of(" git" , " add" , " file2" ), repoDir)
155172 _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Modify file2 on conflicts-yes" ), repoDir)
156173 _ <- processAlg.exec(Nel .of(" git" , " checkout" , " master" ), repoDir)
174+ // work on conflicts-yes (file removed on base branch)
175+ _ <- processAlg.exec(Nel .of(" git" , " checkout" , " -b" , " conflicts-yes-file-removed" ), repoDir)
176+ _ <- fileAlg.writeFile(repoDir / " file2" , " file2, line1\n file2, line2 on conflicts-yes" )
177+ _ <- processAlg.exec(Nel .of(" git" , " add" , " file2" ), repoDir)
178+ _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Modify file2 on conflicts-yes" ), repoDir)
179+ _ <- processAlg.exec(Nel .of(" git" , " checkout" , " master" ), repoDir)
157180 // work on master
158181 _ <- fileAlg.writeFile(repoDir / " file2" , " file2, line1\n file2, line2 on master" )
159182 _ <- processAlg.exec(Nel .of(" git" , " add" , " file2" ), repoDir)
160183 _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Modify file2 on master" ), repoDir)
161184 } yield ()
185+
186+ def createGitRepoWithConflictFileRemovedOnMaster [F [_]](repoDir : File )(
187+ implicit
188+ fileAlg : FileAlg [F ],
189+ processAlg : ProcessAlg [F ],
190+ F : Monad [F ]
191+ ): F [Unit ] =
192+ for {
193+ _ <- fileAlg.deleteForce(repoDir)
194+ _ <- fileAlg.ensureExists(repoDir)
195+ _ <- processAlg.exec(Nel .of(" git" , " init" , " ." ), repoDir)
196+ // work on master
197+ _ <- fileAlg.writeFile(repoDir / " file1" , " file1, line1" )
198+ _ <- fileAlg.writeFile(repoDir / " file2" , " file2, line1" )
199+ _ <- processAlg.exec(Nel .of(" git" , " add" , " file1" ), repoDir)
200+ _ <- processAlg.exec(Nel .of(" git" , " add" , " file2" ), repoDir)
201+ _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Initial commit" ), repoDir)
202+ // work on conflicts-yes
203+ _ <- processAlg.exec(Nel .of(" git" , " checkout" , " -b" , " conflicts-yes" ), repoDir)
204+ _ <- fileAlg.writeFile(repoDir / " file2" , " file2, line1\n file2, line2 on conflicts-yes" )
205+ _ <- processAlg.exec(Nel .of(" git" , " add" , " file2" ), repoDir)
206+ _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Modify file2 on conflicts-yes" ), repoDir)
207+ _ <- processAlg.exec(Nel .of(" git" , " checkout" , " master" ), repoDir)
208+ // work on master
209+ _ <- processAlg.exec(Nel .of(" git" , " rm" , " file2" ), repoDir)
210+ _ <- processAlg.exec(Nel .of(" git" , " add" , " -A" ), repoDir)
211+ _ <- processAlg.exec(Nel .of(" git" , " commit" , " -m" , " Remove file2 on master" ), repoDir)
212+ } yield ()
162213}
0 commit comments