From a8bb01c96e09c575319cfb0e6813c05b4bed757e Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Sat, 19 Feb 2022 10:12:11 +0000 Subject: [PATCH] Move iter_gnu_digest_stderr to cdblib --- cdb | 20 +++++++------------- cdblib.lua | 12 +++++++++++- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/cdb b/cdb index 5a24ada..912c97a 100755 --- a/cdb +++ b/cdb @@ -90,13 +90,6 @@ end ----------------------------------------------------------------- }}} ----------------------------------------------- Command utilities {{{ -local function iter_gnu_digest_stderr(baseiter) - local errcb = function(line) - io.stderr:write("Bad line: ", line, "\n") - return true -- continue iteration - end - return cdblib.iter_gnu_digest(errcb, baseiter) -end local function mk_progress_pair(fn) local progeach = function() end @@ -272,8 +265,8 @@ mksubcmd(function(c) end end - - local mkiter = iter_gnu_digest_stderr(cdblib.iter_lines_or_nul(args.inul)) + local mkiter = cdblib.iter_gnu_digest_stderr( + cdblib.iter_lines_or_nul(args.inul)) local sth_hash_find = assert(sql_mk_hashid_find(dbh)) local sth_path_by_hash = assert(sql_mk_pathid_find_by_hash(dbh)) local sth_superseder_by_hash = assert(sql_mk_superseder_find_by_hash(dbh)) @@ -656,7 +649,7 @@ mksubcmd(function(c) local rex = (args.predicate == "in") local renderer = renderer_for(args) local sth = assert(sql_mk_hashid_find(dbh)) - for h, p in iter_gnu_digest_stderr(cdblib.iter_lines())() do + for h, p in cdblib.iter_gnu_digest_stderr(cdblib.iter_lines())() do local res = sql_run_one_x(sth, h) if (res ~= nil) == rex then io.write(renderer(h, p)) end end @@ -683,7 +676,7 @@ mksubcmd(function(c) local mkiter = cdblib.iter_lines_or_nul(args.inul) local mkiter = args.in_paths and cdblib.iter_just_paths_as_digest(args.in_paths, mkiter) - or iter_gnu_digest_stderr(mkiter) + or cdblib.iter_gnu_digest_stderr(mkiter) local sth = sql_mk_pathid_find(dbh) for h, p in mkiter() do @@ -716,7 +709,8 @@ mksubcmd(function(c) FROM path_hash NATURAL JOIN hashes WHERE pathid = ? AND hash != ?]])) local fail = 0 - for h, p in iter_gnu_digest_stderr(cdblib.iter_lines_or_nul(args.inul))() do + for h, p in cdblib.iter_gnu_digest_stderr( + cdblib.iter_lines_or_nul(args.inul))() do p = plpath.normpath(plpath.join(args.graft, p)) local pid = sql_run_one_x(sth_path_find, p) if pid == nil then @@ -904,7 +898,7 @@ mksubcmd(function(c) local progeach, progfin = mk_progress_pair(args.progress) - for h, p in iter_gnu_digest_stderr(mkiter)() do + for h, p in cdblib.iter_gnu_digest_stderr(mkiter)() do local docommit = false p = plpath.normpath(plpath.join(args.graft, p)) local pid = sql_run_one_x(sth_path_upsert, p)[1] diff --git a/cdblib.lua b/cdblib.lua index 69d7acc..3e3748c 100644 --- a/cdblib.lua +++ b/cdblib.lua @@ -29,7 +29,7 @@ _M.unescape_gnu_digest = unescape_gnu_digest -- Iterate a GNU digest tool stream, canonicalizing file names into their -- unescaped form if necessary. `errcb` is invoked for lines that do not match -- and may return `false` to stop iteration. -function _M.iter_gnu_digest(errcb, baseiter) +local function iter_gnu_digest(errcb, baseiter) return function() return coroutine.wrap(function() for line in baseiter() do if line == nil then return nil end @@ -42,6 +42,16 @@ function _M.iter_gnu_digest(errcb, baseiter) end end) end end +_M.iter_gnu_digest = iter_gnu_digest + +function _M.iter_gnu_digest_stderr(baseiter) + local errcb = function(line) + io.stderr:write("Bad line: ", line, "\n") + return true -- continue iteration + end + return iter_gnu_digest(errcb, baseiter) +end + function _M.iter_just_paths_as_digest(dummyhash, baseiter) return function() return coroutine.wrap(function() -- 2.50.1