return l
end
-local function assertFlags(flags)
+--- verify common cache flags table
+-- @param flags flags table or nil
+-- @return valid flags table
+-- @raise error on unknown fields/types
+local function verify_optional_flags(flags)
+ if flags == nil then
+ return {}
+ end
+
+ assertIsTable(flags)
+ if #flags == 0 then
+ return flags
+ end
+
local known = {
cachable = "boolean",
cache = "boolean",
writeback = "boolean",
}
- assertIsTable(flags)
for key in pairs(flags) do
if known[key] == "string" then
assertIsString(flags[key])
key, tostring(flags[key]), type(flags[key])))
end
end
+ return flags
end
--- create a new cache entry
ce.server = server
ce.remote_url = ru.url
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
ce.flags = {}
ce.flags.cachable = flags.cachable
function cache.cache_enabled(c, server, flags)
assertIsTable(c)
assertIsStringN(server)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local ce, re = cache.ce_by_server(c, server)
if not ce then
assertIsTable(c)
assertIsStringN(server)
assertIsStringN(location)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
if not cache.cache_enabled(c, server, flags) then
return false
function cache.islocal_enabled(c, server, flags)
assertIsTable(c)
assertIsStringN(server)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re, ce
assertIsTable(c)
assertIsStringN(server)
assertIsStringN(location)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re
local ce, u, filepath
-- @param c the cache data structure
-- @param server the server to fetch the file from
-- @param location the location on the server
--- @param flags
+-- @param flags table of flags, optional
-- @return bool
-- @return an error object on failure
local function cache_file(c, server, location, flags)
if not ce then
return false, e:cat(re)
end
- assertFlags(flags)
if not cache.cache_enabled(c, server, flags) then
return false, e:append("caching is disabled")
assertIsStringN(destdir)
destname = destname or e2lib.basename(location)
assertIsStringN(destname)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re
local e = err.new("cache: fetching file failed")
assertIsTable(c)
assertIsStringN(server)
assertIsStringN(location)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re, e
local ce, filepath
assertIsTable(c)
assertIsStringN(server)
assertIsStringN(location)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re, e
local ce
-- @return an error object on failure
local function cache_writeback(c, server, location, flags)
local rc, re
- assertFlags(flags)
local ce, re = cache.ce_by_server(c, server)
if not ce then
-- @return bool
-- @return an error object on failure
function cache.push_file(c, sourcefile, server, location, flags)
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local rc, re
local e = err.new("error pushing file to %s:%s", server, location)
function cache.writeback_enabled(c, server, flags)
assert(type(c) == "table", "invalid cache")
assert(type(server) == "string" and server ~= "", "invalid server")
- flags = flags or {}
- assertFlags(flags)
+ flags = verify_optional_flags(flags)
local ce, re