From 6f327d73888ac8fe202071b7ff020e826fd90994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Fri, 16 Sep 2022 08:50:39 +0700 Subject: [PATCH 1/4] common: simplify logic to find git From chroot-git 2.33.1, we always have an executable named git for other build infrastructure and lints. Let's remove the shenanegan to find which git to be used, prepend the path to chroot-git's git into $PATH, and let's the shell call the correct git for us instead. --- .github/workflows/cycles.yml | 8 ++------ common/scripts/lint-commits | 12 ++++++------ common/scripts/lint-version-change | 12 +++++------- common/travis/changed_templates.sh | 12 ++++-------- common/travis/fetch_upstream.sh | 10 +++------- 5 files changed, 20 insertions(+), 34 deletions(-) diff --git a/.github/workflows/cycles.yml b/.github/workflows/cycles.yml index 3f85ac6fa74a..7d781076dbe9 100644 --- a/.github/workflows/cycles.yml +++ b/.github/workflows/cycles.yml @@ -33,13 +33,9 @@ jobs: common/travis/prepare.sh - name: Find cycles and open issues run: | - 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) - fi + PATH="/usr/libexec/chroot-git:$PATH" # required by git 2.35.2+ - $GIT_CMD config --global --add safe.directory "$PWD" + git config --global --add safe.directory "$PWD" common/scripts/xbps-cycles.py | tee cycles grep 'Cycle:' cycles | while read -r line; do if gh issue list -R "$GITHUB_REPOSITORY" -S "$line" | grep .; then diff --git a/common/scripts/lint-commits b/common/scripts/lint-commits index 7207ed81d5aa..f372deb820af 100755 --- a/common/scripts/lint-commits +++ b/common/scripts/lint-commits @@ -5,18 +5,18 @@ die() { exit 1 } -GIT_CMD=$(command -v chroot-git 2>/dev/null) || -GIT_CMD=$(command -v git 2>/dev/null) || +PATH="/usr/libexec/chroot-git:$PATH" +command -v git >/dev/null 2>&1 || die "neither chroot-git nor git could be found!" rev_parse() { if [ -n "$1" ]; then - "$GIT_CMD" rev-parse --verify "$1" + git rev-parse --verify "$1" else shift while test "$#" != 0 do - "$GIT_CMD" rev-parse --verify "$1" 2>/dev/null && return + git rev-parse --verify "$1" 2>/dev/null && return shift done return 1 @@ -27,9 +27,9 @@ base=$(rev_parse "$1" FETCH_HEAD ORIG_HEAD) || die "base commit not found" tip=$(rev_parse "$2" HEAD) || die "tip commit not found" status=0 -for cmt in $("$GIT_CMD" rev-list --abbrev-commit $base..$tip) +for cmt in $(git rev-list --abbrev-commit $base..$tip) do - "$GIT_CMD" cat-file commit "$cmt" | + git cat-file commit "$cmt" | awk -vC="$cmt" ' # skip header /^$/ && !msg { msg = 1; next } diff --git a/common/scripts/lint-version-change b/common/scripts/lint-version-change index 5e9687799384..96263ba55ae2 100755 --- a/common/scripts/lint-version-change +++ b/common/scripts/lint-version-change @@ -13,20 +13,18 @@ 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 +PATH="/usr/libexec/chroot-git:$PATH" +if ! command -v git >/dev/null 2>&1; then die "neither chroot-git nor git could be found" fi scan() { rx="$1" msg="$2" template_path=$template + maybe_git= if [ "$tip_rev" ]; then template_path="${tip_rev}:${template}" - maybe_git="$GIT_CMD" + maybe_git="git" revspec="[^:]*:" fi $maybe_git grep -P -Hn -e "$rx" "$template_path" | @@ -37,7 +35,7 @@ scan() { show_template() { rev="$1" if [ "$rev" ]; then - $GIT_CMD cat-file blob "${rev}:${template}" 2>/dev/null + git cat-file blob "${rev}:${template}" 2>/dev/null else cat "${template}" 2>/dev/null fi diff --git a/common/travis/changed_templates.sh b/common/travis/changed_templates.sh index 686436ce4327..3c8acf787637 100755 --- a/common/travis/changed_templates.sh +++ b/common/travis/changed_templates.sh @@ -2,19 +2,15 @@ # # changed_templates.sh -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) -fi +PATH="/usr/libexec/chroot-git:$PATH" -tip="$($GIT_CMD rev-list -1 --parents HEAD)" +tip="$(git rev-list -1 --parents HEAD)" case "$tip" in *" "*" "*) tip="${tip##* }" ;; *) tip="${tip%% *}" ;; esac -base="$($GIT_CMD merge-base FETCH_HEAD "$tip")" || { +base="$(git merge-base FETCH_HEAD "$tip")" || { echo "Your branches is based on too old copy." echo "Please rebase to newest copy." exit 1 @@ -23,7 +19,7 @@ base="$($GIT_CMD merge-base FETCH_HEAD "$tip")" || { echo "$base $tip" >/tmp/revisions /bin/echo -e '\x1b[32mChanged packages:\x1b[0m' -$GIT_CMD diff-tree -r --no-renames --name-only --diff-filter=AM \ +git diff-tree -r --no-renames --name-only --diff-filter=AM \ "$base" "$tip" \ -- 'srcpkgs/*/template' | cut -d/ -f 2 | diff --git a/common/travis/fetch_upstream.sh b/common/travis/fetch_upstream.sh index 049cfd69e54d..40c136f3857c 100755 --- a/common/travis/fetch_upstream.sh +++ b/common/travis/fetch_upstream.sh @@ -2,14 +2,10 @@ # # changed_templates.sh -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) -fi +PATH="/usr/libexec/chroot-git:$PATH" # required by git 2.35.2+ -$GIT_CMD config --global --add safe.directory "$PWD" +git config --global --add safe.directory "$PWD" /bin/echo -e '\x1b[32mFetching upstream...\x1b[0m' -$GIT_CMD fetch --depth 200 https://github.com/void-linux/void-packages.git master +git fetch --depth 200 https://github.com/void-linux/void-packages.git master From 5512deafb70f4fca39f13ef59bbacb858f4b4d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Fri, 16 Sep 2022 09:18:27 +0700 Subject: [PATCH 2/4] changed_templates: explain what has been done --- common/travis/changed_templates.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/travis/changed_templates.sh b/common/travis/changed_templates.sh index 3c8acf787637..534cd97a12b1 100755 --- a/common/travis/changed_templates.sh +++ b/common/travis/changed_templates.sh @@ -6,7 +6,9 @@ PATH="/usr/libexec/chroot-git:$PATH" tip="$(git rev-list -1 --parents HEAD)" case "$tip" in + # This is a merge commit, pick last parent *" "*" "*) tip="${tip##* }" ;; + # This is a non-merge commit, pick itself *) tip="${tip%% *}" ;; esac From 1d9b53c01838a99bf4b16312acfa31abb12e6736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Fri, 16 Sep 2022 09:55:49 +0700 Subject: [PATCH 3/4] lint-version-change: correctly print multiline variables --- common/scripts/lint-version-change | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/common/scripts/lint-version-change b/common/scripts/lint-version-change index 96263ba55ae2..1b276062a4dd 100755 --- a/common/scripts/lint-version-change +++ b/common/scripts/lint-version-change @@ -43,7 +43,10 @@ show_template() { show_template_var() { rev="$1" var="$2" - show_template "$rev" | grep -Po '^'${var}'=\K.*' + ( + show_template "$rev" + printf '%s\n' "printf '%s\\n' \"\$${var}\"" + ) | bash } revision_reset() { From a12aaf0a7ecc8826894205d1aad45ecae85d61d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Fri, 16 Sep 2022 10:27:35 +0700 Subject: [PATCH 4/4] lint-version: check reverts --- common/scripts/lint-version-change | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/common/scripts/lint-version-change b/common/scripts/lint-version-change index 1b276062a4dd..22a70dc660b9 100755 --- a/common/scripts/lint-version-change +++ b/common/scripts/lint-version-change @@ -73,6 +73,32 @@ reverts_on_downgrade() { esac } +check_revert() { + for vr in $reverts; do + xbps-uhelper cmpver "${vr%_*}" "${version}" + case "$?" in + 0) + scan '^version=' 'in $reverts' + status=1 + ;; + 1) + scan '^version=' 'remove from $reverts' + status=1 + ;; + esac + done + for vr in $prev_reverts; do + if ! xbps-uhelper cmpver "$version" "${vr%_*}"; then + continue + fi + if [ $revision -gt "${vr##*_}" ]; then + continue + fi + scan '^revision=' "undo a revert with same revision as before" + status=1 + done +} + version_change() { version="$(show_template_var "$tip_rev" version)" revision="$(show_template_var "$tip_rev" revision)" @@ -84,6 +110,7 @@ version_change() { 1) revision_reset;; -1|255) reverts_on_downgrade;; esac + check_revert } version_change