Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 810:a59cc4bea000
fports: Add option "-f" to "fports detail": do not print the status with regard to repositories that do not have the package available
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 06 Nov 2024 01:17:23 +0100 |
| parents | 6cf3e1021862 |
| children | 32e457ff872f |
| files | docs/man/man8/fports.rst sbin/fports |
| diffstat | 2 files changed, 61 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/man/man8/fports.rst Tue Nov 05 18:42:40 2024 +0100 +++ b/docs/man/man8/fports.rst Wed Nov 06 01:17:23 2024 +0100 @@ -15,7 +15,7 @@ **fports deptree** [**-l** `maxlevel`\|\ **--maxlevel**\=\ `maxlevel`] [**-r**\|\ **--reverse**] [**-t**\|\ **--list**\|\ **--transitive**] `package` ... -**fports detail** [**-A**] [**-b**\|\ **--nofreebsd**\|\ **--no-freebsd**] [**-n**\|\ **--noauto**\|\ **--no-auto**] [**-m**\|\ **--mapped**] [`package` ...] +**fports detail** [**-A**] [**-b**\|\ **--nofreebsd**\|\ **--no-freebsd**] [**-f**\ |\ **--filter-unused**] [**-n**\|\ **--noauto**\|\ **--no-auto**] [**-m**\|\ **--mapped**] [`package` ...] Description @@ -71,7 +71,7 @@ that depend on a given `package`. -**fports detail** [**-A**] [**-b**\|\ **--nofreebsd**\|\ **--no-freebsd**] [**-n**\|\ **--noauto**\|\ **--no-auto**] [**-m**\|\ **--mapped**] [`package` ...] +**fports detail** [**-A**] [**-b**\|\ **--nofreebsd**\|\ **--no-freebsd**] [**-f**\ |\ **--filter-unused**] [**-n**\|\ **--noauto**\|\ **--no-auto**] [**-m**\|\ **--mapped**] [`package` ...] Print the status of all given or selected packages in the most detail possible. @@ -93,6 +93,13 @@ Automatically select all packages that are *not* installed from the standard FreeBSD repository. + .. option:: -f, filter-unused + + Filter the output: + + - Do not print the status with regard to repositories that do not + have the package available. + .. option:: -n, --noauto, --no-auto Automatically select all packages that are *not* installed automatically.
--- a/sbin/fports Tue Nov 05 18:42:40 2024 +0100 +++ b/sbin/fports Wed Nov 06 01:17:23 2024 +0100 @@ -24,7 +24,7 @@ USAGE: fports -h|--help fports -V|--version fports deptree [-l maxlevel|--maxlevel=maxlevel] [-r|--reverse] [-t|--list|--transitive] package... - fports detail [-A] [-b|--nofreebsd|--no-freebsd] [-n|--noauto|--no-auto] [-m|--mapped] [package...] + fports detail [-A] [-b|--nofreebsd|--no-freebsd] [-f|--filter-unused] [-n|--noauto|--no-auto] [-m|--mapped] [package...] GLOBAL OPTIONS: @@ -344,7 +344,7 @@ #: Implementation of the "detail" command. #: command_detail() { - local opt_noauto opt_mapped + local opt_nofreebsd opt_filterunused opt_noauto opt_mapped opt_nofreebsd # $@ local package \ @@ -354,11 +354,12 @@ pkglabel pkgdescr pkgversion mapped_package do_sort=no + opt_filterunused=no opt_nofreebsd=no opt_noauto=no opt_mapped=no - while getopts "Abnm-:" opt; do - postprocess_getopts_for_long "Abnm-:" opt "nofreebsd" "no-freebsd" "noauto" "no-auto" "mapped" "" + while getopts "Abfnm-:" opt; do + postprocess_getopts_for_long "Abfnm-:" opt "nofreebsd" "no-freebsd" "filter-unused" "noauto" "no-auto" "mapped" "" case "${opt}" in A) opt_nofreebsd=yes @@ -371,6 +372,9 @@ opt_nofreebsd=yes do_sort=yes ;; + f|filter-unused) + opt_filterunused=yes + ;; n|noauto|no-auto) # shellcheck disable=SC2034 # appears unused opt_noauto=yes @@ -396,6 +400,7 @@ get_active_repositories repositories packagemapping='' init_package_mapping packagemapping + falist_set packagemapping "uwsginl" "uwsgi" indexfile="$(get_local_index_file)" if checkyesno opt_nofreebsd; then @@ -426,7 +431,7 @@ prev_package='' # to skip duplicate packages while farray_tryget package packages "${idx}"; do if [ "${prev_package}" != "${package}" ]; then - _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" + _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" "${opt_filterunused}" prev_package="${package}" fi idx=$((idx + 1)) @@ -448,9 +453,11 @@ #: $2 (alist): The #: $3 (array): The array with all the configured/active repositories #: $4 (str, null): The local index file if it exists +#: $5 (bool): Flag whether to suppress details for repositories that do +#: not contain the package `$1` #: _package_max_detail() { - local package packagemapping repositories indexfile + local package packagemapping repositories indexfile opt_filterunused local instver instrepo repo title_printed _dummy \ pkglabel pkgdescr pkgversion mapped_package @@ -459,6 +466,7 @@ packagemapping="${2}" repositories="${3}" indexfile="${4}" + opt_filterunused="${5}" # shellcheck disable=SC2034 # appears unused title_printed=no @@ -471,9 +479,9 @@ $(LC_ALL=C.UTF-8 "${PKG}" version -U -I -n "${package}" -v "${indexfile}") EOF_b1f225bd-d234-4a23-8a2a-40c2e5b7ff3c pkgversion="$(parse_index_file_for_package_version "${indexfile}" "${package}")" - print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" "${pkgdescr}" + _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" "${pkgdescr}" fi - farray_for_each repositories _package_repository_detail "${package}" 0 + farray_for_each repositories _package_repository_detail "${package}" "${opt_filterunused}" 0 mapped_package="$(get_package_mapping "${packagemapping}" "${package}")" if [ -n "${mapped_package}" ]; then printf '%18s %s\n' "--------------->" "${mapped_package}" @@ -482,12 +490,33 @@ pkglabel="$(LC_ALL=C.UTF-8 "${PKG}" version --test-version "${instver}" "${pkgversion}")" print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" '' 19 fi - farray_for_each repositories _mapped_package_repository_detail "${mapped_package}" "{instver}" 19 + farray_for_each repositories _mapped_package_repository_detail "${mapped_package}" "{instver}" "${opt_filterunused}" 19 fi } #: +#: Args: +#: $1 (str): The repositorie's package label string +#: $2 (bool): The flag whether to filter package detail data +#: +#: Returns: +#: int: 0 (truthy) if the detail should be printed +#: 1 (falsy) if printing should be suppressed +#: +_shall_print_package_detail_item() { + # $1 $2 + + # If filtering is disabled then print + checkyesnovalue "$2" || return 0 + if [ -z "$1" ] || [ "$1" = '?' ]; then + return 1 + fi + return 0 +} + + +#: #: Array callback to print package details with regard to a repository. #: #: Args: @@ -495,10 +524,11 @@ #: $2 (int): The current index #: $3: The element value (i.e. repository name) #: $4 (str): The (master) package name -#: $5 (int): The extra indent value to forward to called functions +#: $5 (flag): The global flat whether to filter repository printing +#: $6 (int, optional): The extra indent value to forward to called functions #: _package_repository_detail() { - local repositories idx reponame package extraindent + local repositories idx reponame package extraindent opt_filterunused local _dummy \ pkglabel pkgdescr pkgversion @@ -508,13 +538,14 @@ idx="${2}" reponame="${3}" package="${4}" - extraindent="${5:-0}" - + opt_filterunused="${5}" + extraindent="${6:-0}" + read -r _dummy pkglabel pkgdescr <<EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 $(LC_ALL=C.UTF-8 "${PKG}" version -U -R -r "${reponame}" -n "${package}" -v) EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 pkgversion="$(LC_ALL=C.UTF-8 "${PKG}" rquery -U -r "${reponame}" '%v' "${package}")" - print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" "${pkgdescr}" "${extraindent}" + _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" "${pkgdescr}" "${extraindent}" } @@ -528,10 +559,12 @@ #: $3: The element value (i.e. repository name) #: $4 (str): The mapped package name #: $5 (str): The parent package version -#: $6 (int): The extra indent value to forward to called functions +#: $6 (flag): The global flat whether to filter repository printing +#: $7 (int, optional): The extra indent value to forward to called functions #: _mapped_package_repository_detail() { - local repositories idx reponame package parent_pkgversion extraindent + local repositories idx reponame package parent_pkgversion \ + opt_filterunused extraindent local _dummy \ pkglabel pkgversion @@ -542,11 +575,12 @@ reponame="${3}" package="${4}" parent_pkgversion="${5}" - extraindent="${6:-0}" + opt_filterunused="${6}" + extraindent="${7:-0}" pkgversion="$(LC_ALL=C.UTF-8 "${PKG}" rquery -U -r "${reponame}" '%v' "${package}")" pkglabel="$(LC_ALL=C.UTF-8 "${PKG}" version --test-version "${parent_pkgversion}" "${pkgversion}")" - print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" '' "${extraindent}" + _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" '' "${extraindent}" }
