diff options
author | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-09 22:23:19 -0400 |
---|---|---|
committer | bill-auger <mr.j.spam.me@gmail.com> | 2022-09-11 21:55:00 -0400 |
commit | 83d35607c338f337e408c5b706919c8e44236cc7 (patch) | |
tree | eb1c78db13673af127b94af916cb4f947745ebea | |
parent | 77facc8e45bb72dcfb45c44b1c9d27ae837faf55 (diff) |
[maintenance-tools/parabola-dependents]: account for makedepends
-rwxr-xr-x | src/maintenance-tools/parabola-dependents | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/src/maintenance-tools/parabola-dependents b/src/maintenance-tools/parabola-dependents index 2165138..56b4302 100755 --- a/src/maintenance-tools/parabola-dependents +++ b/src/maintenance-tools/parabola-dependents @@ -1,5 +1,7 @@ #!/bin/bash +readonly ABS_DIR=/packages/abslibre + readonly BE_VERBOSE=$( [[ "$1" == '-v' ]] && echo 1 || echo 0 ) # readonly REPOS=( nonprism nonsystemd{-testing,} libre{-testing,} readonly REPOS=( nonprism{-testing,} nonsystemd{-testing,} libre{-testing,} @@ -20,8 +22,9 @@ readonly USAGE='USAGE: parabola-dependents [-v] <PACKAGE_NAME> List all parabola packages which are dependents of a specified package. + This includes direct dependents, transitive dependents, and makedepends dependents. - NOTE: This does not account for makedepends. + NOTE: The verbose report does not account for makedepends of packages not in abslibre. By default, only first-order dependents are listed, with counts of higher-order dependents. @@ -47,6 +50,7 @@ OPTS='' # Init() Ignored=() # CollectResults() Dependents=() # CollectResults() +Makedependents=() # CollectResults() declare -A HiorderDependents # CollectResults() @@ -110,18 +114,31 @@ IsArchRepo() # (repo) CollectResults() # (dep_pkgname) { local dep_pkgname=$1 - local dep_chains dep_chain dep_pkg via_pkg repos repo + local dep_chains dep_chain dep_pkg via_pkg repos repo pkgbase # TODO: --chain is a custom pactree feature export PATH="/code/pacman-contrib/src:${PATH}" - # query database - Log "searching ...." + # query database for dependents + Log "querying database ...." mapfile -t dep_chains < <(pactree ${OPTS} --sync --reverse --unique --chain \ ${dep_pkgname} | sort ) + # parse PKGBUILDs for makedepends + Log "searching abslibre ...." + 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_pkgname} <<<${makedepends[*]} > /dev/null ) + then repo=$( dirname $( dirname ${pkgbuild} )) + pkgbase=$( dirname ${pkgbuild} ) + Makedependents+=( ${repo}/${pkgbase} ) + fi + + done + # compile results - Log "compiling results for (${#dep_chains[@]}) dependencies ...." + Log "compiling results for ($(( ${#Makedependents[*]} + ${#dep_chains[@]} ))) dependents ...." for dep_chain in "${dep_chains[@]}" do dep_pkg=$(sed 's|.*<- ||' <<<${dep_chain}) via_pkg=$(sed 's|.*\] <- \([^ ]*\).*|\1|' <<<${dep_chain}) @@ -142,7 +159,7 @@ PrintReport() local dep_chain is_hiorder_dep via_pkg repo_pkg declare -i n_hiorder_deps - echo + (( ${#Dependents[*]} )) && echo "direct and transitive dependents" for dep_chain in "${Dependents[@]}" do if (( BE_VERBOSE )) then echo "${dep_chain/ /${SEP_CHAR}}" @@ -152,11 +169,16 @@ PrintReport() then via_pkg=$(sed 's|.*\] <- \([^ ]*\).*|\1|' <<<${dep_chain}) repo_pkg=${dep_chain/ *} n_hiorder_deps=$(( ${HiorderDependents[${via_pkg}]} - 1 )) - echo "${repo_pkg}${SEP_CHAR}(${n_hiorder_deps} higher-order deps)" + echo " ${repo_pkg}${SEP_CHAR}(${n_hiorder_deps} higher-order deps)" fi fi done | column --table --separator="${SEP_CHAR}" --table-wrap=2 + if (( ${#Makedependents[*]} )) + then Log "\nmakedepends dependents:" + printf " %s\n" ${Makedependents[*]} + fi + echo if (( BE_VERBOSE && ${#Ignored[@]} )) then printf "%s${SEP_CHAR}(ignored)\n" "${Ignored[@]}" | column --table --separator="${SEP_CHAR}" |