summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2022-09-19 04:20:43 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2022-09-21 06:58:47 -0400
commit3721a94bd8a018771f07a56681be5542eaa0f486 (patch)
tree554226b8f14ba223e8eac5eaa281f37880f1ec87
parent67a095a4c8d115b95418ef945bb8c9027c2977d5 (diff)
[maintenance-tools/parabola-dependents]: sq - wip - print arch abs makedepends
-rwxr-xr-xsrc/maintenance-tools/parabola-dependents78
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