return {
|
|
"tpope/vim-fugitive",
|
|
dependencies = {
|
|
"shumphrey/fugitive-gitlab.vim",
|
|
},
|
|
config = function()
|
|
vim.opt.diffopt = vim.opt.diffopt + "vertical"
|
|
vim.opt.display = vim.opt.display + "lastline"
|
|
|
|
local function gitBlame(lines)
|
|
local current_file = vim.fn.expand('%:p')
|
|
local range = lines[1] .. "," .. lines[2]
|
|
local cmd = string.format("git -C %s blame -C -C -C -L %s %s | awk '{print $1}'", vim.fn.shellescape(vim.fn.fnamemodify(current_file, ':h')), range, vim.fn.fnamemodify(current_file, ':t'))
|
|
|
|
local handle = io.popen(cmd)
|
|
local result = handle:read("*a")
|
|
handle:close()
|
|
|
|
return result
|
|
end
|
|
|
|
vim.keymap.set('n', '<leader>gC', function ()
|
|
vim.cmd(string.format('Git show %s', gitBlame({vim.fn.line('.'), vim.fn.line('.')})))
|
|
end)
|
|
|
|
local options = { noremap = true, silent = true }
|
|
|
|
vim.keymap.set('n', '<leader>gg', '<cmd>Git<CR>', options)
|
|
vim.keymap.set('n', '<leader>gp', '<cmd>Git push<CR>', options)
|
|
vim.keymap.set('n', '<leader>gP', '<cmd>Git pull<CR>', options)
|
|
vim.keymap.set('n', '<leader>ga', '<cmd>Git add .<CR>', options)
|
|
vim.keymap.set('n', '<leader>gA', '<cmd>Git add<CR>', options)
|
|
vim.keymap.set('n', '<leader>gc', '<cmd>Git commit<CR>', options)
|
|
-- vim.keymap.set('n', '<leader>gC', '<cmd>Git commit -a<CR>', options)
|
|
|
|
vim.keymap.set('v', '<leader>gl', function ()
|
|
local startPos = vim.fn.getpos("'<")
|
|
local endPos = vim.fn.getpos("'>")
|
|
|
|
local startLine = startPos[2]
|
|
local endLine = endPos[2]
|
|
|
|
if (startLine == 0 or endLine == 0)
|
|
then
|
|
vim.notify(vim.inspect(vim.fn.getpos("'<")) .. " to " .. vim.inspect(vim.fn.getpos("'>")))
|
|
-- vim.notify('Error getting start or end line', vim.log.levels.ERROR)
|
|
return
|
|
end
|
|
|
|
vim.cmd(string.format('Git log -L %d,%d:%s', startLine, endLine, vim.fn.expand("%:.")))
|
|
end, options);
|
|
end,
|
|
}
|