Added management state when the repository is in "reverting" state

This commit is contained in:
Abdelilah El Aissaoui 2022-08-04 00:39:11 +02:00
parent 591fa98508
commit d5359effb6
6 changed files with 54 additions and 11 deletions

View File

@ -6,4 +6,7 @@ val RepositoryState.isMerging
get() = this == RepositoryState.MERGING || this == RepositoryState.MERGING_RESOLVED get() = this == RepositoryState.MERGING || this == RepositoryState.MERGING_RESOLVED
val RepositoryState.isCherryPicking val RepositoryState.isCherryPicking
get() = this == RepositoryState.CHERRY_PICKING || this == RepositoryState.CHERRY_PICKING_RESOLVED get() = this == RepositoryState.CHERRY_PICKING || this == RepositoryState.CHERRY_PICKING_RESOLVED
val RepositoryState.isReverting
get() = this == RepositoryState.REVERTING || this == RepositoryState.REVERTING_RESOLVED

View File

@ -25,7 +25,7 @@ class TabState @Inject constructor(
val taskEvent: SharedFlow<TaskEvent> = _taskEvent val taskEvent: SharedFlow<TaskEvent> = _taskEvent
var git: Git? = null var git: Git? = null
val safeGit: Git private val safeGit: Git
get() { get() {
val git = this.git val git = this.git
if (git == null) { if (git == null) {

View File

@ -20,7 +20,6 @@ import androidx.compose.ui.input.pointer.PointerIconDefaults
import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.extensions.handMouseClickable import app.extensions.handMouseClickable
import app.theme.primaryTextColor import app.theme.primaryTextColor
import app.ui.context_menu.* import app.ui.context_menu.*

View File

@ -21,20 +21,16 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.isCtrlPressed
import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.pointer.pointerMoveFilter import androidx.compose.ui.input.pointer.pointerMoveFilter
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.extensions.* import app.extensions.*
import app.git.DiffEntryType import app.git.DiffEntryType
import app.git.StatusEntry import app.git.StatusEntry
import app.git.StatusType
import app.keybindings.KeybindingOption import app.keybindings.KeybindingOption
import app.keybindings.matchesBinding import app.keybindings.matchesBinding
import app.theme.* import app.theme.*
@ -226,6 +222,17 @@ fun UncommitedChanges(
doCommit(false) doCommit(false)
} }
) )
repositoryState.isReverting -> RevertingButtons(
haveConflictsBeenSolved = unstaged.none { it.statusType == StatusType.CONFLICTING },
canCommit = commitMessage.isNotBlank(),
onAbort = {
statusViewModel.resetRepoState()
statusViewModel.updateCommitMessage("")
},
onCommit = {
doCommit(false)
}
)
else -> UncommitedChangesButtons( else -> UncommitedChangesButtons(
canCommit = canCommit, canCommit = canCommit,
canAmend = canAmend, canAmend = canAmend,
@ -394,6 +401,34 @@ fun RebasingButtons(
} }
} }
@Composable
fun RevertingButtons(
canCommit: Boolean,
haveConflictsBeenSolved: Boolean,
onAbort: () -> Unit,
onCommit: () -> Unit,
) {
Row(
modifier = Modifier.fillMaxWidth()
) {
AbortButton(
modifier = Modifier
.weight(1f)
.padding(end = 4.dp),
onClick = onAbort
)
ConfirmationButton(
text = "Continue",
modifier = Modifier
.weight(1f)
.padding(start = 4.dp),
enabled = canCommit && haveConflictsBeenSolved,
onClick = onCommit,
)
}
}
@Composable @Composable
fun AbortButton(modifier: Modifier, onClick: () -> Unit) { fun AbortButton(modifier: Modifier, onClick: () -> Unit) {
Button( Button(

View File

@ -639,6 +639,7 @@ fun UncommitedChangesLine(
repositoryState.isRebasing -> "Pending changes to rebase" repositoryState.isRebasing -> "Pending changes to rebase"
repositoryState.isMerging -> "Pending changes to merge" repositoryState.isMerging -> "Pending changes to merge"
repositoryState.isCherryPicking -> "Pending changes to cherry-pick" repositoryState.isCherryPicking -> "Pending changes to cherry-pick"
repositoryState.isReverting -> "Pending changes to revert"
else -> "Uncommited changes" else -> "Uncommited changes"
} }

View File

@ -3,6 +3,7 @@ package app.viewmodels
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import app.extensions.delayedStateChange import app.extensions.delayedStateChange
import app.extensions.isMerging import app.extensions.isMerging
import app.extensions.isReverting
import app.git.* import app.git.*
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
@ -47,7 +48,10 @@ class StatusViewModel @Inject constructor(
) { git -> ) { git ->
val messageToPersist = savedCommitMessage.message.ifBlank { null } val messageToPersist = savedCommitMessage.message.ifBlank { null }
if (git.repository.repositoryState.isMerging) { if (git.repository.repositoryState.isMerging ||
git.repository.repositoryState.isRebasing ||
git.repository.repositoryState.isReverting
) {
git.repository.writeMergeCommitMsg(messageToPersist) git.repository.writeMergeCommitMsg(messageToPersist)
} else if (git.repository.repositoryState == RepositoryState.SAFE) { } else if (git.repository.repositoryState == RepositoryState.SAFE) {
git.repository.writeCommitEditMsg(messageToPersist) git.repository.writeCommitEditMsg(messageToPersist)
@ -134,8 +138,9 @@ class StatusViewModel @Inject constructor(
private fun messageByRepoState(git: Git): String { private fun messageByRepoState(git: Git): String {
val message: String? = if ( val message: String? = if (
git.repository.repositoryState == RepositoryState.MERGING || git.repository.repositoryState.isMerging ||
git.repository.repositoryState == RepositoryState.REBASING_MERGE git.repository.repositoryState.isRebasing ||
git.repository.repositoryState.isReverting
) { ) {
git.repository.readMergeCommitMsg() git.repository.readMergeCommitMsg()
} else { } else {