Added exception throwing when rebase/merge failed due to uncommited changes

This commit is contained in:
Abdelilah El Aissaoui 2022-04-08 21:43:47 +02:00
parent 4f84c38fb4
commit 1f58114404
3 changed files with 17 additions and 2 deletions

View File

@ -0,0 +1,3 @@
package app.exceptions
class UncommitedChangesDetectedException(msg: String) : GitnuroException(msg)

View File

@ -1,9 +1,11 @@
package app.git
import app.exceptions.UncommitedChangesDetectedException
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.api.ResetCommand
import org.eclipse.jgit.lib.Ref
import org.eclipse.jgit.revwalk.RevCommit
@ -16,11 +18,15 @@ class MergeManager @Inject constructor() {
else
MergeCommand.FastForwardMode.NO_FF
git
val mergeResult = git
.merge()
.include(branch)
.setFastForward(fastForwardMode)
.call()
if(mergeResult.mergeStatus == MergeResult.MergeStatus.FAILED) {
throw UncommitedChangesDetectedException("Merge failed, makes sure you repository doesn't contain uncommited changes.")
}
}
suspend fun abortMerge(git: Git) = withContext(Dispatchers.IO) {

View File

@ -1,19 +1,25 @@
package app.git
import app.exceptions.UncommitedChangesDetectedException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.api.RebaseCommand
import org.eclipse.jgit.api.RebaseResult
import org.eclipse.jgit.lib.Ref
import javax.inject.Inject
class RebaseManager @Inject constructor() {
suspend fun rebaseBranch(git: Git, ref: Ref) = withContext(Dispatchers.IO) {
git.rebase()
val rebaseResult = git.rebase()
.setOperation(RebaseCommand.Operation.BEGIN)
.setUpstream(ref.objectId)
.call()
if(rebaseResult.status == RebaseResult.Status.UNCOMMITTED_CHANGES) {
throw UncommitedChangesDetectedException("Rebase failed, the repository contains uncommited changes.")
}
}
suspend fun continueRebase(git: Git) = withContext(Dispatchers.IO) {