From 200cbe4e9d78e8489e0d9d40aa9855a5758c3801 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..aa4081833528 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 2>/dev/null || 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 f29c00b896f4d8cf591c238150231a33df8c24d5 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 58f6e749e308bbfb0e4927b1e794d41ef3d8cd18 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 fe0412e467e38be245640d0f4651eaaa3cff4395 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..57beb5abcdd2 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) + echo "version: ${version} in \$reverts" + status=1 + ;; + 1) + echo "remove ${version} 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 + echo "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