Compare commits

..

1 Commits

Author SHA1 Message Date
Levente Polyak
7a64d33b88 chore(license): avoid sourcing PKGBUILD in check subcommand
We don't actually need any data from the package, except the pkgbase
which is exclusively used during logging. Simply grep the pkgbase name
and use the path during early code path issues.

Component: pkgctl license check
2025-08-02 06:30:25 +02:00
8 changed files with 20 additions and 107 deletions

View File

@@ -150,7 +150,6 @@ _pkgctl_cmds=(
db
diff
issue
license
release
repo
search
@@ -418,7 +417,6 @@ _pkgctl_version_setup_args__url_opts() { :; }
_pkgctl_version_upgrade_args=(
--no-update-checksums
--noconfirm
-v --verbose
-h --help
)

View File

@@ -456,7 +456,6 @@ _pkgctl_version_setup_args=(
_pkgctl_version_upgrade_args=(
'--no-update-checksums[Disable computation and update of the checksums]'
'--noconfirm[Do not ask to confirm changes made to the PKGBUILD file]'
'(-v --verbose)'{-v,--verbose}'[Display results including up-to-date versions]'
'(-h --help)'{-h,--help}'[Display usage]'
'*:git_dir:_files -/'

View File

@@ -38,9 +38,6 @@ Options
*--no-update-checksums*::
Disable computation and update of the checksums
*--noconfirm*::
Do not ask to confirm changes made to the PKGBUILD file
*-v, --verbose*::
Display results including up-to-date versions

View File

@@ -155,7 +155,7 @@ if (( ${#needsversioning[*]} )); then
if [[ ! -f "${file}" ]]; then
continue
fi
if ! git ls-files --error-unmatch "$file" >/dev/null; then
if ! git ls-files --error-unmatch "$file"; then
die "%s is not under version control" "$file"
fi
done

View File

@@ -94,19 +94,19 @@ pkgctl_license_check() {
pushd "${path}" >/dev/null
if [[ ! -f PKGBUILD ]]; then
msg_error "${BOLD}${pkgbase}:${ALL_OFF} no PKGBUILD found"
msg_error "${BOLD}${path}:${ALL_OFF} no PKGBUILD found"
return 1
fi
# reset common PKGBUILD variables
unset pkgbase
# shellcheck source=contrib/makepkg/PKGBUILD.proto
if ! . ./PKGBUILD; then
msg_error "${BOLD}${pkgbase}:${ALL_OFF} failed to source PKGBUILD"
if [[ ! -f .SRCINFO ]]; then
msg_error "${BOLD}${path}:${ALL_OFF} no .SRCINFO found"
return 1
fi
if ! pkgbase=$(grep --max-count=1 --extended-regexp "pkgbase = (.+)" .SRCINFO | awk '{print $3}'); then
msg_error "${BOLD}${path}:${ALL_OFF} pkgbase not found in .SRCINFO"
return 1
fi
pkgbase=${pkgbase:-$pkgname}
if [[ ! -e LICENSE ]]; then
msg_error "${BOLD}${pkgbase}:${ALL_OFF} is missing the LICENSE file"

View File

@@ -191,9 +191,7 @@ path = [
".nvchecker.toml",
"*.install",
"*.sysusers",
"*sysusers.conf",
"*.tmpfiles",
"*tmpfiles.conf",
"*.logrotate",
"*.pam",
"*.service",

View File

@@ -21,21 +21,15 @@ pkgbuild_set_pkgver() {
local new_pkgver=$1
local pkgver=${pkgver}
if [[ -n $2 ]]; then
pkgbuild_file=$2
else
pkgbuild_file="PKGBUILD"
fi
if [[ $(type -t pkgver) == function ]]; then
# TODO: check if die or warn, if we provide _commit _gitcommit setter maybe?
warning 'setting pkgver variable has no effect if the PKGBUILD has a pkgver() function'
fi
if ! grep --extended-regexp --quiet --max-count=1 "^pkgver=${pkgver}$" "${pkgbuild_file}"; then
if ! grep --extended-regexp --quiet --max-count=1 "^pkgver=${pkgver}$" PKGBUILD; then
die "Non-standard pkgver declaration"
fi
sed --regexp-extended "s|^(pkgver=)${pkgver}$|\1${new_pkgver}|g" --in-place "${pkgbuild_file}"
sed --regexp-extended "s|^(pkgver=)${pkgver}$|\1${new_pkgver}|g" --in-place PKGBUILD
}
# set the pkgrel variable in a PKGBUILD
@@ -44,16 +38,10 @@ pkgbuild_set_pkgrel() {
local new_pkgrel=$1
local pkgrel=${pkgrel}
if [[ -n $2 ]]; then
pkgbuild_file=$2
else
pkgbuild_file="PKGBUILD"
fi
if ! grep --extended-regexp --quiet --max-count=1 "^pkgrel=${pkgrel}$" "${pkgbuild_file}"; then
if ! grep --extended-regexp --quiet --max-count=1 "^pkgrel=${pkgrel}$" PKGBUILD; then
die "Non-standard pkgrel declaration"
fi
sed --regexp-extended "s|^(pkgrel=)${pkgrel}$|\1${new_pkgrel}|g" --in-place "${pkgbuild_file}"
sed --regexp-extended "s|^(pkgrel=)${pkgrel}$|\1${new_pkgrel}|g" --in-place PKGBUILD
}
pkgbuild_update_checksums() {
@@ -65,14 +53,6 @@ pkgbuild_update_checksums() {
builddir=$(mktemp --tmpdir="${WORKDIR}" --directory update-checksums.XXXXXX)
newbuildfile="${builddir}/PKGBUILD"
if [[ -n $2 ]]; then
pkgbuild_file=$2
cp PKGBUILD "${builddir}/PKGBUILD-tmp" && mv -f "${pkgbuild_file}" PKGBUILD && mv "${builddir}/PKGBUILD-tmp" "${pkgbuild_file}"
else
pkgbuild_file="PKGBUILD"
fi
# generate new integrity checksums
if ! newsums=$(BUILDDIR=${builddir} makepkg_generate_integrity 2>"${status_file}"); then
printf 'Failed to generate new checksums'
@@ -101,13 +81,9 @@ pkgbuild_update_checksums() {
return 1
fi
if [[ "${pkgbuild_file}" != "PKGBUILD" ]]; then
cp PKGBUILD "${builddir}/PKGBUILD-tmp" && mv -f "${pkgbuild_file}" PKGBUILD && mv "${builddir}/PKGBUILD-tmp" "${pkgbuild_file}"
fi
# overwrite the original PKGBUILD while preserving permissions
if ! cat -- "${newbuildfile}" > "${pkgbuild_file}"; then
printf "Failed to write to the ${pkgbuild_file} file"
if ! cat -- "${newbuildfile}" > PKGBUILD; then
printf "Failed to write to the PKGBUILD file"
return 1
fi

View File

@@ -37,7 +37,6 @@ pkgctl_version_upgrade_usage() {
OPTIONS
--no-update-checksums Disable computation and update of the checksums
--noconfirm Do not ask to confirm changes made to the PKGBUILD file
-v, --verbose Display results including up-to-date versions
-h, --help Show this help text
@@ -53,8 +52,6 @@ pkgctl_version_upgrade() {
local exit_code=0
local current_item=0
local update_checksums=1
local noconfirm=0
local apply_changes=0
while (( $# )); do
case $1 in
@@ -66,10 +63,6 @@ pkgctl_version_upgrade() {
update_checksums=0
shift
;;
--noconfirm)
noconfirm=1
shift
;;
-v|--verbose)
verbose=1
shift
@@ -130,8 +123,7 @@ pkgctl_version_upgrade() {
# reset common PKGBUILD variables
unset pkgbase pkgname arch source pkgver pkgrel validpgpkeys
# shellcheck source=contrib/makepkg/PKGBUILD.proto
cp -f PKGBUILD PKGBUILD_version_upgrade.tmp
. ./PKGBUILD_version_upgrade.tmp
. ./PKGBUILD
pkgbase=${pkgbase:-$pkgname}
# update the current terminal spinner status
@@ -148,7 +140,6 @@ pkgctl_version_upgrade() {
if ! result=$(get_upstream_version); then
result="${BOLD}${pkgbase}${ALL_OFF}: ${result}"
failure+=("${result}")
rm -f PKGBUILD_version_upgrade.tmp
popd >/dev/null
continue
fi
@@ -157,7 +148,6 @@ pkgctl_version_upgrade() {
if ! result=$(vercmp "${upstream_version}" "${pkgver}"); then
result="${BOLD}${pkgbase}${ALL_OFF}: failed to compare version ${upstream_version} against ${pkgver}"
failure+=("${result}")
rm -f PKGBUILD_version_upgrade.tmp
popd >/dev/null
continue
fi
@@ -165,19 +155,16 @@ pkgctl_version_upgrade() {
if (( result == 0 )); then
result="${BOLD}${pkgbase}${ALL_OFF}: current version ${PURPLE}${pkgver}${ALL_OFF} is latest"
up_to_date+=("${result}")
rm -f PKGBUILD_version_upgrade.tmp
elif (( result < 0 )); then
result="${BOLD}${pkgbase}${ALL_OFF}: current version ${PURPLE}${pkgver}${ALL_OFF} is newer than ${DARK_GREEN}${upstream_version}${ALL_OFF}"
up_to_date+=("${result}")
rm -f PKGBUILD_version_upgrade.tmp
elif (( result > 0 )); then
result="${BOLD}${pkgbase}${ALL_OFF}: upgraded from version ${PURPLE}${pkgver}${ALL_OFF} to ${DARK_GREEN}${upstream_version}${ALL_OFF}"
out_of_date+=("${result}")
out_of_date_paths+=("${path}")
# make changes to the temporary PKGBUILD file
pkgbuild_set_pkgver "${upstream_version}" PKGBUILD_version_upgrade.tmp
pkgbuild_set_pkgrel 1 PKGBUILD_version_upgrade.tmp
# change the PKGBUILD
pkgbuild_set_pkgver "${upstream_version}"
pkgbuild_set_pkgrel 1
# download sources and update the checksums
if (( update_checksums )); then
@@ -191,10 +178,9 @@ pkgctl_version_upgrade() {
"${pkgbase}" \
"updating checksums"
if ! result=$(pkgbuild_update_checksums /dev/null PKGBUILD_version_upgrade.tmp); then
if ! result=$(pkgbuild_update_checksums /dev/null); then
result="${BOLD}${pkgbase}${ALL_OFF}: failed to update checksums for version ${DARK_GREEN}${upstream_version}${ALL_OFF}"
failure+=("${result}")
cp PKGBUILD "${status_dir}/PKGBUILD-tmp" && mv -f PKGBUILD_version_upgrade.tmp PKGBUILD && mv "${status_dir}/PKGBUILD-tmp" PKGBUILD_version_upgrade.tmp
fi
fi
fi
@@ -239,47 +225,6 @@ pkgctl_version_upgrade() {
"${#failure[@]}"
fi
# upgrade out of date packages
for ood_path in "${out_of_date_paths[@]}"; do
pushd "${ood_path}" >/dev/null
# print changes
echo
diff --unified --color PKGBUILD PKGBUILD_version_upgrade.tmp || true
# if --noconfirm is passed, directly apply changes without asking for confirmation
if (( noconfirm == 1 )); then
apply_changes=1
else
apply_changes=0
fi
# ask confirmation before making changes to the actual PKGBUILD
if (( apply_changes == 0 )); then
echo
if prompt "${GREEN}${BOLD}?${ALL_OFF} Apply changes to the PKGBUILD?"; then
apply_changes=1
fi
fi
# apply changes to the actual PKGBUILD
if (( apply_changes == 1 )); then
if ! (diff --unified PKGBUILD PKGBUILD_version_upgrade.tmp || true) | git apply; then
msg_error " Fail to apply changes" 2>&1
exit_code=1
else
echo
msg_success " Changes applied"
fi
fi
# delete temporary PKGBUILD file
rm -f PKGBUILD_version_upgrade.tmp
popd >/dev/null
done
# return status based on results
return "${exit_code}"
}