From 8e3df6b981c8d501fcaecf6689aa7f78c25920fa Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Wed, 15 Aug 2018 15:02:01 +0200 Subject: [PATCH 1/4] add option to force delete given branch --- docs/Keybindings.md | 1 + pkg/commands/git.go | 10 ++++++++-- pkg/gui/branches_panel.go | 13 +++++++++++-- pkg/gui/keybindings.go | 1 + pkg/i18n/dutch.go | 3 +++ pkg/i18n/english.go | 3 +++ 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/Keybindings.md b/docs/Keybindings.md index 2a1b1817f..37fb523a2 100644 --- a/docs/Keybindings.md +++ b/docs/Keybindings.md @@ -44,6 +44,7 @@ c: checkout by name n: new branch d: delete branch + D: force delete branch ## Commits Panel: diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 557e6a8c0..45219b5c0 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -223,8 +223,14 @@ func (c *GitCommand) NewBranch(name string) error { } // DeleteBranch delete branch -func (c *GitCommand) DeleteBranch(branch string) error { - return c.OSCommand.RunCommand("git branch -d " + branch) +func (c *GitCommand) DeleteBranch(branch string, force bool) error { + var command string + if force { + command = "git branch -D " + } else { + command = "git branch -d " + } + return c.OSCommand.RunCommand(command + branch) } // ListStash list stash diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index 67e0ceb07..886b4c493 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -62,20 +62,28 @@ func (gui *Gui) handleNewBranch(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleDeleteBranch(g *gocui.Gui, v *gocui.View) error { + gui.deleteBranch(g, v, false) +} + +func (gui *Gui) handleForceDeleteBranch(g *gocui.Gui, v *gocui.View) error { + gui.deleteBranch(g, v, true) +} + +func (gui *Gui) deleteBranch(g *gocui.Gui, v *gocui.View, force bool) error { checkedOutBranch := gui.State.Branches[0] selectedBranch := gui.getSelectedBranch(v) if checkedOutBranch.Name == selectedBranch.Name { return gui.createErrorPanel(g, gui.Tr.SLocalize("CantDeleteCheckOutBranch")) } + title := gui.Tr.SLocalize("DeleteBranch") message := gui.Tr.TemplateLocalize( "DeleteBranchMessage", Teml{ "selectedBranchName": selectedBranch.Name, }, ) - title := gui.Tr.SLocalize("DeleteBranch") return gui.createConfirmationPanel(g, v, title, message, func(g *gocui.Gui, v *gocui.View) error { - if err := gui.GitCommand.DeleteBranch(selectedBranch.Name); err != nil { + if err := gui.GitCommand.DeleteBranch(selectedBranch.Name, force); err != nil { return gui.createErrorPanel(g, err.Error()) } return gui.refreshSidePanels(g) @@ -108,6 +116,7 @@ func (gui *Gui) renderBranchesOptions(g *gocui.Gui) error { "c": gui.Tr.SLocalize("checkoutByName"), "n": gui.Tr.SLocalize("newBranch"), "d": gui.Tr.SLocalize("deleteBranch"), + "D": gui.Tr.SLocalize("forceDeleteBranch"), "← → ↑ ↓": gui.Tr.SLocalize("navigate"), }) } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 68cccda6b..e0351b88e 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -57,6 +57,7 @@ func (gui *Gui) keybindings(g *gocui.Gui) error { {ViewName: "branches", Key: 'F', Modifier: gocui.ModNone, Handler: gui.handleForceCheckout}, {ViewName: "branches", Key: 'n', Modifier: gocui.ModNone, Handler: gui.handleNewBranch}, {ViewName: "branches", Key: 'd', Modifier: gocui.ModNone, Handler: gui.handleDeleteBranch}, + {ViewName: "branches", Key: 'D', Modifier: gocui.ModNone, Handler: gui.handleForceDeleteBranch}, {ViewName: "branches", Key: 'm', Modifier: gocui.ModNone, Handler: gui.handleMerge}, {ViewName: "commits", Key: 's', Modifier: gocui.ModNone, Handler: gui.handleCommitSquashDown}, {ViewName: "commits", Key: 'r', Modifier: gocui.ModNone, Handler: gui.handleRenameCommit}, diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go index 60133e662..a02c7c4bc 100644 --- a/pkg/i18n/dutch.go +++ b/pkg/i18n/dutch.go @@ -151,6 +151,9 @@ func addDutch(i18nObject *i18n.Bundle) error { }, &i18n.Message{ ID: "deleteBranch", Other: "verwijder branch", + }, &i18n.Message{ + ID: "forceDeleteBranch", + Other: "verwijder branch (forceer)", }, &i18n.Message{ ID: "NoBranchesThisRepo", Other: "Geen branches voor deze repo", diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index bebe9b282..db51fcdc4 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -159,6 +159,9 @@ func addEnglish(i18nObject *i18n.Bundle) error { }, &i18n.Message{ ID: "deleteBranch", Other: "delete branch", + }, &i18n.Message{ + ID: "forceDeleteBranch", + Other: "delete branch (force)", }, &i18n.Message{ ID: "NoBranchesThisRepo", Other: "No branches for this repo", From 810540edfad0736a294efede7664038134f5b5a0 Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Tue, 21 Aug 2018 11:32:17 +0200 Subject: [PATCH 2/4] add return --- pkg/gui/branches_panel.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index 886b4c493..e0b947f13 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -62,11 +62,11 @@ func (gui *Gui) handleNewBranch(g *gocui.Gui, v *gocui.View) error { } func (gui *Gui) handleDeleteBranch(g *gocui.Gui, v *gocui.View) error { - gui.deleteBranch(g, v, false) + return gui.deleteBranch(g, v, false) } func (gui *Gui) handleForceDeleteBranch(g *gocui.Gui, v *gocui.View) error { - gui.deleteBranch(g, v, true) + return gui.deleteBranch(g, v, true) } func (gui *Gui) deleteBranch(g *gocui.Gui, v *gocui.View, force bool) error { From 5f6b61d28c86676fec311ec94edad977343e48bd Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Tue, 21 Aug 2018 12:06:42 +0200 Subject: [PATCH 3/4] adjust translation(s) for forced branch deletion --- pkg/gui/branches_panel.go | 7 ++++++- pkg/i18n/dutch.go | 5 ++++- pkg/i18n/english.go | 5 ++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index e0b947f13..9d4f467bf 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -76,8 +76,13 @@ func (gui *Gui) deleteBranch(g *gocui.Gui, v *gocui.View, force bool) error { return gui.createErrorPanel(g, gui.Tr.SLocalize("CantDeleteCheckOutBranch")) } title := gui.Tr.SLocalize("DeleteBranch") + if force { + messageId := "ForceDeleteBranchMessage" + } else { + messageId := "DeleteBranchMessage" + } message := gui.Tr.TemplateLocalize( - "DeleteBranchMessage", + messageId, Teml{ "selectedBranchName": selectedBranch.Name, }, diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go index a02c7c4bc..a5bf897b5 100644 --- a/pkg/i18n/dutch.go +++ b/pkg/i18n/dutch.go @@ -132,7 +132,10 @@ func addDutch(i18nObject *i18n.Bundle) error { Other: "Verwijder branch", }, &i18n.Message{ ID: "DeleteBranchMessage", - Other: "Weet je zeker dat je {{.selectedBranchName}} branch wil verwijderen?", + Other: "Weet je zeker dat je branch {{.selectedBranchName}} wil verwijderen?", + }, &i18n.Message{ + ID: "DeleteBranchMessage", + Other: "Weet je zeker dat je branch {{.selectedBranchName}} geforceerd wil verwijderen?", }, &i18n.Message{ ID: "CantMergeBranchIntoItself", Other: "Je kan niet een branch in zichzelf mergen", diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index db51fcdc4..55f6c5bc3 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -140,7 +140,10 @@ func addEnglish(i18nObject *i18n.Bundle) error { Other: "Delete Branch", }, &i18n.Message{ ID: "DeleteBranchMessage", - Other: "Are you sure you want delete the branch {{.selectedBranchName}} ?", + Other: "Are you sure you want to delete the branch {{.selectedBranchName}} ?", + }, &i18n.Message{ + ID: "ForceDeleteBranchMessage", + Other: "Are you sure you want to force delete the branch {{.selectedBranchName}} ?", }, &i18n.Message{ ID: "CantMergeBranchIntoItself", Other: "You cannot merge a branch into itself", From 182e47511626fb01e05b2abcaa589604648959d5 Mon Sep 17 00:00:00 2001 From: Rob Bast Date: Tue, 21 Aug 2018 12:09:13 +0200 Subject: [PATCH 4/4] correct variable assignment --- pkg/gui/branches_panel.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/gui/branches_panel.go b/pkg/gui/branches_panel.go index 9d4f467bf..df4dcff78 100644 --- a/pkg/gui/branches_panel.go +++ b/pkg/gui/branches_panel.go @@ -76,10 +76,11 @@ func (gui *Gui) deleteBranch(g *gocui.Gui, v *gocui.View, force bool) error { return gui.createErrorPanel(g, gui.Tr.SLocalize("CantDeleteCheckOutBranch")) } title := gui.Tr.SLocalize("DeleteBranch") + var messageId string if force { - messageId := "ForceDeleteBranchMessage" + messageId = "ForceDeleteBranchMessage" } else { - messageId := "DeleteBranchMessage" + messageId = "DeleteBranchMessage" } message := gui.Tr.TemplateLocalize( messageId,