From efab5b0bfa94d893a89b200fa77015d9e4db0c14 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Mon, 6 Dec 2021 23:15:31 +0100 Subject: [PATCH] Added remove tag functionality --- src/main/kotlin/app/git/GitManager.kt | 11 ++++++---- src/main/kotlin/app/git/TagsManager.kt | 7 +++++++ src/main/kotlin/app/ui/log/Log.kt | 29 +++++++++++++++++++------- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/app/git/GitManager.kt b/src/main/kotlin/app/git/GitManager.kt index 2db9a1d..31889bf 100644 --- a/src/main/kotlin/app/git/GitManager.kt +++ b/src/main/kotlin/app/git/GitManager.kt @@ -12,13 +12,9 @@ import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.revwalk.RevCommit import org.eclipse.jgit.storage.file.FileRepositoryBuilder import app.AppStateManager -import app.app.Error import app.app.ErrorsManager import app.app.newErrorNow -import app.extensions.dirPath import kotlinx.coroutines.flow.collect -import org.eclipse.jgit.lib.ObjectId -import org.eclipse.jgit.treewalk.FileTreeIterator import java.io.File import javax.inject.Inject @@ -233,6 +229,13 @@ class GitManager @Inject constructor( } } + fun deleteTag(tag: Ref) = managerScope.launch { + safeProcessing { + tagsManager.deleteTag(safeGit, tag) + refreshRepositoryInfo() + } + } + fun resetStaged(diffEntry: DiffEntry) = managerScope.launch { statusManager.reset(safeGit, diffEntry, staged = true) loadLog() diff --git a/src/main/kotlin/app/git/TagsManager.kt b/src/main/kotlin/app/git/TagsManager.kt index ddee8ec..41fa547 100644 --- a/src/main/kotlin/app/git/TagsManager.kt +++ b/src/main/kotlin/app/git/TagsManager.kt @@ -30,4 +30,11 @@ class TagsManager @Inject constructor() { .setObjectId(revCommit) .call() } + + suspend fun deleteTag(git: Git, tag: Ref) = withContext(Dispatchers.IO) { + git + .tagDelete() + .setTags(tag.name) + .call() + } } \ No newline at end of file diff --git a/src/main/kotlin/app/ui/log/Log.kt b/src/main/kotlin/app/ui/log/Log.kt index 7207505..7a333bd 100644 --- a/src/main/kotlin/app/ui/log/Log.kt +++ b/src/main/kotlin/app/ui/log/Log.kt @@ -375,7 +375,8 @@ fun CommitLine( refs = commitRefs, onCheckoutRef = { ref -> gitManager.checkoutRef(ref) }, onMergeBranch = { ref -> onMergeBranch(ref) }, - onDeleteBranch = { ref -> gitManager.deleteBranch(ref) } + onDeleteBranch = { ref -> gitManager.deleteBranch(ref) }, + onDeleteTag = { ref -> gitManager.deleteTag(ref) }, ) } } @@ -391,6 +392,7 @@ fun CommitMessage( onCheckoutRef: (ref: Ref) -> Unit, onMergeBranch: (ref: Ref) -> Unit, onDeleteBranch: (ref: Ref) -> Unit, + onDeleteTag: (ref: Ref) -> Unit, ) { val textColor = if (selected) { MaterialTheme.colors.primary @@ -415,9 +417,8 @@ fun CommitMessage( if (ref.isTag) { TagChip( ref = ref, - onCheckoutTag = { - onCheckoutRef(ref) - } + onCheckoutTag = { onCheckoutRef(ref) }, + onDeleteTag = { onDeleteTag(ref) }, ) } else if (ref.isBranch) BranchChip( @@ -641,14 +642,28 @@ fun BranchChip( @OptIn(ExperimentalFoundationApi::class) @Composable -fun TagChip(modifier: Modifier = Modifier, ref: Ref, onCheckoutTag: () -> Unit) { +fun TagChip( + modifier: Modifier = Modifier, + ref: Ref, + onCheckoutTag: () -> Unit, + onDeleteTag: () -> Unit, +) { val contextMenuItemsList = { - listOf( + mutableListOf( ContextMenuItem( label = "Checkout tag", onClick = onCheckoutTag ) - ) + ).apply { + if(ref.isLocal) { + add( + ContextMenuItem( + label = "Delete tag", + onClick = onDeleteTag + ) + ) + } + } } RefChip(