pkg-auto: Disable shellcheck reference warnings

Two warnings, SC2034 and SC2178, pop up very often with the references
- shellcheck handles them poorly and produces a ton of bogus warnings
about them. Silence the warnings and drop most of the "shellcheck
disable" clauses.
This commit is contained in:
Krzesimir Nowak 2025-04-11 14:58:54 +02:00
parent 296efcdb22
commit 0d06b737ac
8 changed files with 9 additions and 72 deletions

View File

@ -1,4 +1,12 @@
# ignoring SC2034 (VARIABLE_NAME appears unused), too many false
# positives
#
# ignoring SC2178 (Variable was used as an array but is now assigned a
# string.) - buggy for local variables, happens very often for
# references
SHELLCHECK_OPTS := -e SC2034 -e SC2178
all: shellcheck
shellcheck:
docker run --rm -v "$$PWD:/mnt" koalaman/shellcheck:latest --norc --shell=bash --source-path=SCRIPTDIR --source-path=SCRIPTDIR/impl --source-path=SCRIPTDIR/impl/for-shellcheck --external-sources --check-sourced *.sh impl/*.sh
docker run --rm -v "$$PWD:/mnt" koalaman/shellcheck:latest --norc --shell=bash --source-path=SCRIPTDIR --source-path=SCRIPTDIR/impl --source-path=SCRIPTDIR/impl/for-shellcheck --external-sources --check-sourced $(SHELLCHECK_OPTS) *.sh impl/*.sh

View File

@ -159,19 +159,16 @@ ver_dash="${VERSION_ID}${BUILD_ID:+-}${BUILD_ID}"
exts=(zst bz2 gz)
# shellcheck disable=SC2034 # used indirectly as cmds_name and cmds
zst_cmds=(
zstd
)
# shellcheck disable=SC2034 # used indirectly as cmds_name and cmds
bz2_cmds=(
lbunzip2
pbunzip2
bunzip2
)
# shellcheck disable=SC2034 # used indirectly as cmds_name and cmds
gz_cmds=(
unpigz
gunzip

View File

@ -26,19 +26,12 @@ set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/impl/util.sh"
source "${PKG_AUTO_IMPL_DIR}/cleanups.sh"
# shellcheck disable=SC2034 # used by name below
gc_aux_directory=''
# shellcheck disable=SC2034 # used by name below
gc_new_base=''
# shellcheck disable=SC2034 # used by name below
gc_old_base=''
# shellcheck disable=SC2034 # used by name below
gc_reports_directory=''
# shellcheck disable=SC2034 # used by name below
gc_scripts_directory=''
# shellcheck disable=SC2034 # used by name below
gc_cleanup_opts=''
# shellcheck disable=SC2034 # used by name below
gc_image_override=''
gc_debug_packages=()
@ -81,9 +74,7 @@ while [[ ${#} -gt 0 ]]; do
if [[ -z ${2:-} ]]; then
fail 'missing value for -w'
fi
# shellcheck disable=SC2178 # shellcheck does not grok refs
declare -n ref="${var_name}"
# shellcheck disable=SC2178 # shellcheck does not grok refs
ref=${2}
unset -n ref
unset var_name
@ -123,7 +114,6 @@ config=${1}; shift
name=${pairs["${name_idx}"]}
opt_idx=$((opt_idx + 2))
name_idx=$((name_idx + 2))
# shellcheck disable=SC2178 # shellcheck does not grok refs
declare -n ref="${name}"
if [[ -n ${ref:-} ]]; then
printf '%s: %s\n' "${opt}" "${ref}"

View File

@ -99,7 +99,6 @@ function set_eo() {
local dir=${1}; shift
# rest are architectures
# shellcheck disable=SC2034 # used externally
declare -g EGENCACHE_W="${dir}/egencache-warnings"
declare -g SDK_EO="${dir}/sdk-emerge-output"
declare -g SDK_EO_F="${SDK_EO}-filtered"
@ -348,7 +347,6 @@ function get_provided_file() {
path_var_name=${1}; shift
local -n path_ref="${path_var_name}"
# shellcheck disable=SC2034 # reference to external variable
path_ref="${root}/etc/portage/profile/package.provided/ignore_cross_packages"
}

View File

@ -133,7 +133,6 @@ function mvm_declare() {
storage_map_ref=()
local -n mvm_ref=${mvm_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
mvm_ref=(
['name']="${mvm_var_name}"
['constructor']="${constructor}"
@ -193,7 +192,6 @@ function __mvm_mvc_name() {
mvc_name_var_name=${1}; shift
local -n mvc_name_ref=${mvc_name_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
mvc_name_ref="mvm_${name}_mvc_${counter}"
}
@ -246,10 +244,8 @@ function mvm_c_get_extra() {
local extras_map_var_name
extras_map_var_name=${mvm['extras']}
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n extras_map_ref=${extras_map_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
extra_ref=${extras_map_ref["${extra}"]:-}
}
@ -273,10 +269,8 @@ function mvm_c_get() {
local storage_map_var_name
storage_map_var_name=${mvm['storage']}
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n storage_map_ref=${storage_map_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
value_ref=${storage_map_ref["${key}"]:-}
}
@ -290,7 +284,6 @@ function __mvm_c_make_new_mvc() {
name=${mvm['name']}
counter=${mvm['counter']}
storage_map_var_name=${mvm['storage']}
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n storage_map_ref=${storage_map_var_name}
__mvm_mvc_name "${name}" "${counter}" "${mvc_name_var_name}"
@ -348,7 +341,6 @@ function mvm_c_remove() {
local storage_map_var_name
storage_map_var_name=${mvm['storage']}
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n storage_map_ref=${storage_map_var_name}
if [[ -z ${storage_map_ref["${key}"]:-} ]]; then
@ -387,7 +379,6 @@ function mvm_c_iterate() {
local storage_map_var_name helper
storage_map_var_name=${mvm['storage']}
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n storage_map_ref=${storage_map_var_name}
helper=${mvm['iteration_helper']}
@ -467,7 +458,6 @@ function mvm_mvc_array_destructor() {
function mvm_mvc_array_adder() {
local array_var_name
array_var_name=${1}; shift
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n array_ref=${array_var_name}
array_ref+=( "${@}" )
@ -481,7 +471,6 @@ function mvm_mvc_array_iteration_helper() {
callback=${1}; shift
# rest are extra args passed to cb
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n array_ref=${array_var_name}
"${callback}" "${@}" "${key}" "${array_var_name}" "${array_ref[@]}"
}
@ -512,11 +501,9 @@ function mvm_mvc_map_destructor() {
function mvm_mvc_map_adder() {
local map_var_name
map_var_name=${1}; shift
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n map_ref=${map_var_name}
while [[ ${#} -gt 1 ]]; do
# shellcheck disable=SC2034 # it's a reference to external variable
map_ref["${1}"]=${2}
shift 2
done
@ -532,7 +519,6 @@ function mvm_mvc_set_constructor() {
declare -g -A "${set_var_name}"
# shellcheck disable=SC2178 # shellcheck does not grok refs
local -n set_ref=${set_var_name}
set_ref=()
}
@ -548,7 +534,6 @@ function mvm_mvc_set_adder() {
local set_var_name
set_var_name=${1}; shift
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n set_ref=${set_var_name}
while [[ ${#} -gt 0 ]]; do
set_ref["${1}"]=x
@ -565,7 +550,6 @@ function mvm_mvc_set_iteration_helper() {
callback=${1}; shift
# rest are extra args passed to cb
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n set_ref=${set_var_name}
"${callback}" "${@}" "${key}" "${set_var_name}" "${!set_ref[@]}"
}

View File

@ -606,15 +606,12 @@ EOF
function setup_git_env() {
local bot_name bot_email role what
# shellcheck disable=SC2034 # used indirectly
bot_name='Flatcar Buildbot'
# shellcheck disable=SC2034 # used indirectly
bot_email='buildbot@flatcar-linux.org'
for role in AUTHOR COMMITTER; do
for what in name email; do
local -n var_ref="GIT_${role}_${what^^}"
local -n value_ref="bot_${what}"
# shellcheck disable=SC2034 # it's a reference to external variable
var_ref=${value_ref}
unset -n value_ref
unset -n var_ref
@ -1181,7 +1178,6 @@ function pkginfo_name() {
report=${1}; shift
local -n pi_name_ref=${1}; shift
# shellcheck disable=SC2034 # it's a reference to external variable
pi_name_ref="pkginfo_${which}_${arch}_${report//-/_}_pimap_mvm"
}
@ -1197,7 +1193,6 @@ function pkginfo_destructor() {
# Adder callback used by mvm_declare for pkginfo mvms.
function pkginfo_adder() {
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n map_ref=${1}; shift
local mark
@ -1306,14 +1301,12 @@ function pkginfo_c_process_file() {
esac
local pkg version_slot throw_away v s
# shellcheck disable=SC2034 # throw_away is unused, it's here for read to store the rest of the line if there is something else
while read -r pkg version_slot throw_away; do
pkg_debug_enable "${pkg}"
pkg_debug "${which} ${arch} ${report}: ${version_slot}"
v=${version_slot%%:*}
s=${version_slot##*:}
mvm_c_add "${pkg}" "${s}" "${v}"
# shellcheck disable=SC2034 # it's a reference to external variable
pkg_set_ref["${pkg}"]='x'
mvm_add "${pkg_slots_set_mvm_var_name}" "${pkg}" "${s}"
pkg_debug_disable
@ -1412,9 +1405,7 @@ function ver_min_max() {
max=${v}
fi
done
# shellcheck disable=SC2034 # it's a reference to external variable
min_ref=${min}
# shellcheck disable=SC2034 # it's a reference to external variable
max_ref=${max}
}
@ -1556,7 +1547,6 @@ function consistency_check_for_package() {
function consistency_checks() {
local which pkg_slots_set_mvm_var_name pkg_slot_verminmax_mvm_var_name
which=${1}; shift
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n all_pkgs_ref=${1}; shift
pkg_slots_set_mvm_var_name=${1}; shift
pkg_slot_verminmax_mvm_var_name=${1}; shift
@ -1634,7 +1624,6 @@ function consistency_checks() {
done
local cc_slots_set_var_name s cc_min cc_max verminmax
# shellcheck disable=SC2034 # used by name below
local -A empty_map=()
local -a verminmax_map_var_names verminmaxes
local cc_slot_verminmax_map_var_name
@ -1739,7 +1728,6 @@ function read_package_sources() {
# 2 - name of the package tags map mvm variable
function handle_package_changes() {
local pkg_to_tags_mvm_var_name
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n renamed_old_to_new_map_ref=${1}; shift
pkg_to_tags_mvm_var_name=${1}; shift
@ -1880,7 +1868,6 @@ function handle_package_changes() {
local hpc_changed hpc_slot_changed hpc_update_dir_non_slot hpc_category_dir
local which slots_set_var_name_var_name slot_verminmax_map_var_name_var_name filtered_slots_set_var_name verminmax
local -A hpc_old_filtered_slots_set hpc_new_filtered_slots_set
# shellcheck disable=SC2034 # used by name below, in a special case
empty_map_or_set=()
while [[ ${pkg_idx} -lt ${#old_pkgs[@]} ]]; do
old_name=${old_pkgs["${pkg_idx}"]}
@ -2129,7 +2116,6 @@ function handle_package_changes() {
# 1 - name of the set variable
# 2 - name of the variable where the element will be stored
function get_first_from_set() {
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n set_ref=${1}; shift
local -n return_ref=${1}; shift
@ -2138,7 +2124,6 @@ function get_first_from_set() {
return_ref=${item}
return 0
done
# shellcheck disable=SC2034 # it's a reference to external variable
return_ref=''
}
@ -2181,7 +2166,6 @@ function handle_pkg_update() {
fi
generate_ebuild_diff "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_pkg}" "${new_pkg}" "${old_s}" "${new_s}" "${old}" "${new}"
# shellcheck disable=SC2034 # these variables are used by name
local hpu_update_dir hpu_update_dir_non_slot
update_dir_non_slot "${new_pkg}" hpu_update_dir_non_slot
update_dir "${new_pkg}" "${old_s}" "${new_s}" hpu_update_dir
@ -2297,7 +2281,6 @@ function handle_pkg_as_is() {
# Nothing relevant has changed, return early.
return 0
fi
# shellcheck disable=SC2034 # ref to an external variable
changed_ref=x
lines+=( '0:TODO: review occurences' )
if [[ ${old_pkg} != "${new_pkg}" ]]; then
@ -2410,7 +2393,6 @@ function tags_for_pkg() {
tags_ref=()
else
local -n tags_in_mvm_ref=${tfp_tags_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
tags_ref=( "${tags_in_mvm_ref[@]}" )
pkg_debug "tags available: ${tags_in_mvm_ref[*]}"
fi
@ -2714,7 +2696,6 @@ function update_dir_non_slot() {
# shellcheck source=for-shellcheck/globals
source "${WORKDIR}/globals"
# shellcheck disable=SC2034 # it's a reference to external variable
dir_ref="${REPORTS_DIR}/updates/${pkg}"
}
@ -2744,7 +2725,6 @@ function update_dir() {
local ud_non_slot_dir
update_dir_non_slot "${pkg}" ud_non_slot_dir
# shellcheck disable=SC2034 # it's a reference to external variable
dir_ref="${ud_non_slot_dir}/${slot_dir}"
}
@ -2786,7 +2766,6 @@ function handle_gentoo_sync() {
mvm_declare hgs_pkg_to_tags_mvm
process_listings hgs_pkg_to_tags_mvm
# shellcheck disable=SC2034 # passed to other function through a name
local -A hgs_renames_old_to_new_map=()
process_profile_updates_directory hgs_renames_old_to_new_map

View File

@ -69,7 +69,6 @@ function get_repo_from_profile_path() {
path=${1}; shift
local -n repo_dir_ref=${1}; shift
# shellcheck disable=SC2034 # it's a reference to external variable
repo_dir_ref="${path%/profiles/*}"
}
@ -78,7 +77,6 @@ function repo_path_to_name() {
path=${1}; shift
local -n name_ref=${1}; shift
# shellcheck disable=SC2034 # it's a reference to external variable
name_ref=${repo_data_r["${path}"]:-'<unknown>'}
}
@ -138,7 +136,6 @@ function process_profile() {
done <"${parent_file}"
fi
# shellcheck disable=SC2034 # it's a reference to external variable
children_ref=( "${children[@]}" )
}
@ -152,7 +149,6 @@ function get_profile_name() {
repo_path=${repo_data["${repo_name}"]}
profile_name=${profile_path#"${repo_path}/profiles/"}
# shellcheck disable=SC2034 # it's a reference to external variable
profile_name_ref="${profile_name}"
}

View File

@ -37,7 +37,6 @@ function dirname_out() {
dir_ref='.'
return 0
fi
# shellcheck disable=SC2034 # it's a reference to external variable
dir_ref=${dn}
}
@ -68,7 +67,6 @@ function basename_out() {
cleaned_up=${cleaned_up//+(\/)/\/}
# keep last component
dn=${cleaned_up##*/}
# shellcheck disable=SC2034 # it's a reference to external variable
base_ref=${dn}
}
@ -86,7 +84,6 @@ THIS=$(realpath "${THIS}")
THIS_DIR=$(realpath "${THIS_DIR}")
dirname_out "${BASH_SOURCE[0]}" PKG_AUTO_IMPL_DIR
PKG_AUTO_IMPL_DIR=$(realpath "${PKG_AUTO_IMPL_DIR}")
# shellcheck disable=SC2034 # may be used by scripts sourcing this file
PKG_AUTO_DIR=$(realpath "${PKG_AUTO_IMPL_DIR}/..")
# Prints an info line.
@ -165,7 +162,6 @@ function join_by() {
printf -v "${output_var_name}" '%s' "${first}" "${@/#/${delimiter}}";
else
local -n output_ref=${output_var_name}
# shellcheck disable=SC2034 # it's a reference to external variable
output_ref=''
fi
}
@ -207,7 +203,6 @@ function strip_out() {
t=${l}
t=${t/#+([[:space:]])}
t=${t/%+([[:space:]])}
# shellcheck disable=SC2034 # it's a reference to external variable
out_ref=${t}
}
@ -217,10 +212,8 @@ function strip_out() {
#
# 1 - name of an array variable, where the architectures will be stored
function get_valid_arches() {
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n arches_ref=${1}; shift
# shellcheck disable=SC2034 # it's a reference to external variable
arches_ref=( 'amd64' 'arm64' )
}
@ -235,7 +228,6 @@ function get_valid_arches() {
# 2 - separator string
# @ - strings
function all_pairs() {
# shellcheck disable=SC2178 # shellcheck doesn't grok references to arrays
local -n pairs_ref=${1}; shift
local sep=${1}; shift
@ -269,11 +261,8 @@ function all_pairs() {
function sets_split() {
local -n first_set_ref=${1}; shift
local -n second_set_ref=${1}; shift
# shellcheck disable=SC2178 # shellcheck does not grok references
local -n only_in_first_set_ref=${1}; shift
# shellcheck disable=SC2178 # shellcheck does not grok references
local -n only_in_second_set_ref=${1}; shift
# shellcheck disable=SC2178 # shellcheck does not grok references
local -n common_set_ref=${1}; shift
only_in_first_set_ref=()
@ -285,10 +274,8 @@ function sets_split() {
for item in "${!first_set_ref[@]}"; do
mark=${second_set_ref["${item}"]:-}
if [[ -z ${mark} ]]; then
# shellcheck disable=SC2034 # it's a reference to external variable
only_in_first_set_ref["${item}"]=x
else
# shellcheck disable=SC2034 # it's a reference to external variable
common_set_ref["${item}"]=x
fi
done
@ -296,7 +283,6 @@ function sets_split() {
for item in "${!second_set_ref[@]}"; do
mark=${first_set_ref["${item}"]:-}
if [[ -z ${mark} ]]; then
# shellcheck disable=SC2034 # it's a reference to external variable
only_in_second_set_ref["${item}"]=x
fi
done
@ -319,7 +305,6 @@ function gen_varname() {
fi
local -n name_ref=${1}; shift
# shellcheck disable=SC2034 # shellcheck does not grok references
name_ref="${prefix}_${__UTIL_SH_COUNTER}"
__UTIL_SH_COUNTER=$((__UTIL_SH_COUNTER + 1))
}