diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-19 04:20:43 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-21 06:58:47 -0400 |
commit | 3721a94bd8a018771f07a56681be5542eaa0f486 (patch) | |
tree | 554226b8f14ba223e8eac5eaa281f37880f1ec87 | |
parent | 67a095a4c8d115b95418ef945bb8c9027c2977d5 (diff) |
[maintenance-tools/parabola-dependents]: sq - wip - print arch abs makedepends
-rwxr-xr-x | src/maintenance-tools/parabola-dependents | 78 |
1 files changed, 57 insertions, 21 deletions
diff --git a/src/maintenance-tools/parabola-dependents b/src/maintenance-tools/parabola-dependents index 7c608de..0fad1eb 100755 --- a/src/maintenance-tools/parabola-dependents +++ b/src/maintenance-tools/parabola-dependents @@ -108,41 +108,68 @@ Exit() # (log_fmt [fmt_args]*) LogError "$@" ; exit 1 ; } -ParsePkgbuilds() # ("abs_dir") -{ +ParsePkgbuilds() # ("abs_dir" "dep_chains") +( local abs_dir="$1" + local dep_chains=( "${@:2}" ) local pkgbuild repo pkgbase +# echo "ParsePkgbuilds() (${#dep_chains[@]}) dep_chains=${dep_chains[@]}" >&2 # ; return ; +# for ea in "${dep_chains[@]}" ; do echo "=$ea" >&2 ; done ; return ; + set +o errexit +o errtrace ; trap '' EXIT INT TERM ERR ; # reset debug traps cd "${abs_dir}" for pkgbuild in $(find . -name PKGBUILD) - do if git ls-tree master ${pkgbuild} | grep -E '/PKGBUILD$' > /dev/null && - ( source ${pkgbuild} ; grep ${DEP} <<<${makedepends[*]} > /dev/null ) - then repo=$( sed -E "${PKGBUILD_SED_RX}" <<<${pkgbuild} | cut -d ' ' -f 1) + do git ls-tree master ${pkgbuild} | grep -E '/PKGBUILD$' > /dev/null || continue + +# echo "ParsePkgbuilds() pkgbuild=${pkgbuild}" >&2 + + source ${pkgbuild} + + if grep ^${DEP}$ <<<${makedepends[*]} > /dev/null || false + then # parse direct makedepends + repo=$( sed -E "${PKGBUILD_SED_RX}" <<<${pkgbuild} | cut -d ' ' -f 1) pkgbase=$(sed -E "${PKGBUILD_SED_RX}" <<<${pkgbuild} | cut -d ' ' -f 2) echo ${repo}/${pkgbase} + else # collect transitive makedepends + for makedepend in ${makedepends[*]} + do +: # TODO: + if grep " ${makedepend} " <<<${dep_chains[@]} > /dev/null + then +echo "ParsePkgbuilds() pkgbuild=${pkgbuild} makedepend=${makedepend} in-chain" >&2 +# else echo "ParsePkgbuilds() pkgbuild=${pkgbuild} makedepend=${makedepend} not in-chain" >&2 + fi + done fi done -} +) IsArchRepo() # (repo) { local repo=$1 ; [[ "${repo}" =~ ^(community|core|extra|multilib|testing)$ ]] } +IsFirstOrderDep() # ("dep_chain") +{ + local dep_chain="$@" + + (( $(tr '<' '\n' <<<${dep_chain} | wc -l) == 2 )) +} + PrintDependent() # ("dep_chain") { local dep_chain="$@" - local is_hiorder_dep=$( (( $(tr '<' '\n' <<<${dep_chain} | wc -l) > 2 )) && echo 1 || echo 0 ) local via_pkg repo_pkg + declare -i n_hiorder_deps if (( BE_VERBOSE )) then # display all transitive dependents echo " ${dep_chain/ /${SEP_CHAR}}" - elif ! (( is_hiorder_dep )) + elif IsFirstOrderDep "${dep_chain}" then # display only first-order dependents via_pkg=$(sed 's|.*\] <- \([^ ]*\).*|\1|' <<<${dep_chain}) repo_pkg=${dep_chain/ *} - n_hiorder_deps=$(( ${HiorderDependents[${via_pkg}]} - 1 )) + n_hiorder_deps=$( tr ' ' '\n' <<<${HiorderDependents[${via_pkg}]} | wc -l ) echo " ${repo_pkg}${SEP_CHAR}(${n_hiorder_deps} higher-order deps)" fi } @@ -200,6 +227,7 @@ export PATH="/code/pacman-contrib/src:${PATH}" Log "dummy package '${pkgbase}' created" else Exit "makepkg failed" fi + fi } @@ -211,18 +239,13 @@ CollectResults() Log "querying database ...." mapfile -t dep_chains < <(pactree ${PACTREE_OPTS} ${DEP} | sort) - # parse PKGBUILDs for makedepends - Log "searching abslibre ...." - - ParabolaMakedependents+=( $(ParsePkgbuilds "${ABSLIBRE_DIR}" ) ) - Log "searching abs ...." - ArchMakedependents+=( $(ParsePkgbuilds "${ABS_PACKAGES_DIR}" ) ) - ArchMakedependents+=( $(ParsePkgbuilds "${ABS_COMMUNITY_DIR}") ) - # compile results Log "compiling results ...." for dep_chain in "${dep_chains[@]}" - do dep_pkg=$(sed 's|.*<- ||' <<<${dep_chain}) + do # example dep_chains: + # first-order dep: '[$DEP] <- $dep_pkg' + # high-order dep: '[$DEP] <- $via_pkg <- transitive_dep <- $dep_pkg' + dep_pkg=$(sed 's|.*<- ||' <<<${dep_chain}) via_pkg=$(sed 's|.*\] <- \([^ ]*\).*|\1|' <<<${dep_chain}) repos="$(pacman ${PACMAN_OPTS} -Si ${dep_pkg} | grep Repository | \ cut -d ':' -f 2 | tr -d ' ' )" @@ -231,21 +254,34 @@ CollectResults() do if IsArchRepo ${repo} then ArchDependents+=( "${repo}/${dep_pkg} ${dep_chain}" ) else ParabolaDependents+=( "${repo}/${dep_pkg} ${dep_chain}" ) - HiorderDependents[${via_pkg}]=$(( ${HiorderDependents[${via_pkg}]} + 1 )) fi + HiorderDependents[${via_pkg}]="${HiorderDependents[${via_pkg}]} ${dep_pkg}" done done + + # parse PKGBUILDs for makedepends + Log "searching abslibre ...." + ParabolaMakedependents+=( $(ParsePkgbuilds "${ABSLIBRE_DIR}" "${dep_chains[@]}") ) + Log "searching abs ...." + ArchMakedependents+=( $(ParsePkgbuilds "${ABS_PACKAGES_DIR}" "${dep_chains[@]}") ) + ArchMakedependents+=( $(ParsePkgbuilds "${ABS_COMMUNITY_DIR}" "${dep_chains[@]}") ) } PrintReport() { local dep_chain - declare -i n_hiorder_deps + local has_firstorder_deps=0 # report parabola abslibre packages with some degree of run-time dependency # on the input package or sodep if (( ${#ParabolaDependents[*]} )) - then Log "\ndirect$( ! (( BE_VERBOSE )) || echo " and transitive") parabola dependents:" + then for dep_chain in "${ParabolaDependents[@]}" + do IsFirstOrderDep "${dep_chain}" && has_firstorder_deps=1 || : + done + if (( BE_VERBOSE || has_firstorder_deps )) + then Log "\ndirect$( ! (( BE_VERBOSE )) || echo " and transitive") parabola dependents:" + fi +# echo "PrintReport() ${ParabolaDependents[*]}" for dep_chain in "${ParabolaDependents[@]}" do PrintDependent "${dep_chain}" done | column --table --separator="${SEP_CHAR}" --table-wrap=2 |