commit: 7d33f5bb5efaf880096e70da74cfb7e830ee7625
parent b4ced98b9dd28062a7990592b7723b8916448679
Author: Michael Forney <mforney@mforney.org>
Date: Mon, 22 Jun 2020 00:10:48 -0700
Add sortedpairs helper function
Diffstat:
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]