fix: guard against nil metadata values (#548)

This commit is contained in:
Steven Arcangeli 2025-01-04 12:52:26 -08:00
parent c6a39a69b2
commit 254bc6635c
4 changed files with 23 additions and 23 deletions

View file

@ -56,7 +56,7 @@ file_columns.size = {
render = function(entry, conf)
local meta = entry[FIELD_META]
local stat = meta.stat
local stat = meta and meta.stat
if not stat then
return columns.EMPTY
end
@ -73,7 +73,7 @@ file_columns.size = {
get_sort_value = function(entry)
local meta = entry[FIELD_META]
local stat = meta.stat
local stat = meta and meta.stat
if stat then
return stat.size
else
@ -93,7 +93,7 @@ if not fs.is_windows then
render = function(entry, conf)
local meta = entry[FIELD_META]
local stat = meta.stat
local stat = meta and meta.stat
if not stat then
return columns.EMPTY
end
@ -106,7 +106,7 @@ if not fs.is_windows then
compare = function(entry, parsed_value)
local meta = entry[FIELD_META]
if parsed_value and meta.stat and meta.stat.mode then
if parsed_value and meta and meta.stat and meta.stat.mode then
local mask = bit.lshift(1, 12) - 1
local old_mode = bit.band(meta.stat.mode, mask)
if parsed_value ~= old_mode then
@ -156,7 +156,7 @@ for _, time_key in ipairs({ "ctime", "mtime", "atime", "birthtime" }) do
render = function(entry, conf)
local meta = entry[FIELD_META]
local stat = meta.stat
local stat = meta and meta.stat
if not stat then
return columns.EMPTY
end
@ -188,7 +188,7 @@ for _, time_key in ipairs({ "ctime", "mtime", "atime", "birthtime" }) do
get_sort_value = function(entry)
local meta = entry[FIELD_META]
local stat = meta.stat
local stat = meta and meta.stat
if stat then
return stat[time_key].sec
else

View file

@ -126,7 +126,7 @@ ssh_columns.permissions = {
compare = function(entry, parsed_value)
local meta = entry[FIELD_META]
if parsed_value and meta.mode then
if parsed_value and meta and meta.mode then
local mask = bit.lshift(1, 12) - 1
local old_mode = bit.band(meta.mode, mask)
if parsed_value ~= old_mode then
@ -169,7 +169,7 @@ ssh_columns.size = {
get_sort_value = function(entry)
local meta = entry[FIELD_META]
if meta.size then
if meta and meta.size then
return meta.size
else
return 0

View file

@ -131,7 +131,7 @@ end
---@param cb fun(path: string)
M.get_entry_path = function(url, entry, cb)
local internal_entry = assert(cache.get_entry_by_id(entry.id))
local meta = internal_entry[FIELD_META]
local meta = assert(internal_entry[FIELD_META])
---@type oil.TrashInfo
local trash_info = meta.trash_info
if not trash_info then
@ -381,7 +381,7 @@ file_columns.mtime = {
get_sort_value = function(entry)
local meta = entry[FIELD_META]
---@type nil|oil.TrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
if trash_info then
return trash_info.deletion_date
else
@ -417,7 +417,7 @@ M.filter_action = function(action)
elseif action.type == "delete" then
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META]
return meta.trash_info ~= nil
return meta ~= nil and meta.trash_info ~= nil
elseif action.type == "move" then
local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
@ -447,7 +447,7 @@ M.render_action = function(action)
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META]
---@type oil.TrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
local short_path = fs.shorten_path(trash_info.original_path)
return string.format(" PURGE %s", short_path)
elseif action.type == "move" then
@ -561,7 +561,7 @@ M.perform_action = function(action, cb)
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META]
---@type oil.TrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
purge(trash_info, cb)
elseif action.type == "move" then
local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
@ -576,7 +576,7 @@ M.perform_action = function(action, cb)
local entry = assert(cache.get_entry_by_url(action.src_url))
local meta = entry[FIELD_META]
---@type oil.TrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err)
if err then
return cb(err)
@ -608,7 +608,7 @@ M.perform_action = function(action, cb)
local entry = assert(cache.get_entry_by_url(action.src_url))
local meta = entry[FIELD_META]
---@type oil.TrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb)
else
error("Must be moving files into or out of trash")

View file

@ -164,8 +164,8 @@ file_columns.mtime = {
get_sort_value = function(entry)
local meta = entry[FIELD_META]
---@type oil.WindowsTrashInfo
local trash_info = meta.trash_info
---@type nil|oil.WindowsTrashInfo
local trash_info = meta and meta.trash_info
if trash_info and trash_info.deletion_date then
return trash_info.deletion_date
else
@ -199,7 +199,7 @@ M.filter_action = function(action)
elseif action.type == "delete" then
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META]
return meta.trash_info ~= nil
return meta ~= nil and meta.trash_info ~= nil
elseif action.type == "move" then
local src_adapter = assert(config.get_adapter_by_scheme(action.src_url))
local dest_adapter = assert(config.get_adapter_by_scheme(action.dest_url))
@ -235,7 +235,7 @@ end
M.get_entry_path = function(url, entry, cb)
local internal_entry = assert(cache.get_entry_by_id(entry.id))
local meta = internal_entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]]
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
if not trash_info then
-- This is a subpath in the trash
M.normalize_url(url, cb)
@ -265,7 +265,7 @@ M.render_action = function(action)
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META]
---@type oil.WindowsTrashInfo
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
local short_path = fs.shorten_path(trash_info.original_path)
return string.format(" PURGE %s", short_path)
elseif action.type == "move" then
@ -348,7 +348,7 @@ M.perform_action = function(action, cb)
if action.type == "delete" then
local entry = assert(cache.get_entry_by_url(action.url))
local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]]
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
purge(trash_info, cb)
elseif action.type == "move" then
@ -364,7 +364,7 @@ M.perform_action = function(action, cb)
dest_path = fs.posix_to_os_path(dest_path)
local entry = assert(cache.get_entry_by_url(action.src_url))
local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]]
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
fs.recursive_move(action.entry_type, trash_info.trash_file, dest_path, function(err)
if err then
return cb(err)
@ -388,7 +388,7 @@ M.perform_action = function(action, cb)
dest_path = fs.posix_to_os_path(dest_path)
local entry = assert(cache.get_entry_by_url(action.src_url))
local meta = entry[FIELD_META] --[[@as {stat: uv_fs_t, trash_info: oil.WindowsTrashInfo, display_name: string}]]
local trash_info = meta.trash_info
local trash_info = meta and meta.trash_info
fs.recursive_copy(action.entry_type, trash_info.trash_file, dest_path, cb)
else
error("Must be moving files into or out of trash")