summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2022-09-09 22:23:19 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2022-09-11 21:55:00 -0400
commit83d35607c338f337e408c5b706919c8e44236cc7 (patch)
treeeb1c78db13673af127b94af916cb4f947745ebea
parent77facc8e45bb72dcfb45c44b1c9d27ae837faf55 (diff)
[maintenance-tools/parabola-dependents]: account for makedepends
-rwxr-xr-xsrc/maintenance-tools/parabola-dependents36
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}"