fix: branch incorrectly assumes .git/ without .git/HEAD to be valid
fixes high cpu uses on windows in projects with empty .git folder.
This commit is contained in:
parent
8648ee6d06
commit
1cbf0686b4
|
@ -43,7 +43,7 @@ function Branch.find_git_dir()
|
||||||
-- get file dir so we can search from that dir
|
-- get file dir so we can search from that dir
|
||||||
local file_dir = vim.fn.expand('%:p:h')
|
local file_dir = vim.fn.expand('%:p:h')
|
||||||
local root_dir = file_dir
|
local root_dir = file_dir
|
||||||
local git_file, git_dir
|
local git_dir
|
||||||
-- Search upward for .git file or folder
|
-- Search upward for .git file or folder
|
||||||
while (root_dir) do
|
while (root_dir) do
|
||||||
if git_dir_cache[root_dir] then
|
if git_dir_cache[root_dir] then
|
||||||
|
@ -56,24 +56,24 @@ function Branch.find_git_dir()
|
||||||
if git_file_stat.type == 'directory' then
|
if git_file_stat.type == 'directory' then
|
||||||
git_dir = git_path
|
git_dir = git_path
|
||||||
elseif git_file_stat.type == 'file' then
|
elseif git_file_stat.type == 'file' then
|
||||||
git_file = git_path
|
-- separate git-dir or submodule is used
|
||||||
|
local file = io.open(git_path)
|
||||||
|
git_dir = file:read()
|
||||||
|
git_dir = git_dir:match('gitdir: (.+)$')
|
||||||
|
file:close()
|
||||||
|
-- submodule / relative file path
|
||||||
|
if git_dir:sub(1, 1) ~= Branch.sep and not git_dir:match('^%a:.*$') then
|
||||||
|
git_dir = git_path:match('(.*).git') .. git_dir
|
||||||
|
end
|
||||||
end
|
end
|
||||||
break
|
local head_file_stat = vim.loop.fs_stat(git_dir..Branch.sep..'HEAD')
|
||||||
|
if head_file_stat and head_file_stat.type == 'file' then
|
||||||
|
break
|
||||||
|
else git_dir = nil end
|
||||||
end
|
end
|
||||||
root_dir = root_dir:match('(.*)'..Branch.sep..'.-')
|
root_dir = root_dir:match('(.*)'..Branch.sep..'.-')
|
||||||
end
|
end
|
||||||
|
|
||||||
if git_file then
|
|
||||||
-- separate git-dir or submodule is used
|
|
||||||
local file = io.open(git_file)
|
|
||||||
git_dir = file:read()
|
|
||||||
git_dir = git_dir:match('gitdir: (.+)$')
|
|
||||||
file:close()
|
|
||||||
-- submodule / relative file path
|
|
||||||
if git_dir:sub(1, 1) ~= Branch.sep and not git_dir:match('^%a:.*$') then
|
|
||||||
git_dir = git_file:match('(.*).git') .. git_dir
|
|
||||||
end
|
|
||||||
end
|
|
||||||
git_dir_cache[file_dir] = git_dir
|
git_dir_cache[file_dir] = git_dir
|
||||||
if Branch.git_dir ~= git_dir then
|
if Branch.git_dir ~= git_dir then
|
||||||
Branch.git_dir = git_dir
|
Branch.git_dir = git_dir
|
||||||
|
|
Loading…
Reference in New Issue