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:
kevans 2018-10-29 02:58:30 +00:00
parent 63cd903b30
commit d59b5479f9

View File

@ -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