From 315387fafc9c135ea7f691788b54ef6356c57e2d Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Thu, 27 Oct 2022 20:17:42 +0200 Subject: [PATCH] Added error message when revert commit or start rebase interactive have failed --- .../gitnuro/exceptions/RevertCommitException.kt | 3 +-- .../gitnuro/git/log/RevertCommitUseCase.kt | 16 ++++++++++++++-- .../git/rebase/StartRebaseInteractiveUseCase.kt | 9 +++++++-- .../gitnuro/viewmodels/LogViewModel.kt | 1 + 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/exceptions/RevertCommitException.kt b/src/main/kotlin/com/jetpackduba/gitnuro/exceptions/RevertCommitException.kt index 54d2532..b60946b 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/exceptions/RevertCommitException.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/exceptions/RevertCommitException.kt @@ -1,4 +1,3 @@ package com.jetpackduba.gitnuro.exceptions -class RevertCommitException { -} \ No newline at end of file +class RevertCommitException(msg: String) : GitnuroException(msg) \ No newline at end of file diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/git/log/RevertCommitUseCase.kt b/src/main/kotlin/com/jetpackduba/gitnuro/git/log/RevertCommitUseCase.kt index 676a684..0b76660 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/git/log/RevertCommitUseCase.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/git/log/RevertCommitUseCase.kt @@ -1,16 +1,28 @@ package com.jetpackduba.gitnuro.git.log +import com.jetpackduba.gitnuro.exceptions.RevertCommitException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.eclipse.jgit.api.Git +import org.eclipse.jgit.api.MergeResult import org.eclipse.jgit.revwalk.RevCommit import javax.inject.Inject class RevertCommitUseCase @Inject constructor() { suspend operator fun invoke(git: Git, revCommit: RevCommit): Unit = withContext(Dispatchers.IO) { - git + val revertCommand = git .revert() .include(revCommit) - .call() + + revertCommand.call() + + val failingResult: MergeResult? = revertCommand.failingResult + + when (failingResult?.mergeStatus) { + MergeResult.MergeStatus.FAILED -> throw RevertCommitException("Revert failed. Clear your workspace from uncommited changes.") + MergeResult.MergeStatus.CONFLICTING -> throw RevertCommitException("Revert failed. Fix the conflicts and commit the desired changes.") + MergeResult.MergeStatus.ABORTED -> throw RevertCommitException("Revert aborted.") + else -> {} + } } } \ No newline at end of file diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/git/rebase/StartRebaseInteractiveUseCase.kt b/src/main/kotlin/com/jetpackduba/gitnuro/git/rebase/StartRebaseInteractiveUseCase.kt index fc39033..a08e47c 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/git/rebase/StartRebaseInteractiveUseCase.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/git/rebase/StartRebaseInteractiveUseCase.kt @@ -18,8 +18,13 @@ class StartRebaseInteractiveUseCase @Inject constructor() { .setUpstream(commit) .call() - if (rebaseResult.status == RebaseResult.Status.FAILED) { - throw UncommitedChangesDetectedException("Rebase interactive failed.") + when (rebaseResult.status) { + RebaseResult.Status.FAILED -> throw UncommitedChangesDetectedException("Rebase interactive failed.") + RebaseResult.Status.UNCOMMITTED_CHANGES, RebaseResult.Status.CONFLICTS -> throw UncommitedChangesDetectedException( + "You can't have uncommited changes before starting a rebase interactive" + ) + + else -> {} } } } \ No newline at end of file diff --git a/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/LogViewModel.kt b/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/LogViewModel.kt index 9c45575..78a7fad 100644 --- a/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/LogViewModel.kt +++ b/src/main/kotlin/com/jetpackduba/gitnuro/viewmodels/LogViewModel.kt @@ -188,6 +188,7 @@ class LogViewModel @Inject constructor( fun revertCommit(revCommit: RevCommit) = tabState.safeProcessing( refreshType = RefreshType.ALL_DATA, + refreshEvenIfCrashes = true, ) { git -> revertCommitUseCase(git, revCommit) }