diff --git a/src/main/kotlin/app/exceptions/UncommitedChangesDetectedException.kt b/src/main/kotlin/app/exceptions/UncommitedChangesDetectedException.kt new file mode 100644 index 0000000..f7f7229 --- /dev/null +++ b/src/main/kotlin/app/exceptions/UncommitedChangesDetectedException.kt @@ -0,0 +1,3 @@ +package app.exceptions + +class UncommitedChangesDetectedException(msg: String) : GitnuroException(msg) \ No newline at end of file diff --git a/src/main/kotlin/app/git/MergeManager.kt b/src/main/kotlin/app/git/MergeManager.kt index b0b90f2..dac4e55 100644 --- a/src/main/kotlin/app/git/MergeManager.kt +++ b/src/main/kotlin/app/git/MergeManager.kt @@ -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) { diff --git a/src/main/kotlin/app/git/RebaseManager.kt b/src/main/kotlin/app/git/RebaseManager.kt index f46b918..eb88772 100644 --- a/src/main/kotlin/app/git/RebaseManager.kt +++ b/src/main/kotlin/app/git/RebaseManager.kt @@ -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) {