From ccda9f02f3a7e48a4a84fb3c3e853d176af8bdd3 Mon Sep 17 00:00:00 2001 From: Sven Date: Sun, 19 Feb 2023 11:42:59 +0100 Subject: [PATCH] feat: extend git_delete_branch to delete of all selected branches (#2337) --- doc/telescope.txt | 2 +- lua/telescope/actions/init.lua | 38 ++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/doc/telescope.txt b/doc/telescope.txt index 0012eb0..efa49d7 100644 --- a/doc/telescope.txt +++ b/doc/telescope.txt @@ -2719,7 +2719,7 @@ actions.git_track_branch({prompt_bufnr}) *telescope.actions.git_track_branch()* actions.git_delete_branch({prompt_bufnr}) *telescope.actions.git_delete_branch()* - Delete the currently selected branch + Delete all currently selected branches Parameters: ~ diff --git a/lua/telescope/actions/init.lua b/lua/telescope/actions/init.lua index 49619da..c026d90 100644 --- a/lua/telescope/actions/init.lua +++ b/lua/telescope/actions/init.lua @@ -685,18 +685,34 @@ actions.git_track_branch = make_git_branch_action { end, } ---- Delete the currently selected branch +--- Delete all currently selected branches ---@param prompt_bufnr number: The prompt bufnr -actions.git_delete_branch = make_git_branch_action { - should_confirm = true, - action_name = "actions.git_delete_branch", - confirmation_question = "Do you really wanna delete branch %s? [Y/n] ", - success_message = "Deleted branch: %s", - error_message = "Error when deleting branch: %s. Git returned: '%s'", - command = function(branch_name) - return { "git", "branch", "-D", branch_name } - end, -} +actions.git_delete_branch = function(prompt_bufnr) + local confirmation = vim.fn.input "Do you really want to delete the selected branches? [Y/n] " + if confirmation ~= "" and string.lower(confirmation) ~= "y" then + return + end + + local picker = action_state.get_current_picker(prompt_bufnr) + local action_name = "actions.git_delete_branch" + picker:delete_selection(function(selection) + local branch = selection.value + print("Deleting branch " .. branch) + local _, ret, stderr = utils.get_os_command_output({ "git", "branch", "-D", branch }, picker.cwd) + if ret == 0 then + utils.notify(action_name, { + msg = string.format("Deleted branch: %s", branch), + level = "INFO", + }) + else + utils.notify(action_name, { + msg = string.format("Error when deleting branch: %s. Git returned: '%s'", branch, table.concat(stderr, " ")), + level = "ERROR", + }) + end + return ret == 0 + end) +end --- Merge the currently selected branch ---@param prompt_bufnr number: The prompt bufnr