better git format and parsing
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
local function system(v) return vim.api.nvim_call_function('system', { v }) end
|
||||
local function systemlist(v) return vim.api.nvim_call_function('systemlist', { v }) end
|
||||
|
||||
local function is_git_repo()
|
||||
local is_git = system('git rev-parse')
|
||||
@@ -9,7 +10,7 @@ local IS_GIT_REPO = is_git_repo()
|
||||
|
||||
local function set_git_status()
|
||||
if IS_GIT_REPO == false then return '' end
|
||||
return system('git status --porcelain=v1')
|
||||
return systemlist('git status --porcelain=v1')
|
||||
end
|
||||
|
||||
local GIT_STATUS = set_git_status()
|
||||
@@ -26,31 +27,41 @@ local function force_refresh_git()
|
||||
end
|
||||
|
||||
local function is_folder_dirty(relpath)
|
||||
return string.match(GIT_STATUS, relpath) ~= nil
|
||||
for _, status in pairs(GIT_STATUS) do
|
||||
if string.match(status, relpath) ~= nil then return true end
|
||||
end
|
||||
end
|
||||
|
||||
local function create_git_checker(pattern)
|
||||
return function(relpath)
|
||||
local ret = string.match(GIT_STATUS, '^.*' .. relpath)
|
||||
if ret == nil then return false end
|
||||
return string.match(ret, pattern) ~= nil
|
||||
for _, status in pairs(GIT_STATUS) do
|
||||
local ret = string.match(status, '^.. ' .. relpath)
|
||||
if ret ~= nil and string.match(ret, pattern) ~= nil then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local is_modified = create_git_checker('^ ?MM?')
|
||||
local is_staged = create_git_checker('^ ?A')
|
||||
local is_unmerged = create_git_checker('^ ?UU')
|
||||
local is_untracked = create_git_checker('^%?%?')
|
||||
local unstaged = create_git_checker('^ ')
|
||||
local staged = create_git_checker('^M ')
|
||||
local staged_new = create_git_checker('^A ')
|
||||
local staged_mod = create_git_checker('^MM')
|
||||
local unmerged = create_git_checker('^[U ][U ]')
|
||||
local renamed = create_git_checker('^R')
|
||||
local untracked = create_git_checker('^%?%?')
|
||||
|
||||
local function get_git_attr(path, is_dir)
|
||||
if IS_GIT_REPO == false then return '' end
|
||||
if is_dir then
|
||||
if is_folder_dirty(path) == true then return 'Dirty' end
|
||||
if is_folder_dirty(path) == true then return '✗ ' end
|
||||
else
|
||||
if is_modified(path) then return 'Modified'
|
||||
elseif is_staged(path) then return 'Staged'
|
||||
elseif is_unmerged(path) then return 'Unmerged'
|
||||
elseif is_untracked(path) then return 'Untracked'
|
||||
if unstaged(path) then return '✗ '
|
||||
elseif staged(path) then return '✓ '
|
||||
elseif staged_new(path) then return '✓★ '
|
||||
elseif staged_mod(path) then return '✓✗ '
|
||||
elseif unmerged(path) then return '═ '
|
||||
elseif renamed(path) then return '➜ '
|
||||
elseif untracked(path) then return '★ '
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user