diff options
Diffstat (limited to 'scripts/context/lua/mtx-cache.lua')
-rw-r--r-- | scripts/context/lua/mtx-cache.lua | 117 |
1 files changed, 67 insertions, 50 deletions
diff --git a/scripts/context/lua/mtx-cache.lua b/scripts/context/lua/mtx-cache.lua index c2a0db00d..a6985d3bc 100644 --- a/scripts/context/lua/mtx-cache.lua +++ b/scripts/context/lua/mtx-cache.lua @@ -9,70 +9,87 @@ if not modules then modules = { } end modules ['mtx-cache'] = { scripts = scripts or { } scripts.cache = scripts.cache or { } -function scripts.cache.collect_one(...) - local path = caches.setpath(...) - local tmas = dir.glob(path .. "/*.tma") - local tmcs = dir.glob(path .. "/*.tmc") - return path, tmas, tmcs -end - -function scripts.cache.collect_two(...) - local path = caches.setpath(...) - local rest = dir.glob(path .. "/**/*") - return path, rest -end - -local suffixes = { "afm", "tfm", "def", "enc", "otf", "mp", "data" } - -function scripts.cache.process_one(action) - for i=1,#suffixes do - action("fonts", suffixes[i]) +local function collect(path) + local all = dir.glob(path .. "/**/*") + local tmas, tmcs, rest = { }, { }, { } + for i=1,#all do + local name = all[i] + local suffix = file.suffix(name) + if suffix == "tma" then + tmas[#tmas+1] = name + elseif suffix == "tmc" then + tmcs[#tmcs+1] = name + else + rest[#rest+1] = name + end end + return tmas, tmcs, rest, all end -function scripts.cache.process_two(action) - action("curl") +local function list(banner,path,tmas,tmcs,rest) + logs.report("cache",string.format("%s: %s",banner,path)) + logs.report() + logs.report("cache",string.format("tma : %4i",#tmas)) + logs.report("cache",string.format("tmc : %4i",#tmcs)) + logs.report("cache",string.format("rest : %4i",#rest)) + logs.report("cache",string.format("total : %4i",#tmas+#tmcs+#rest)) + logs.report() end --- todo: recursive delete of paths - -function scripts.cache.remove(list,keep) - local n, keepsuffixes = 0, table.tohash(keep or { }) +local function purge(banner,path,list,all) + logs.report("cache",string.format("%s: %s",banner,path)) + logs.report() + local n = 0 for i=1,#list do local filename = list[i] if string.find(filename,"luatex%-cache") then -- safeguard - if not keepsuffixes[file.extname(filename) or ""] then + if all then os.remove(filename) n = n + 1 + else + local suffix = file.suffix(filename) + if suffix == "tma" then + local checkname = file.replacesuffix(filename,"tma","tmc") + if lfs.isfile(checkname) then + os.remove(filename) + n = n + 1 + end + end end end end - return n + logs.report("cache",string.format("removed tma files : %i",n)) + logs.report() +end + +function scripts.cache.purge() + local writable = caches.getwritablepath() + local tmas, tmcs, rest = collect(writable) + list("writable path",writable,tmas,tmcs,rest) + local n = purge("writable path",writable,tmas) + list("writable path",writable,tmas,tmcs,rest) end -function scripts.cache.delete(all,keep) - scripts.cache.process_one(function(...) - local path, rest = scripts.cache.collect_one(...) - local n = scripts.cache.remove(rest,keep) - logs.report("cache path",string.format("%4i files out of %4i deleted on %s",n,#rest,path)) - end) - scripts.cache.process_two(function(...) - local path, rest = scripts.cache.collect_two(...) - local n = scripts.cache.remove(rest,keep) - logs.report("cache path",string.format("%4i files out of %4i deleted on %s",n,#rest,path)) - end) +function scripts.cache.erase() + local writable = caches.getwritablepath() + local tmas, tmcs, rest, all = collect(writable) + list("writable path",writable,tmas,tmcs,rest) + local n = purge("writable path",writable,all,true) + list("writable path",writable,tmas,tmcs,rest) end -function scripts.cache.list(all) - scripts.cache.process_one(function(...) - local path, tmas, tmcs = scripts.cache.collect_one(...) - logs.report("cache path",string.format("%4i (tma:%4i, tmc:%4i) %s",#tmas+#tmcs,#tmas,#tmcs,path)) - logs.report("cache path",string.format("%4i (tma:%4i, tmc:%4i) %s",#tmas+#tmcs,#tmas,#tmcs,path)) - end) - scripts.cache.process_two(function(...) - local path, rest = scripts.cache.collect_two("curl") - logs.report("cache path",string.format("%4i %s",#rest,path)) - end) +function scripts.cache.list() + local readables = caches.getreadablepaths() + local writable = caches.getwritablepath() + local tmas, tmcs, rest = collect(writable) + list("writable path",writable,tmas,tmcs,rest) + for i=1,#readables do + local readable = readables[i] + if readable ~= writable then + local tmas, tmcs = collect(readable) + list("readable path",readable,tmas,tmcs,rest) + end + end end logs.extendbanner("ConTeXt & MetaTeX Cache Management 0.10") @@ -86,11 +103,11 @@ messages.help = [[ ]] if environment.argument("purge") then - scripts.cache.delete(environment.argument("all"),{"tmc"}) + scripts.cache.purge() elseif environment.argument("erase") then - scripts.cache.delete(environment.argument("all")) + scripts.cache.erase() elseif environment.argument("list") then - scripts.cache.list(environment.argument("all")) + scripts.cache.list() else logs.help(messages.help) end |