fix(#1970): disable git integration after 5 timeouts (#1990)

* fix(#1970): additional log function gating for efficiency when not logging

* fix(#1970): additional log function gating for efficiency when not logging

* fix(#1970): disable git integration after 10 timeouts

* fix(#1970): disable git integration after 10 timeouts

* fix(#1970): disable git integration after 10 timeouts

* fix(#1970): cleanly kill timed out git processes

* fix(#1970): revert git kill, to be completed via #1974 experiment

* fix(#1970): revert git kill, to be completed via #1974 experiment
This commit is contained in:
Alexander Courtis
2023-02-12 14:28:48 +11:00
committed by GitHub
parent b712b82b0c
commit 36e29c3a95
3 changed files with 23 additions and 0 deletions

View File

@@ -626,6 +626,7 @@ Git integration with icons and colors.
*nvim-tree.git.timeout* *nvim-tree.git.timeout*
Kills the git process after some time if it takes too long. Kills the git process after some time if it takes too long.
Git integration will be disabled after 10 git jobs exceed this timeout.
Type: `number`, Default: `400` (ms) Type: `number`, Default: `400` (ms)
You will still need to set |renderer.icons.show.git| `= true` or You will still need to set |renderer.icons.show.git| `= true` or

View File

@@ -176,6 +176,13 @@ function M.purge_state()
M.cwd_to_project_root = {} M.cwd_to_project_root = {}
end end
--- Disable git integration permanently
function M.disable_git_integration()
log.line("git", "disabling git integration")
M.purge_state()
M.config.git.enable = false
end
function M.setup(opts) function M.setup(opts)
M.config.git = opts.git M.config.git = opts.git
M.config.filesystem_watchers = opts.filesystem_watchers M.config.filesystem_watchers = opts.filesystem_watchers

View File

@@ -1,9 +1,13 @@
local log = require "nvim-tree.log" local log = require "nvim-tree.log"
local utils = require "nvim-tree.utils" local utils = require "nvim-tree.utils"
local notify = require "nvim-tree.notify"
local Runner = {} local Runner = {}
Runner.__index = Runner Runner.__index = Runner
local timeouts = 0
local MAX_TIMEOUTS = 5
function Runner:_parse_status_output(status, path) function Runner:_parse_status_output(status, path)
-- replacing slashes if on windows -- replacing slashes if on windows
if vim.fn.has "win32" == 1 then if vim.fn.has "win32" == 1 then
@@ -159,6 +163,17 @@ function Runner.run(opts)
if self.rc == -1 then if self.rc == -1 then
log.line("git", "job timed out %s %s", opts.project_root, opts.path) log.line("git", "job timed out %s %s", opts.project_root, opts.path)
timeouts = timeouts + 1
if timeouts == MAX_TIMEOUTS then
notify.warn(
string.format(
"%d git jobs have timed out after %dms, disabling git integration. Try increasing git.timeout",
timeouts,
opts.timeout
)
)
require("nvim-tree.git").disable_git_integration()
end
elseif self.rc ~= 0 then elseif self.rc ~= 0 then
log.line("git", "job fail rc %d %s %s", self.rc, opts.project_root, opts.path) log.line("git", "job fail rc %d %s %s", self.rc, opts.project_root, opts.path)
else else