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
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
var git: Git? = null
val safeGit: Git
private val safeGit: Git
get() {
val git = this.git
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.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.extensions.handMouseClickable
import app.theme.primaryTextColor
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.graphics.Color
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.pointer.pointerMoveFilter
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.extensions.*
import app.git.DiffEntryType
import app.git.StatusEntry
import app.git.StatusType
import app.keybindings.KeybindingOption
import app.keybindings.matchesBinding
import app.theme.*
@ -226,6 +222,17 @@ fun UncommitedChanges(
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(
canCommit = canCommit,
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
fun AbortButton(modifier: Modifier, onClick: () -> Unit) {
Button(

View File

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

View File

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