From 0c43e3a5b1bee772071d9d630dac7b647f384a2e Mon Sep 17 00:00:00 2001 From: Nathan DECHER Date: Mon, 14 Sep 2020 11:08:04 +0200 Subject: [PATCH] fixed broken cache --- moonbuild.lua | 32 +++++++++++++++++++++++++------- moonbuild/fscache.moon | 6 +++--- moonbuild/fsutil.moon | 13 ++++++++----- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/moonbuild.lua b/moonbuild.lua index 37a1d02..db513ff 100644 --- a/moonbuild.lua +++ b/moonbuild.lua @@ -22,8 +22,8 @@ makecached = function(fn) freeze = function(val) cache[val] = FROZEN end - local reset - reset = function() + local clear + clear = function() cache = { } end local get @@ -44,7 +44,7 @@ makecached = function(fn) get = get, invalidate = invalidate, freeze = freeze, - reset = reset + clear = clear }, { __call = function(self, val) return get(val) @@ -53,7 +53,15 @@ makecached = function(fn) end return { attributes = makecached(attributes), - dir = makecached(dir) + dir = makecached(function(file) + local _accum_0 = { } + local _len_0 = 1 + for k in dir(file) do + _accum_0[_len_0] = k + _len_0 = _len_0 + 1 + end + return _accum_0 + end) } end @@ -118,7 +126,9 @@ local ls ls = function(d) local _accum_0 = { } local _len_0 = 1 - for f in dir(normalizepath(d)) do + local _list_0 = dir(normalizepath(d)) + for _index_0 = 1, #_list_0 do + local f = _list_0[_index_0] if f ~= '.' and f ~= '..' then _accum_0[_len_0] = f _len_0 = _len_0 + 1 @@ -133,7 +143,9 @@ lswithpath = function(d) end local _accum_0 = { } local _len_0 = 1 - for f in dir(normalizepath(d)) do + local _list_0 = dir(normalizepath(d)) + for _index_0 = 1, #_list_0 do + local f = _list_0[_index_0] if f ~= '.' and f ~= '..' then _accum_0[_len_0] = d .. '/' .. f _len_0 = _len_0 + 1 @@ -264,6 +276,11 @@ invalidatecache = function(file) dir.invalidate(parentdir(file)) return attributes.invalidate(file) end +local clearcache +clearcache = function() + dir.clear() + return attributes.clear() +end return { wildcard = wildcard, exists = exists, @@ -272,7 +289,8 @@ return { normalizepath = normalizepath, parentdir = parentdir, freezecache = freezecache, - invalidatecache = invalidatecache + invalidatecache = invalidatecache, + clearcache = clearcache } end diff --git a/moonbuild/fscache.moon b/moonbuild/fscache.moon index 3fd60cd..8a6e982 100644 --- a/moonbuild/fscache.moon +++ b/moonbuild/fscache.moon @@ -12,7 +12,7 @@ makecached = (fn) -> freeze = (val) -> cache[val] = FROZEN - reset = -> + clear = -> cache = {} get = (val) -> @@ -24,10 +24,10 @@ makecached = (fn) -> cache[val] = ret unpack ret - setmetatable { :get, :invalidate, :freeze, :reset }, + setmetatable { :get, :invalidate, :freeze, :clear }, __call: (val) => get val { attributes: makecached attributes - dir: makecached dir + dir: makecached (file) -> [k for k in dir file] } diff --git a/moonbuild/fsutil.moon b/moonbuild/fsutil.moon index b71a2ec..e546157 100644 --- a/moonbuild/fsutil.moon +++ b/moonbuild/fsutil.moon @@ -19,12 +19,11 @@ normalizepath = (file) -> (absolute and '/' or '') .. concat parts, '/' ls = (d) -> - [f for f in dir normalizepath d when f!='.' and f!='..'] + [f for f in *dir normalizepath d when f!='.' and f!='..'] lswithpath = (d) -> - if d=='' - return ls '.' - [d..'/'..f for f in dir normalizepath d when f!='.' and f!='..'] + return ls '.' if d=='' + [d..'/'..f for f in *dir normalizepath d when f!='.' and f!='..'] exists = (f) -> (attributes normalizepath f) != nil @@ -109,10 +108,14 @@ invalidatecache = (file) -> dir.invalidate parentdir file attributes.invalidate file +clearcache = -> + dir.clear! + attributes.clear! + { :wildcard :exists, :isdir :mtime :normalizepath, :parentdir - :freezecache, :invalidatecache + :freezecache, :invalidatecache, :clearcache }