lualoader: Fix try_include error handling
The previous iteration of try_include attempted to be 'friendly' and error() out if we hit an error that wasn't ENOENT. This was semi-OK, but fragile as it relied on pattern matching the error message. Move the responsibility for handling failure to the caller. Following a common lua pattern, we'll return the return value of the underlying require() on success, or false and an error message. Reported by: bcran MFC after: 3 days
This commit is contained in:
parent
63cd903b30
commit
d59b5479f9
@ -66,23 +66,15 @@ end
|
|||||||
|
|
||||||
|
|
||||||
-- Globals
|
-- Globals
|
||||||
-- try_include will return the loaded module on success, or nil on failure.
|
-- try_include will return the loaded module on success, or false and the error
|
||||||
-- A message will also be printed on failure, with one exception: non-verbose
|
-- message on failure.
|
||||||
-- loading will suppress 'module not found' errors.
|
|
||||||
function try_include(module)
|
function try_include(module)
|
||||||
local status, ret = pcall(require, module)
|
local status, ret = pcall(require, module)
|
||||||
-- ret is the module if we succeeded.
|
-- ret is the module if we succeeded.
|
||||||
if status then
|
if status then
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
-- Otherwise, ret is just a message; filter out ENOENT unless we're
|
return false, ret
|
||||||
-- doing a verbose load. As a consequence, try_include prior to loading
|
|
||||||
-- configuration will not display 'module not found'. All other errors
|
|
||||||
-- in loading will be printed.
|
|
||||||
if config.verbose or ret:match("^module .+ not found") == nil then
|
|
||||||
error(ret, 2)
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Module exports
|
-- Module exports
|
||||||
|
Loading…
x
Reference in New Issue
Block a user