Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 806:b59054f11029
fports: Implement "fports detail -b" to print details about all packages that are not installed from the blessed FreeBSD repo.
While there change option handling to allow a combination of selection flags:
merge all selected packages and sort if needed.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 05 Nov 2024 10:57:06 +0100 |
| parents | e18cc5fe828c |
| children | ed94334bc6f1 |
| files | docs/man/man8/fports.rst sbin/fports |
| diffstat | 2 files changed, 55 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/man/man8/fports.rst Mon Nov 04 22:45:00 2024 +0100 +++ b/docs/man/man8/fports.rst Tue Nov 05 10:57:06 2024 +0100 @@ -15,6 +15,8 @@ **fports deptree** [**-l** `maxlevel`\|\ **--maxlevel**\=\ `maxlevel`] [**-r**\|\ **--reverse**] [**-t**\|\ **--list**\|\ **--transitive**] `package` ... +**fports detail** **-b**\|\ **--nofreebsd**\|\ **--no-freebsd** + **fports detail** **-n**\|\ **--noauto**\|\ **--no-auto** **fports detail** **-m**\|\ **--mapped** @@ -75,6 +77,8 @@ that depend on a given `package`. +**fports detail** **-b**\|\ **--nofreebsd**\|\ **--no-freebsd** + **fports detail** **-n**\|\ **--noauto**\|\ **--no-auto** **fports detail** **-m**\|\ **--mapped** @@ -92,6 +96,11 @@ .. program:: fports deptree + .. options:: -b, --nofreebsd, --no-freebsd + + Automatically select all packages that are *not* installed from the + standard FreeBSD repository. + .. option:: -n, --noauto, --no-auto Automatically select all packages that are *not* installed automatically.
--- a/sbin/fports Mon Nov 04 22:45:00 2024 +0100 +++ b/sbin/fports Tue Nov 05 10:57:06 2024 +0100 @@ -24,6 +24,7 @@ USAGE: fports -h|--help fports -V|--version fports deptree [-l maxlevel|--maxlevel=maxlevel] [-r|--reverse] [-t|--list|--transitive] package... + fports detail -b|--nofreebsd|--no-freebsd fports detail -n|--noauto|--no-auto fports detail -m|--mapped fports detail package... @@ -350,21 +351,33 @@ # $@ local package \ + packages do_sort idx prev_package \ repositories packagemapping instver instrepo \ repo title_printed indexfile _dummy opt acookie \ pkglabel pkgdescr pkgversion mapped_package + do_sort=no + opt_nofreebsd=no opt_noauto=no opt_mapped=no - while getopts "nm-:" opt; do - postprocess_getopts_for_long "nm-:" opt "noauto" "no-auto" "mapped" "" + while getopts "bnm-:" opt; do + postprocess_getopts_for_long "nm-:" opt "nofreebsd" "no-freebsd" "noauto" "no-auto" "mapped" "" case "${opt}" in + b|nofreebsd|no-freebsd) + # shellcheck disable=SC2034 # appears unused + opt_nofreebsd=yes + do_sort=yes + ;; n|noauto|no-auto) # shellcheck disable=SC2034 # appears unused - opt_noauto=yes;; + opt_noauto=yes + do_sort=yes + ;; m|mapped) # shellcheck disable=SC2034 # appears unused - opt_mapped=yes;; + opt_mapped=yes + do_sort=yes + ;; \?) exit 2;; *) @@ -374,37 +387,51 @@ shift $((OPTIND-1)) OPTIND=1 - if checkyesno opt_noauto || checkyesno opt_mapped; then - [ $# -gt 0 ] && fatal "${EX_USAGE}" "packages are not allowed for options -n or -m" - if checkyesno opt_noauto && checkyesno opt_mapped; then - fatal "${EX_USAGE}" "cannot use -n and -m together" - fi - fi - + packages='' + farray_create packages repositories='' get_active_repositories repositories packagemapping='' init_package_mapping packagemapping indexfile="$(get_local_index_file)" + if checkyesno opt_nofreebsd; then + while IFS='|' read -r package repo; do + [ "${repo}" != 'FreeBSD' ] && farray_append packages "${package}" + done <<EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e +$(LC_ALL=C.UTF-8 "${PKG}" query '%n|%R') +EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e + fi if checkyesno opt_noauto; then for package in $(LC_ALL=C.UTF-8 "${PKG}" query -e '%a = 0' '%n'); do - _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" + farray_append packages "${package}" done - elif checkyesno opt_mapped; then + fi + if checkyesno opt_mapped; then acookie="$(falist_cookie_first packagemapping)" while falist_tryget_key_at package "${acookie}"; do - _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" + farray_append packages "${package}" acookie="$(falist_cookie_next "${acookie}")" done - else - for package in "$@"; do + fi + for package in "$@"; do + farray_append packages "${package}" + done + checkyesnovalue "${do_sort}" && farray_sort packages + + idx=1 + 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}" - done - fi - + prev_package="${package}" + fi + idx=$((idx + 1)) + done + falist_release "${packagemapping}" farray_release "${repositories}" + farray_release "${packages}" }
