diff options
author | Gonzalo TornarĂa <tornaria@cmat.edu.uy> | 2022-02-20 09:46:13 -0300 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2022-02-20 14:18:37 +0100 |
commit | d3b0cdd3b741bd7163f513bf10f97687bfb133ff (patch) | |
tree | 097d2f45c59ed64d2cb8c47218029f688915da22 | |
parent | 59eacf3c261e3f80a81e9ce53631a871f2b1b68b (diff) | |
download | xtools-d3b0cdd3b741bd7163f513bf10f97687bfb133ff.tar.gz xtools-d3b0cdd3b741bd7163f513bf10f97687bfb133ff.tar.xz xtools-d3b0cdd3b741bd7163f513bf10f97687bfb133ff.zip |
xlint: add option to lint from git index
This commit introduces two new uses of xlint: $ xlint :PKGNAME Lints the template corresponding to package PKGNAME as currently staged in the git index (i.e. the version that would be committed) $ xlint : Lints all templates that are changed in the git index. Useful to run from the pre-commit hook for the void-packages repo.
-rwxr-xr-x | xlint | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/xlint b/xlint index 4f60df4..3c37558 100755 --- a/xlint +++ b/xlint @@ -1,5 +1,7 @@ #!/bin/sh # xlint TEMPLATE - scan XBPS template for common mistakes +# xlint :PKGNAME - lint template as staged in the git index +# xlint : - lint all templates staged in the git index export LC_ALL=C @@ -16,7 +18,7 @@ once() { header() { if [ "$(head -n1 "$template")" != "# Template file for '$pkgname'" ]; then - echo "$template:1: Header should be: # Template file for '$pkgname'" + echo "$argument:1: Header should be: # Template file for '$pkgname'" fi } @@ -24,9 +26,9 @@ exists_once() { for var in pkgname version revision short_desc maintainer license \ homepage; do case "$(grep -c "^${var}=" "$template")" in - 0) echo "$template: '$var' missing!";; + 0) echo "$argument: '$var' missing!";; 1) ;; - *) echo "$template: '$var' defined more than once";; + *) echo "$argument: '$var' defined more than once";; esac done } @@ -101,7 +103,7 @@ variables_order() { if [ "$variables_end" ]; then break elif [ "$curr_index" -lt "$max_index" ]; then - message="$template: Place $max_index_line= after ${line%%=*}=" + message="$argument: Place $max_index_line= after ${line%%=*}=" elif [ "$curr_index" -gt "$max_index" ]; then max_index="$curr_index" max_index_line="${line%%=*}" @@ -345,10 +347,21 @@ znc" | tr '\n' '|') void_packages="$(xdistdir 2>/dev/null)/" ret=0 + +if [ "$1" = ":" ]; then + # get a list of all templates staged in the git index + set -- $(git -C "$void_packages" diff --cached --name-only | + sed -ne 's|^srcpkgs/\([^/]*\)/template$|:\1|p') +fi + for argument; do template= if [ -f "$argument" ]; then template="$argument" + elif [ "${argument#:}" != "$argument" ]; then + trap "rm -- ${tmpfile:=$(mktemp)}" EXIT INT TERM + git -C "$void_packages" show ":srcpkgs/${argument#:}/template" \ + > ${template:=$tmpfile} || continue else _template="${void_packages}srcpkgs/$argument/template" [ -f "$_template" ] && template="$_template" |