Add TopicDiff, TopicEdit

This commit is contained in:
Alex Yatskov 2023-09-25 12:23:19 -07:00
parent 7cb2603262
commit 684d932298

View File

@ -1,3 +1,27 @@
local function invoke(args)
output = vim.fn.system(table.concat(args, ' '))
return string.gsub(output, '%s+$', '')
end
local function get_branch_parent()
local author = invoke({'git', 'config', 'user.name'})
local hash = invoke{
'git',
'log',
'-n1',
'--author="^((?!' .. author .. ').)*$"',
'--perl-regexp',
'--pretty=format:"%H"'
}
if #hash == 0 then
print('All commits are by current author')
else
return hash
end
end
-- UnAlign -- UnAlign
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
'UnAlign', 'UnAlign',
@ -7,32 +31,33 @@ vim.api.nvim_create_user_command(
{range = '%'} {range = '%'}
) )
-- GitStreak -- TopicEdit
vim.api.nvim_create_user_command( vim.api.nvim_create_user_command(
'GitStreak', 'TopicEdit',
function(ctx) function(ctx)
local function call(args) local hash = get_branch_parent()
output = vim.fn.system(table.concat(args, ' ')) if hash then
return string.gsub(output, '%s+$', '') local names = invoke({'git', 'diff', '--name-only', hash})
end if #names == 0 then
print('No files changed since previous author')
local root_dir = call({'git', 'rev-parse', '--show-toplevel'}) else
local author = call({'git', 'config', 'user.name'}) local root_dir = invoke({'git', 'rev-parse', '--show-toplevel'})
for name in string.gmatch(names, '[^\r\n]+') do
local hash = call{'git', 'log', '-n1', '--author="^((?!' .. author .. ').)*$"', '--perl-regexp', '--pretty=format:"%H"'} vim.cmd(string.format('e %s/%s', root_dir, name))
if #hash == 0 then end
print('All commits are by current author') end
return end
end end,
{}
local names = call({'git', 'diff', '--name-only', hash}) )
if #names == 0 then
print('No files changed since previous author') -- TopicDiff
return vim.api.nvim_create_user_command(
end 'TopicDiff',
function(ctx)
for name in string.gmatch(names, '[^\r\n]+') do local hash = get_branch_parent()
vim.cmd(string.format('e %s/%s', root_dir, name)) if hash then
invoke({'git', 'difftool', '-d', hash})
end end
end, end,
{} {}