35 lines
1.3 KiB
Kotlin
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
|
|
}
|
|
} |