Skip to content

Commit

Permalink
fix(ssh): garbled output when directory has broken symlinks
Browse files Browse the repository at this point in the history
The stderr was interleaving with the stdout when performing one of the
ls operations. This was causing the parsing to sometimes fail and crash.
  • Loading branch information
stevearc committed May 1, 2024
1 parent f3a31eb commit bcfc0a2
Showing 1 changed file with 21 additions and 18 deletions.
39 changes: 21 additions & 18 deletions lua/oil/adapters/ssh/sshfs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -175,28 +175,31 @@ function SSHFS:list_dir(url, path, callback)
if any_links then
-- If there were any soft links, then we need to run another ls command with -L so that we can
-- resolve the type of the link target
self.conn:run("ls -aLl --color=never" .. path_postfix, function(link_err, link_lines)
-- Ignore exit code 1. That just means one of the links could not be resolved.
if link_err and not link_err:match("^1:") then
return callback(link_err)
end
assert(link_lines)
for _, line in ipairs(link_lines) do
if line ~= "" and not line:match("^total") then
local ok, name, type, meta = pcall(parse_ls_line, line)
if ok and name ~= "." and name ~= ".." then
local cache_entry = entries[name]
if cache_entry[FIELD_TYPE] == "link" then
cache_entry[FIELD_META].link_stat = {
type = type,
size = meta.size,
}
self.conn:run(
"ls -aLl --color=never" .. path_postfix .. " 2> /dev/null",
function(link_err, link_lines)
-- Ignore exit code 1. That just means one of the links could not be resolved.
if link_err and not link_err:match("^1:") then
return callback(link_err)
end
assert(link_lines)
for _, line in ipairs(link_lines) do
if line ~= "" and not line:match("^total") then
local ok, name, type, meta = pcall(parse_ls_line, line)
if ok and name ~= "." and name ~= ".." then
local cache_entry = entries[name]
if cache_entry[FIELD_TYPE] == "link" then
cache_entry[FIELD_META].link_stat = {
type = type,
size = meta.size,
}
end
end
end
end
callback(nil, cache_entries)
end
callback(nil, cache_entries)
end)
)
else
callback(nil, cache_entries)
end
Expand Down

0 comments on commit bcfc0a2

Please sign in to comment.