diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2014-12-09 22:34:54 +0100 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2014-12-09 22:34:54 +0100 |
commit | 7d03847cddef515e6cbbe8afc3e9b663371e57cd (patch) | |
tree | cddb0a038ba010981ecba7a1b85a8f0afd7c348e /scripts | |
parent | 7f02fde8764b58fadf93ea9d778ad05a42d28abb (diff) | |
download | luaotfload-7d03847cddef515e6cbbe8afc3e9b663371e57cd.tar.gz |
[import] implement automated batch import
Already being used for the next update commit.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/mkimport | 91 |
1 files changed, 80 insertions, 11 deletions
diff --git a/scripts/mkimport b/scripts/mkimport index 2ac1549..8e22690 100644 --- a/scripts/mkimport +++ b/scripts/mkimport @@ -70,9 +70,10 @@ local msg = function (...) iowrite "\n" end -local good_tag = stringformat("[\x1b[1;30;%dmgood\x1b[0m] · ", 42) -local bad_tag = stringformat("[\x1b[1;30;%dmBAD\x1b[0m] · ", 41) -local alert_tag = stringformat("[\x1b[1;%dmalert\x1b[0m] · " , 36) +local good_tag = stringformat("[\x1b[1;30;%dmgood\x1b[0m] · ", 42) +local bad_tag = stringformat("[\x1b[1;30;%dmBAD\x1b[0m] · ", 41) +local alert_tag = stringformat("[\x1b[1;%dmalert\x1b[0m] · " , 36) +local status_tag = stringformat("[\x1b[0;%dmstatus\x1b[0m] · " , 36) local good = function (...) local msg = (stringformat (...)) @@ -95,6 +96,13 @@ local attention = function (...) iowrite "\n" end +local status = function (...) + local msg = (stringformat (...)) + iowrite (status_tag) + iowrite (msg) + iowrite "\n" +end + ------------------------------------------------------------------------------- -- definitions ------------------------------------------------------------------------------- @@ -314,6 +322,34 @@ local get_file_definition = function (name, ourname, kind) --- search unsuccessful end --[[ [local get_file_definition = function (name, ourname, kind)] ]] +local import_imported = 0 +local import_skipped = 1 +local import_failed = 2 +local import_created = 3 + +local import_status = { + [import_imported] = "imported", + [import_skipped ] = "skipped", + [import_failed ] = "failed", + [import_created ] = "created", +} + +local summarize_status = function (counters) + local imported = counters[import_imported] or 0 + local skipped = counters[import_skipped ] or 0 + local created = counters[import_created ] or 0 + local failed = counters[import_failed ] or 0 + local sum = imported + skipped + created + failed + if sum < 1 then die ("garbage total of imported files: %s", sum) end + status ("-----------------------------------------------------------------") + status (" RESULT: %d files processed", sum) + status ("-----------------------------------------------------------------") + if created > 0 then status ("created: %d (%d %%)", created , created * 100 / sum) end + if imported > 0 then status ("imported: %d (%d %%)", imported, imported * 100 / sum) end + if skipped > 0 then status ("skipped: %d (%d %%)", skipped , skipped * 100 / sum) end + status ("-----------------------------------------------------------------") +end + local import_file = function (name, kind, def, cat) local expected_ourname = derive_ourname (name) if not def or not cat then @@ -323,20 +359,53 @@ local import_file = function (name, kind, def, cat) if not def then die ("unable to find a definition matching " .. name) end if not cat then die ("missing category for file " .. name .. " -- WTF‽") end - local dname = def.name - local dours = def.ours - local dkind = def.kind - local srcdir = derive_category_path (cat) - local src = file.join (srcdir, derive_fullname (cat, dname, kind)) - local dst = file.join (fontloader_subdir, expected_ourname) + local dname = def.name + local dours = def.ours + local dkind = def.kind + local srcdir = derive_category_path (cat) + local fullname = derive_fullname (cat, dname, kind) + local ourname = derive_ourname (dname, kind) + local src = file.join (srcdir, fullname) + local dst = file.join (fontloader_subdir, ourname) + local new = not lfs.isfile (dst) + if not new and hash_file (src) == hash_file (dst) then + status ("file %s is unchanged, skipping", fullname) + return import_skipped + end + status ("importing file %s", fullname) file.copy (src, dst) - return (hash_file (src) == hash_file (dst)) and 0 or 1 + if hash_file (src) == hash_file (dst) then + if new then return import_created end + return import_imported end + return import_failed end --[[ [local import_file = function (name, kind)] ]] local import = function (arg) if #arg > 1 then - return import_file (arg[2]) + local name = arg[2] or die ("invalid filename " .. tostring (arg[2])) + local stat = import_file (name) + if stat == import_failed then + die ("failed to import file " .. name) + end + status ("import status for file %s: %s", name, import_status[stat]) + end + --- Multiple files + local statcount = { } -- import status codes -> size_t + for cat, defs in next, imports do + local ndefs = #defs + for i = 1, ndefs do + local def = defs[i] + local stat = import_file (def.name, def.kind, def, cat) + if stat == import_failed then + die (stringformat ("import failed at file %d of %d (%s)", + i, ndefs, def.name)) + end + statcount[stat] = statcount[stat] or 0 + statcount[stat] = statcount[stat] + 1 + end end + summarize_status (statcount) + return 0 end --[[ [local import = function (arg)] ]] local job_kind = table.mirrored { |