From f7da08bb193e9d0ae9e12319ba2941fa61f5d9c8 Mon Sep 17 00:00:00 2001 From: Evils <evils.devils@protonmail.com> Date: Sat, 25 Dec 2021 16:52:54 +0100 Subject: [PATCH] kicad.updateScript: full shellcheck --- .../science/electronics/kicad/update.sh | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/pkgs/applications/science/electronics/kicad/update.sh b/pkgs/applications/science/electronics/kicad/update.sh index 0300a11c7857..48270e962f53 100755 --- a/pkgs/applications/science/electronics/kicad/update.sh +++ b/pkgs/applications/science/electronics/kicad/update.sh @@ -1,7 +1,9 @@ #!/usr/bin/env nix-shell #!nix-shell -i bash -p coreutils git nix curl +# shellcheck shell=bash enable=all set -e +shopt -s inherit_errexit # this script will generate versions.nix in the right location # this should contain the versions' revs and hashes @@ -25,10 +27,12 @@ export TMPDIR=/tmp # remove items left in /nix/store? # get the latest tag that isn't an RC or *.99 -latest_tag="$(git ls-remote --tags --sort -version:refname \ - https://gitlab.com/kicad/code/kicad.git \ - | grep -o 'refs/tags/[0-9]*\.[0-9]*\.[0-9]*$' \ - | grep -v "\.99" | grep -v "\.9\.9" | head -n 1 | cut -d '/' -f 3)" +latest_tags="$(git ls-remote --tags --sort -version:refname https://gitlab.com/kicad/code/kicad.git)" +# using a scratch variable to ensure command failures get caught (SC2312) +scratch="$(grep -o 'refs/tags/[0-9]*\.[0-9]*\.[0-9]*$' <<< "${latest_tags}")" +scratch="$(grep -ve '\.99' -e '\.9\.9' <<< "${scratch}")" +scratch="$(head -n 1 <<< "${scratch}")" +latest_tag="$(cut -d '/' -f 3 <<< "${scratch}")" all_versions=( "${latest_tag}" master ) @@ -60,11 +64,15 @@ tmp="${here}/,versions.nix.${RANDOM}" libs=( symbols templates footprints packages3d ) -get_rev="git ls-remote --heads --tags" +get_rev() { + git ls-remote --heads --tags "$@" +} gitlab="https://gitlab.com/kicad" # append commit hash or tag -gitlab_pre="https://gitlab.com/api/v4/projects/kicad%2Fcode%2Fkicad/repository/archive.tar.gz?sha=" +src_pre="https://gitlab.com/api/v4/projects/kicad%2Fcode%2Fkicad/repository/archive.tar.gz?sha=" +lib_pre="https://gitlab.com/api/v4/projects/kicad%2Flibraries%2Fkicad-" +lib_mid="/repository/archive.tar.gz?sha=" count=0 @@ -104,16 +112,19 @@ for version in "${all_versions[@]}"; do printf "%6ssrc = {\n" "" echo "Checking src" >&2 - src_rev="$(${get_rev} "${gitlab}"/code/kicad.git "${version}" | cut -f1)" + scratch="$(get_rev "${gitlab}"/code/kicad.git "${version}")" + src_rev="$(cut -f1 <<< "${scratch}")" has_rev="$(grep -sm 1 "\"${pname}\"" -A 4 "${file}" | grep -sm 1 "${src_rev}" || true)" has_hash="$(grep -sm 1 "\"${pname}\"" -A 5 "${file}" | grep -sm 1 "sha256" || true)" + if [[ -n ${has_rev} && -n ${has_hash} && -z ${clean} ]]; then echo "Reusing old ${pname}.src.sha256, already latest .rev" >&2 - grep -sm 1 "\"${pname}\"" -A 5 "${file}" | grep -sm 1 "rev" -A 1 + scratch=$(grep -sm 1 "\"${pname}\"" -A 5 "${file}") + grep -sm 1 "rev" -A 1 <<< "${scratch}" else + prefetched="$(${prefetch} "${src_pre}${src_rev}")" printf "%8srev =\t\t\t\"%s\";\n" "" "${src_rev}" - printf "%8ssha256 =\t\t\"%s\";\n" \ - "" "$(${prefetch} "${gitlab_pre}${src_rev}")" + printf "%8ssha256 =\t\t\"%s\";\n" "" "${prefetched}" count=$((count+1)) fi printf "%6s};\n" "" @@ -126,20 +137,23 @@ for version in "${all_versions[@]}"; do for lib in "${libs[@]}"; do echo "Checking ${lib}" >&2 url="${gitlab}/libraries/kicad-${lib}.git" - lib_rev="$(${get_rev} "${url}" "${version}" | cut -f1 | tail -n1)" + scratch="$(get_rev "${url}" "${version}")" + scratch="$(cut -f1 <<< "${scratch}")" + lib_rev="$(tail -n1 <<< "${scratch}")" has_rev="$(grep -sm 1 "\"${pname}\"" -A 19 "${file}" | grep -sm 1 "${lib_rev}" || true)" has_hash="$(grep -sm 1 "\"${pname}\"" -A 20 "${file}" | grep -sm 1 "${lib}.sha256" || true)" if [[ -n ${has_rev} && -n ${has_hash} && -z ${clean} ]]; then echo "Reusing old kicad-${lib}-${today}.src.sha256, already latest .rev" >&2 - grep -sm 1 "\"${pname}\"" -A 20 "${file}" | grep -sm 1 "${lib}" -A 1 + scratch="$(grep -sm 1 "\"${pname}\"" -A 20 "${file}")" + grep -sm 1 "${lib}" -A 1 <<< "${scratch}" else + prefetched="$(${prefetch} "${lib_pre}${lib}${lib_mid}${lib_rev}")" printf "%8s%s.rev =\t" "" "${lib}" case "${lib}" in symbols|templates) printf "\t" ;; *) ;; esac printf "\"%s\";\n" "${lib_rev}" - printf "%8s%s.sha256 =\t\"%s\";\n" "" \ - "${lib}" "$(${prefetch} "https://gitlab.com/api/v4/projects/kicad%2Flibraries%2Fkicad-${lib}/repository/archive.tar.gz?sha=${lib_rev}")" + printf "%8s%s.sha256 =\t\"%s\";\n" "" "${lib}" "${prefetched}" count=$((count+1)) fi done