create new action: git switch (#798)

* create new action: git switch

If the branch already exists in local, switch to that.
If the branch is only in remote, create new branch tracking remote and switch to new one.

* fix a point of review

* fix a point of review: map to git-switch action

* Revert "fix a point of review"

This reverts commit 017ce424a3adfe1b3712a421385cfc3f4258a0fb.

* undocument header comment
This commit is contained in:
Kyoichiro Yamada
2021-05-11 17:55:41 +09:00
committed by GitHub
parent 9fd242db26
commit d5aa53dcd3
2 changed files with 29 additions and 1 deletions

View File

@@ -375,6 +375,32 @@ actions.git_checkout = function(prompt_bufnr)
end end
end end
-- TODO: add this function header back once the treesitter max-query bug is resolved
-- Switch to git branch
-- If the branch already exists in local, switch to that.
-- If the branch is only in remote, create new branch tracking remote and switch to new one.
--@param prompt_bufnr number: The prompt bufnr
actions.git_switch = function(prompt_bufnr)
local cwd = action_state.get_current_picker(prompt_bufnr).cwd
local selection = action_state.get_selected_entry()
actions.close(prompt_bufnr)
local pattern = '^refs/remotes/%w+/'
local branch = selection.value
if string.match(selection.refname, pattern) then
branch = string.gsub(selection.refname, pattern, '')
end
local _, ret, stderr = utils.get_os_command_output({ 'git', 'switch', branch }, cwd)
if ret == 0 then
print("Switched to: " .. branch)
else
print(string.format(
'Error when switching to: %s. Git returned: "%s"',
selection.value,
table.concat(stderr, ' ')
))
end
end
--- Tell git to track the currently selected remote branch in Telescope --- Tell git to track the currently selected remote branch in Telescope
---@param prompt_bufnr number: The prompt bufnr ---@param prompt_bufnr number: The prompt bufnr
actions.git_track_branch = function(prompt_bufnr) actions.git_track_branch = function(prompt_bufnr)

View File

@@ -199,9 +199,11 @@ git.branches = function(opts)
map('i', '<c-a>', actions.git_create_branch) map('i', '<c-a>', actions.git_create_branch)
map('n', '<c-a>', actions.git_create_branch) map('n', '<c-a>', actions.git_create_branch)
map('i', '<c-s>', actions.git_switch_branch)
map('n', '<c-s>', actions.git_switch_branch)
map('i', '<c-d>', actions.git_delete_branch) map('i', '<c-d>', actions.git_delete_branch)
map('n', '<c-d>', actions.git_delete_branch) map('n', '<c-d>', actions.git_delete_branch)
return true return true
end end
}):find() }):find()