From d9fb53ddd63e61233a255565430a01df7f443709 Mon Sep 17 00:00:00 2001 From: Dmitry Kalinkin Date: Mon, 9 Mar 2020 17:18:43 -0400 Subject: [PATCH] texlive: reimplement fixHashes.sh in GNU Awk The shell script doesn't work very well in non-GNU environments like darwin. This provides an implementation that uses just a single GNU tool - gawk, thus reduces number of points of failure. --- .../typesetting/tex/texlive/UPGRADING.md | 5 ++-- .../typesetting/tex/texlive/fixHashes.awk | 24 +++++++++++++++++++ .../typesetting/tex/texlive/fixHashes.sh | 10 -------- 3 files changed, 26 insertions(+), 13 deletions(-) create mode 100755 pkgs/tools/typesetting/tex/texlive/fixHashes.awk delete mode 100755 pkgs/tools/typesetting/tex/texlive/fixHashes.sh diff --git a/pkgs/tools/typesetting/tex/texlive/UPGRADING.md b/pkgs/tools/typesetting/tex/texlive/UPGRADING.md index 3f37184e5d3..71c42917394 100644 --- a/pkgs/tools/typesetting/tex/texlive/UPGRADING.md +++ b/pkgs/tools/typesetting/tex/texlive/UPGRADING.md @@ -58,10 +58,9 @@ mv fixedHashes.nix fixedHashes-old.nix # start with empty fixedHashes echo '{}' > fixedHashes.nix -nix-build ../../../../.. -Q --no-out-link -A texlive.scheme-full.pkgs | ./fixHashes.sh > ./fixedHashes-new.nix +nix-build ../../../../.. -Q --no-out-link -A texlive.scheme-full.pkgs | ./fixHashes.awk > ./fixedHashes-new.nix -# The script wrongly includes the nix store path to `biber`, which is a separate nixpkgs package -grep -v -F '/nix/store/' fixedHashes-new.nix > fixedHashes.nix +mv fixedHashes-new.nix fixedHashes.nix ``` ### Commit changes diff --git a/pkgs/tools/typesetting/tex/texlive/fixHashes.awk b/pkgs/tools/typesetting/tex/texlive/fixHashes.awk new file mode 100755 index 00000000000..88ba0bc1528 --- /dev/null +++ b/pkgs/tools/typesetting/tex/texlive/fixHashes.awk @@ -0,0 +1,24 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i "gawk -f" -p gawk + +BEGIN { + print "{" +} + +/-texlive-/ && !/\.bin/ { + if (match($0, /-texlive-([^\/]*)/, m) == 0) { + print "No match for \""$0"\"" > "/dev/stderr" + exit 1 + } + cmd="nix-hash --type sha1 --base32 "$0 + if (( cmd | getline hash ) <= 0) { + print "Error executing nix-hash" > "/dev/stderr" + exit 1 + } + close(cmd) + printf("\"%s\"=\"%s\";\n", m[1], hash) +} + +END { + print "}" +} diff --git a/pkgs/tools/typesetting/tex/texlive/fixHashes.sh b/pkgs/tools/typesetting/tex/texlive/fixHashes.sh deleted file mode 100755 index 439660682e2..00000000000 --- a/pkgs/tools/typesetting/tex/texlive/fixHashes.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -echo "{" -grep -v -F '.bin-' | while read path; do - hash=`nix-hash --type sha1 --base32 "$path"` - echo -n "$path" | sed -E 's/[^-]*-texlive-(.*)/"\1"/' - echo "=\"$hash\";" -done -echo "}" -