gitsigns.nvim/lua/gitsigns/diff_ext.lua
Lewis Russell b38008cf24 async: require plenary.async -> plenary.async.async
plenary.async requires several modules not used by gitsigns which is
inflating the startup time. Instead just require plenary.async.async.

On an M1 Macbook this appears to half the startup time of gitsigns.
2021-08-02 12:31:56 +01:00

83 lines
1.3 KiB
Lua
Generated

local git = require('gitsigns.git')
local gs_hunks = require("gitsigns.hunks")
local Hunk = gs_hunks.Hunk
local util = require('gitsigns.util')
local scheduler = require('plenary.async.util').scheduler
local M = {}
local function write_to_file(path, text)
local f, err = io.open(path, 'wb')
if f == nil then
error(err)
end
for _, l in ipairs(text) do
f:write(l)
f:write('\n')
end
f:close()
end
M.run_diff = function(
text_cmp,
text_buf,
diff_algo)
local results = {}
if not util.is_unix then
scheduler()
end
local file_buf = util.tmpname() .. '_buf'
local file_cmp = util.tmpname() .. '_cmp'
write_to_file(file_buf, text_buf)
write_to_file(file_cmp, text_cmp)
git.command({
'-c', 'core.safecrlf=false',
'diff',
'--color=never',
'--diff-algorithm=' .. diff_algo,
'--patch-with-raw',
'--unified=0',
file_cmp,
file_buf,
}, {
on_stdout = function(_, line)
if vim.startswith(line, '@@') then
table.insert(results, gs_hunks.parse_diff_line(line))
elseif #results > 0 then
table.insert(results[#results].lines, line)
end
end,
})
os.remove(file_buf)
os.remove(file_cmp)
return results
end
return M