Gitnuro/src/main/kotlin/com/jetpackduba/gitnuro/git/branches/MergeBranchUseCase.kt
Abdelilah El Aissaoui e59fe7df69
Refactored user feedback.
Added warning/error messages
Change UI design
2024-08-02 16:24:55 +02:00

35 lines
1.3 KiB
Kotlin

package com.jetpackduba.gitnuro.git.branches
import com.jetpackduba.gitnuro.exceptions.ConflictsException
import com.jetpackduba.gitnuro.exceptions.UncommittedChangesDetectedException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.api.MergeCommand
import org.eclipse.jgit.api.MergeResult
import org.eclipse.jgit.lib.Ref
import javax.inject.Inject
class MergeBranchUseCase @Inject constructor() {
/**
* @return true if success has conflicts, false if success without conflicts
*/
suspend operator fun invoke(git: Git, branch: Ref, fastForward: Boolean) = withContext(Dispatchers.IO) {
val fastForwardMode = if (fastForward)
MergeCommand.FastForwardMode.FF
else
MergeCommand.FastForwardMode.NO_FF
val mergeResult = git
.merge()
.include(branch)
.setFastForward(fastForwardMode)
.call()
if (mergeResult.mergeStatus == MergeResult.MergeStatus.FAILED) {
throw UncommittedChangesDetectedException("Merge failed, makes sure you repository doesn't contain uncommitted changes.")
}
mergeResult.mergeStatus == MergeResult.MergeStatus.CONFLICTING
}
}