# HG changeset patch # User Franz Glasner # Date 1730196202 -3600 # Node ID b78815b47d5e224c96f688696b4145ba0f8a63cf # Parent 43cebff4ea0d114e7f733a304478a34dd1f73ade fports: deptree has now an option to print a flattened tree. The flattened tree is the transitive closure of all dependencies. diff -r 43cebff4ea0d -r b78815b47d5e docs/man/man8/fports.rst --- a/docs/man/man8/fports.rst Mon Oct 28 14:41:15 2024 +0100 +++ b/docs/man/man8/fports.rst Tue Oct 29 11:03:22 2024 +0100 @@ -13,7 +13,7 @@ **fports -V** -**fports deptree** [**-l** `maxlevel`] [**-r**] `package` ... +**fports deptree** [**-l** `maxlevel`] [**-r**] [**t**] `package` ... Description @@ -52,6 +52,11 @@ .. program:: fports deptree + .. option:: -t + + Instead of printing the dependencies as tree print them as a sorted + list. This list is the transitive closure of all dependencies. + .. option:: -l Limit the output to sub-levels up to `maxlevel`. To print only diff -r 43cebff4ea0d -r b78815b47d5e sbin/fports --- a/sbin/fports Mon Oct 28 14:41:15 2024 +0100 +++ b/sbin/fports Tue Oct 29 11:03:22 2024 +0100 @@ -64,17 +64,21 @@ #: Implementation of the "deptree" command. #: command_deptree() { - local opt opt_reversed opt_maxlevel + local opt opt_reversed opt_maxlevel opt_flat # $@ opt_maxlevel=0 opt_reversed=no - while getopts "l:r" opt; do + opt_flat=no + while getopts "l:rt" opt; do case "${opt}" in l) opt_maxlevel=$(($OPTARG + 0));; r) + # shellcheck disable=SC2034 opt_reversed=yes;; + t) + opt_flat=yes;; \?) exit 2;; *) @@ -85,9 +89,9 @@ OPTIND=1 if checkyesno opt_reversed; then - _command_deptree_reversed "${opt_maxlevel}" "$@" + _command_deptree_reversed "${opt_maxlevel}" "${opt_flat}" "$@" else - _command_deptree_normal "${opt_maxlevel}" "$@" + _command_deptree_normal "${opt_maxlevel}" "${opt_flat}" "$@" fi } @@ -96,18 +100,19 @@ #: Implementation of printing a "normal" dependency tree #: _command_deptree_normal() { - local maxlevel # $@ - - local pkgdeps pkgqueue curdeps pkg n v + local maxlevel flat # $@ + + local pkgdeps pkgqueue curdeps pkg n v flatdeps maxlevel="${1}" - shift - + flat="${2}" + shift 2 + # shellcheck disable=SC2034 # pkgqueue seems unused pkgqueue='' farray_create pkgqueue # queue (array) of packages that are queued for # resolution - + for pkg in "$@"; do if ! pkg query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then farray_release pkgqueue @@ -126,7 +131,7 @@ farray_append curdeps "${n}=${v}" farray_append pkgqueue "${n}" done <' "${pkg}" "$(LC_ALL=C.UTF-8 pkg query '%v' "${pkg}")" "${pkgdeps}" - done + if checkyesno flat; then + for pkg in "$@"; do + _flatten_pkgdeps flatdeps "${pkgdeps}" "${pkg}" + _print_flatdeps '-->' "${pkg}" "$(LC_ALL=C.UTF-8 pkg query '%v' "${pkg}")" "${flatdeps}" + falist_release "${flatdeps}" + done + else + for pkg in "$@"; do + _print_dependency_tree 0 "${maxlevel}" '-->' "${pkg}" "$(LC_ALL=C.UTF-8 pkg query '%v' "${pkg}")" "${pkgdeps}" + done + fi falist_release pkgdeps } @@ -146,18 +159,20 @@ #: Implementation of printing a reversed dependency tree #: _command_deptree_reversed() { - local maxlevel # $@ - - local pkgdeps pkgqueue curdeps pkg n v + local maxlevel flat # $@ + + local pkgdeps pkgqueue curdeps pkg n v flatdeps maxlevel="${1}" - shift - + # shellcheck disable=SC2034 # appears unused + flat="${2}" + shift 2 + # shellcheck disable=SC2034 # pkgqueue seems unused pkgqueue='' farray_create pkgqueue # queue (array) of packages that are queued for # resolution - + for pkg in "$@"; do if ! pkg query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then farray_release pkgqueue @@ -176,7 +191,7 @@ farray_append curdeps "${n}=${v}" farray_append pkgqueue "${n}" done < version + while farray_pop pkg queue 1; do + if ! falist_contains alldeps "${pkg}"; then + curdeps='' + falist_get curdeps pkgdeps "${pkg}" + i=1 + while farray_tryget depname curdeps "${i}"; do + depver="${depname#*=}" + depname="${depname%%=*}" + if ! falist_contains alldeps "${depname}"; then + falist_set alldeps "${depname}" "${depver}" + fi + farray_append queue "${depname}" + i=$((i + 1)) + done + farray_release curdeps + fi + done + + farray_release queue + + setvar "${1}" "${alldeps}" +} + + # # Global option handling #