Added management state when the repository is in "reverting" state
This commit is contained in:
parent
591fa98508
commit
d5359effb6
@ -7,3 +7,6 @@ val RepositoryState.isMerging
|
|||||||
|
|
||||||
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
|
@ -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) {
|
||||||
|
@ -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.*
|
||||||
|
@ -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(
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user