diff options
-rwxr-xr-x | luaotfload-tool.lua | 22 | ||||
-rw-r--r-- | mkfilelist | 34 |
2 files changed, 50 insertions, 6 deletions
diff --git a/luaotfload-tool.lua b/luaotfload-tool.lua index 5a9e08d..3010653 100755 --- a/luaotfload-tool.lua +++ b/luaotfload-tool.lua @@ -928,11 +928,22 @@ do local verify_files = function (errcnt) out ("Loading file hashes.") - local hashes = require (hash_list) - if not hashes then - out ("Testing %d files for integrity.", nhashes) + local info = require (hash_list) + local hashes = info.hashes + local notes = info.notes + if not hashes or #hashes == 0 then + out ("FAILED: cannot read checksums from %s.", hash_list) + return 1/0 + elseif not notes then + out ("FAILED: cannot read commit metadata from %s.", + hash_list) return 1/0 end + + out ("Luaotfload revision %s.", notes.revision) + out ("Committed by %s.", notes.committer) + out ("Timestamp %s.", notes.timestamp) + local nhashes = #hashes out ("Testing %d files for integrity.", nhashes) for i = 1, nhashes do @@ -953,14 +964,15 @@ do errcnt = errcnt + 1 out ("FAILED: checksum mismatch for file %s.", fname) - out ("Expected %s, got %s.", canonicalsum, sum) + out ("Expected %s.", canonicalsum) + out ("Got %s.", sum) else out ("Ok, %s passed.", fname) end end end end - return errcnt + return errcnt, notes end actions.diagnose = function (job) @@ -23,6 +23,7 @@ local stringformat = string.format local md5sumhexa = md5.sumhexa local ioloaddata = io.loaddata local iosavedata = io.savedata +local iopopen = io.popen ----------------------------------------------------------------------- -- settings @@ -70,6 +71,35 @@ local die = function (...) os.exit (1) end +local gitcmd = "git log -1 \z + --format=\"return {\z + %n revision = [[%H]],\z + %n timestamp = [[%cd]],\z + %n committer = [[%cn <%ce>]],\z + %n}\" \z + --date=iso" + +local git_info = function () + --io.write (gitcmd) + --io.write "\n" + local chan = iopopen (gitcmd) + if not chan then + die ("this script needs to be run inside \z + the luaotfload git repository") + end + + local data = chan:read "*all" + chan:close () + if data and type (data) == "string" and data ~= "" then + data = load (data) + if not data then + die "cannot parse git information" + end + return data () + end + die "cannot read from pipe" +end + ----------------------------------------------------------------------- -- functionality ----------------------------------------------------------------------- @@ -103,7 +133,9 @@ end local main = function () local hashes = hash_all () - local serialized = table.serialize (hashes, true) + local notes = git_info () + local serialized = table.serialize ({ notes = notes, + hashes = hashes }, true) local success = io.savedata (filelist, serialized) if success == false then die ("could not write to %s.", filelist) |