diff options
author | Piotr Wójcik <chocimier@tlen.pl> | 2021-05-24 20:18:54 +0000 |
---|---|---|
committer | Piotr <chocimier@tlen.pl> | 2021-05-27 19:18:38 +0000 |
commit | c0331b57eb23ff8f16d82156dee2d78732af5383 (patch) | |
tree | 44f423874cf10d834d45dd1c7b3bfbdd93b59657 /common/scripts | |
parent | 2dbe48e26044ad40196d97086ff19993d284abea (diff) | |
download | void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar.gz void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar.bz2 void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar.lz void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar.xz void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.tar.zst void-packages-c0331b57eb23ff8f16d82156dee2d78732af5383.zip |
common: add lint-version-change
Diffstat (limited to 'common/scripts')
-rwxr-xr-x | common/scripts/lint-version-change | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/common/scripts/lint-version-change b/common/scripts/lint-version-change new file mode 100755 index 00000000000..5e968779938 --- /dev/null +++ b/common/scripts/lint-version-change @@ -0,0 +1,90 @@ +#!/bin/sh + +# when $3 is empty, template is read from working directory +template="$1" base_rev="$2" tip_rev="$3" +status=0 + +die() { + printf '%s\n' "$*" >&2 + exit 1 +} + +if ! [ "$base_rev" ]; then + die "usage: $0 TEMPLATE BASE-REVISION [TIP-REVISION]" +fi + +if command -v chroot-git >/dev/null 2>&1; then + GIT_CMD=$(command -v chroot-git) +elif command -v git >/dev/null 2>&1; then + GIT_CMD=$(command -v git) +else + die "neither chroot-git nor git could be found" +fi + +scan() { + rx="$1" msg="$2" + template_path=$template + if [ "$tip_rev" ]; then + template_path="${tip_rev}:${template}" + maybe_git="$GIT_CMD" + revspec="[^:]*:" + fi + $maybe_git grep -P -Hn -e "$rx" "$template_path" | + grep -v -P -e "[^:]*:[^:]*:\s*#" | + sed "s/^${revspec}\([^:]*:[^:]*:\)\(.*\)/\1 $msg/" +} + +show_template() { + rev="$1" + if [ "$rev" ]; then + $GIT_CMD cat-file blob "${rev}:${template}" 2>/dev/null + else + cat "${template}" 2>/dev/null + fi +} + +show_template_var() { + rev="$1" var="$2" + show_template "$rev" | grep -Po '^'${var}'=\K.*' +} + +revision_reset() { + [ "${revision}" = 1 ] && return + if [ "$prev_version" ]; then + case "$prev_reverts" in + *"$version"_*) return + esac + action=update + else + action=creation + fi + scan "^revision=" "revision should be set to 1 on ${action}" + status=1 +} + +reverts_on_downgrade() { + [ "$version" ] || return + case "$reverts" in + *"$prev_version"_*) ;; + *) + scan "^version=" "missing reverts= for downgrade $prev_version to $version" + status=1 + esac +} + +version_change() { + version="$(show_template_var "$tip_rev" version)" + revision="$(show_template_var "$tip_rev" revision)" + reverts="$(show_template_var "$tip_rev" reverts)" + prev_version="$(show_template_var "$base_rev" version)" + prev_reverts="$(show_template_var "$base_rev" reverts)" + xbps-uhelper cmpver "$version" "$prev_version" + case "$?" in + 1) revision_reset;; + -1|255) reverts_on_downgrade;; + esac +} + +version_change + +exit $status |