logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: 7d33f5bb5efaf880096e70da74cfb7e830ee7625
parent b4ced98b9dd28062a7990592b7723b8916448679
Author: Michael Forney <mforney@mforney.org>
Date:   Mon, 22 Jun 2020 00:10:48 -0700

Add sortedpairs helper function

Diffstat:

Mninja.lua12++++++++++--
Msetup.lua3+--
2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/ninja.lua b/ninja.lua @@ -20,12 +20,20 @@ local function collect(f, s, i) end -- collects the keys of a table into a sorted table -function table.keys(t) +function table.keys(t, f) local keys = collect(next, t) - table.sort(keys) + table.sort(keys, f) return keys end +-- iterates over the sorted keys and values of a table +function sortedpairs(t, f) + return function(s, i) + local k = s[i] + return k and i + 1, k, t[k] + end, table.keys(t, f), 1 +end + -- yields string values of table or nested tables local function stringsgen(t) for _, val in ipairs(t) do diff --git a/setup.lua b/setup.lua @@ -78,8 +78,7 @@ local function gen(gendir) local out = outdir..'/local.fspec' local tmp = out..'.tmp' local f = assert(io.open(tmp, 'w')) - for _, path in ipairs(table.keys(pkg.fspec)) do - local fspec = pkg.fspec[path] + for _, path, fspec in sortedpairs(pkg.fspec) do f:write(('/%s\n'):format(path)) for _, k in ipairs{'type', 'mode', 'source', 'target'} do local v = fspec[k]