From 4abd9e331dda5752be4c0eb30734d0f07d0419d7 Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Sat, 27 Nov 2021 20:22:05 +0100 Subject: [PATCH] Added support for local branch deletion --- .../kotlin/app/extensions/RefExtensions.kt | 10 ++++- src/main/kotlin/app/git/BranchesManager.kt | 1 + src/main/kotlin/app/git/GitManager.kt | 5 ++- src/main/kotlin/app/ui/Log.kt | 37 +++++++++++-------- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/app/extensions/RefExtensions.kt b/src/main/kotlin/app/extensions/RefExtensions.kt index 15c0898..59aaed5 100644 --- a/src/main/kotlin/app/extensions/RefExtensions.kt +++ b/src/main/kotlin/app/extensions/RefExtensions.kt @@ -5,7 +5,7 @@ import org.eclipse.jgit.lib.Ref val Ref.simpleName: String get() { - return if (this.name.startsWith("refs/remotes/")) + return if (this.isRemote) name.replace("refs/remotes/", "") else this.name.split("/").last() // TODO Do not take the last one, just remove the prefixes @@ -17,4 +17,10 @@ val Ref.isBranch: Boolean } val Ref.isTag: Boolean - get() = this is ObjectIdRef.PeeledTag \ No newline at end of file + get() = this is ObjectIdRef.PeeledTag + +val Ref.isLocal: Boolean + get() = !this.isRemote + +val Ref.isRemote: Boolean + get() = this.name.startsWith("refs/remotes/") \ No newline at end of file diff --git a/src/main/kotlin/app/git/BranchesManager.kt b/src/main/kotlin/app/git/BranchesManager.kt index c5e2c0b..0eb0d72 100644 --- a/src/main/kotlin/app/git/BranchesManager.kt +++ b/src/main/kotlin/app/git/BranchesManager.kt @@ -75,6 +75,7 @@ class BranchesManager @Inject constructor() { git .branchDelete() .setBranchNames(branch.name) + .setForce(true) // TODO Should it be forced? .call() } } \ No newline at end of file diff --git a/src/main/kotlin/app/git/GitManager.kt b/src/main/kotlin/app/git/GitManager.kt index 56ba3db..17e8d91 100644 --- a/src/main/kotlin/app/git/GitManager.kt +++ b/src/main/kotlin/app/git/GitManager.kt @@ -209,7 +209,10 @@ class GitManager @Inject constructor( } fun deleteBranch(branch: Ref) = managerScope.launch { - branchesManager.deleteBranch(safeGit, branch) + safeProcessing { + branchesManager.deleteBranch(safeGit, branch) + coLoadLog() + } } fun resetStaged(diffEntry: DiffEntry) = managerScope.launch { diff --git a/src/main/kotlin/app/ui/Log.kt b/src/main/kotlin/app/ui/Log.kt index 53ee52a..3cc28db 100644 --- a/src/main/kotlin/app/ui/Log.kt +++ b/src/main/kotlin/app/ui/Log.kt @@ -10,7 +10,9 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.* +import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi @@ -18,8 +20,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.drawscope.DrawStyle -import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.clipRect import androidx.compose.ui.input.pointer.PointerIconDefaults import androidx.compose.ui.input.pointer.pointerHoverIcon @@ -33,7 +33,6 @@ import app.DialogManager import app.extensions.* import app.git.GitManager import app.git.LogStatus -import app.git.ResetType import app.git.graph.GraphNode import app.theme.headerBackground import app.theme.headerText @@ -44,7 +43,6 @@ import app.ui.dialogs.MergeDialog import app.ui.dialogs.NewBranchDialog import app.ui.dialogs.NewTagDialog import app.ui.dialogs.ResetBranchDialog -import org.eclipse.jgit.lib.ObjectIdRef import org.eclipse.jgit.lib.Ref import org.eclipse.jgit.revwalk.RevCommit @@ -296,9 +294,7 @@ fun Log( commit = graphNode, selected = selectedIndex.value == index, refs = commitRefs, - onCheckoutRef = { ref -> - gitManager.checkoutRef(ref) - }, + onCheckoutRef = { ref -> gitManager.checkoutRef(ref) }, onMergeBranch = { ref -> dialogManager.show { MergeDialog( @@ -314,6 +310,7 @@ fun Log( ) } }, + onDeleteBranch = { ref -> gitManager.deleteBranch(ref) } ) } } @@ -332,6 +329,7 @@ fun CommitMessage( refs: List, onCheckoutRef: (ref: Ref) -> Unit, onMergeBranch: (ref: Ref) -> Unit, + onDeleteBranch: (ref: Ref) -> Unit, ) { val textColor = if (selected) { MaterialTheme.colors.primary @@ -360,15 +358,12 @@ fun CommitMessage( onCheckoutRef(ref) } ) - } else if(ref.isBranch) + } else if (ref.isBranch) BranchChip( ref = ref, - onCheckoutBranch = { - onCheckoutRef(ref) - }, - onMergeBranch = { - onMergeBranch(ref) - } + onCheckoutBranch = { onCheckoutRef(ref) }, + onMergeBranch = { onMergeBranch(ref) }, + onDeleteBranch = { onDeleteBranch(ref) } ) } @@ -545,6 +540,7 @@ fun BranchChip( ref: Ref, onCheckoutBranch: () -> Unit, onMergeBranch: () -> Unit, + onDeleteBranch: () -> Unit, ) { val contextMenuItemsList = { mutableListOf( @@ -554,13 +550,22 @@ fun BranchChip( ), ).apply { - if (!isCurrentBranch) + if (!isCurrentBranch) { add( ContextMenuItem( label = "Merge branch", onClick = onMergeBranch ) ) + } + if (ref.isLocal && !isCurrentBranch) { + add( + ContextMenuItem( + label = "Delete branch", + onClick = onDeleteBranch + ) + ) + } } }