Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
comparison sbin/fports @ 814:2310764e5c4e
fports: Implement a global "--jail/-j" option: execute the fports commands in a jail.
The jail just needs to have an installed "pkg" command.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 09 Nov 2024 00:47:05 +0100 |
| parents | 70e08ff3db45 |
| children | e2f262ec2bf4 |
comparison
equal
deleted
inserted
replaced
| 813:70e08ff3db45 | 814:2310764e5c4e |
|---|---|
| 21 | 21 |
| 22 # shellcheck disable=SC2016 # no expansion | 22 # shellcheck disable=SC2016 # no expansion |
| 23 USAGE=' | 23 USAGE=' |
| 24 USAGE: fports -h|--help | 24 USAGE: fports -h|--help |
| 25 fports -V|--version | 25 fports -V|--version |
| 26 fports deptree [-l maxlevel|--maxlevel=maxlevel] [-r|--reverse] [-t|--list|--transitive] package... | 26 fports [GLOBAL-OPTIONS] deptree [-l maxlevel|--maxlevel=maxlevel] [-r|--reverse] [-t|--list|--transitive] package... |
| 27 fports detail [-A] [-b|--nofreebsd|--no-freebsd] [-f|--filter-unused] [-n|--noauto|--no-auto] [-m|--mapped] [package...] | 27 fports [GLOBAL-OPTIONS] detail [-A] [-b|--nofreebsd|--no-freebsd] [-f|--filter-unused] [-n|--noauto|--no-auto] [-m|--mapped] [package...] |
| 28 | 28 |
| 29 GLOBAL OPTIONS: | 29 GLOBAL OPTIONS: |
| 30 | 30 |
| 31 -V, --version Print the program name and version number to stdout and exit. | 31 -V, --version Print the program name and version number to stdout and exit. |
| 32 | 32 |
| 33 -h, --help Print this help message to stdout and exit. | 33 -h, --help Print this help message to stdout and exit. |
| 34 | |
| 35 -j JAIL, --jail=JAIL | |
| 36 Execute in given jail JAIL. | |
| 34 | 37 |
| 35 ' | 38 ' |
| 36 | 39 |
| 37 | 40 |
| 38 _p_datadir='@@DATADIR@@' | 41 _p_datadir='@@DATADIR@@' |
| 64 | 67 |
| 65 | 68 |
| 66 #: | 69 #: |
| 67 #: Implementation of the "deptree" command. | 70 #: Implementation of the "deptree" command. |
| 68 #: | 71 #: |
| 72 #: Args: | |
| 73 #: $1 (str, null): The jail to attach to | |
| 74 #: $2...: the command's options and arguments | |
| 75 #: | |
| 69 command_deptree() { | 76 command_deptree() { |
| 70 local opt_reversed opt_maxlevel opt_flat | 77 local opt_jail opt_reversed opt_maxlevel opt_flat |
| 71 # $@ | 78 # $@ |
| 72 | 79 |
| 73 local opt | 80 local opt |
| 74 | 81 |
| 82 opt_jail="${1}" | |
| 83 shift | |
| 75 opt_maxlevel=0 | 84 opt_maxlevel=0 |
| 76 opt_reversed=no | 85 opt_reversed=no |
| 77 opt_flat=no | 86 opt_flat=no |
| 78 while getopts "l:rt-:" opt; do | 87 while getopts "l:rt-:" opt; do |
| 79 postprocess_getopts_for_long "l:rt-:" opt "maxlevel=" "reverse" "list" "transitive" "" | 88 postprocess_getopts_for_long "l:rt-:" opt "maxlevel=" "reverse" "list" "transitive" "" |
| 92 esac | 101 esac |
| 93 done | 102 done |
| 94 shift $((OPTIND-1)) | 103 shift $((OPTIND-1)) |
| 95 OPTIND=1 | 104 OPTIND=1 |
| 96 | 105 |
| 106 if [ -n "${opt_jail}" ]; then | |
| 107 can_call_command "${opt_jail}" || fatal "${EX_UNAVAILABLE}" "jail \`${opt_jail}' does not exist or attaching denied" | |
| 108 fi | |
| 109 | |
| 97 if checkyesno opt_reversed; then | 110 if checkyesno opt_reversed; then |
| 98 _command_deptree_reversed "${opt_maxlevel}" "${opt_flat}" "$@" | 111 _command_deptree_reversed "${opt_jail}" "${opt_maxlevel}" "${opt_flat}" "$@" |
| 99 else | 112 else |
| 100 _command_deptree_normal "${opt_maxlevel}" "${opt_flat}" "$@" | 113 _command_deptree_normal "${opt_jail}" "${opt_maxlevel}" "${opt_flat}" "$@" |
| 101 fi | 114 fi |
| 102 } | 115 } |
| 103 | 116 |
| 104 | 117 |
| 105 #: | 118 #: |
| 106 #: Implementation of printing a "normal" dependency tree | 119 #: Implementation of printing a "normal" dependency tree |
| 107 #: | 120 #: |
| 108 _command_deptree_normal() { | 121 _command_deptree_normal() { |
| 109 local maxlevel flat # $@ | 122 local jail maxlevel flat # $@ |
| 110 | 123 |
| 111 local pkgdeps pkgqueue curdeps pkg n v flatdeps | 124 local pkgdeps pkgqueue curdeps pkg n v flatdeps |
| 112 | 125 |
| 113 maxlevel="${1}" | 126 jail="${1}" |
| 114 flat="${2}" | 127 maxlevel="${2}" |
| 115 shift 2 | 128 flat="${3}" |
| 129 shift 3 | |
| 116 | 130 |
| 117 # shellcheck disable=SC2034 # pkgqueue seems unused | 131 # shellcheck disable=SC2034 # pkgqueue seems unused |
| 118 pkgqueue='' | 132 pkgqueue='' |
| 119 farray_create pkgqueue # queue (array) of packages that are queued for | 133 farray_create pkgqueue # queue (array) of packages that are queued for |
| 120 # resolution | 134 # resolution |
| 121 | 135 |
| 122 for pkg in "$@"; do | 136 for pkg in "$@"; do |
| 123 if ! "${PKG}" query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then | 137 if ! call_pkg "${opt_jail}" query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then |
| 124 farray_release pkgqueue | 138 farray_release pkgqueue |
| 125 fatal "${EX_DATAERR}" "Package not found: ${pkg}" | 139 fatal "${EX_DATAERR}" "Package not found: ${pkg}" |
| 126 fi | 140 fi |
| 127 farray_append pkgqueue "${pkg}" | 141 farray_append pkgqueue "${pkg}" |
| 128 done | 142 done |
| 135 while IFS=$' \t\n' read -r n v; do | 149 while IFS=$' \t\n' read -r n v; do |
| 136 [ -z "${n}" ] || [ -z "${v}" ] && continue | 150 [ -z "${n}" ] || [ -z "${v}" ] && continue |
| 137 farray_append curdeps "${n}=${v}" | 151 farray_append curdeps "${n}=${v}" |
| 138 farray_append pkgqueue "${n}" | 152 farray_append pkgqueue "${n}" |
| 139 done <<EOF_01a8cebe-8659-4e32-87a4-bbce117e386b | 153 done <<EOF_01a8cebe-8659-4e32-87a4-bbce117e386b |
| 140 $(LC_ALL=C.UTF-8 "${PKG}" query '%dn %dv' "${pkg}") | 154 $(call_pkg "${opt_jail}" query '%dn %dv' "${pkg}") |
| 141 EOF_01a8cebe-8659-4e32-87a4-bbce117e386b | 155 EOF_01a8cebe-8659-4e32-87a4-bbce117e386b |
| 142 falist_set pkgdeps "${pkg}" "${curdeps}" | 156 falist_set pkgdeps "${pkg}" "${curdeps}" |
| 143 farray_release curdeps | 157 farray_release curdeps |
| 144 curdeps='' | 158 curdeps='' |
| 145 fi | 159 fi |
| 147 farray_release pkgqueue | 161 farray_release pkgqueue |
| 148 # falist_debug pkgdeps | 162 # falist_debug pkgdeps |
| 149 if checkyesno flat; then | 163 if checkyesno flat; then |
| 150 for pkg in "$@"; do | 164 for pkg in "$@"; do |
| 151 _flatten_pkgdeps flatdeps "${pkgdeps}" "${pkg}" | 165 _flatten_pkgdeps flatdeps "${pkgdeps}" "${pkg}" |
| 152 _print_flatdeps '-->' "${pkg}" "$(LC_ALL=C.UTF-8 "${PKG}" query '%v' "${pkg}")" "${flatdeps}" | 166 _print_flatdeps '-->' "${pkg}" "$(call_pkg "${opt_jail}" query '%v' "${pkg}")" "${flatdeps}" |
| 153 falist_release "${flatdeps}" | 167 falist_release "${flatdeps}" |
| 154 done | 168 done |
| 155 else | 169 else |
| 156 for pkg in "$@"; do | 170 for pkg in "$@"; do |
| 157 _print_dependency_tree 0 "${maxlevel}" '-->' "${pkg}" "$(LC_ALL=C.UTF-8 "${PKG}" query '%v' "${pkg}")" "${pkgdeps}" | 171 _print_dependency_tree 0 "${maxlevel}" '-->' "${pkg}" "$(call_pkg "${opt_jail}" query '%v' "${pkg}")" "${pkgdeps}" |
| 158 done | 172 done |
| 159 fi | 173 fi |
| 160 falist_release pkgdeps | 174 falist_release pkgdeps |
| 161 } | 175 } |
| 162 | 176 |
| 163 | 177 |
| 164 #: | 178 #: |
| 165 #: Implementation of printing a reversed dependency tree | 179 #: Implementation of printing a reversed dependency tree |
| 166 #: | 180 #: |
| 167 _command_deptree_reversed() { | 181 _command_deptree_reversed() { |
| 168 local maxlevel flat # $@ | 182 local jail maxlevel flat # $@ |
| 169 | 183 |
| 170 local pkgdeps pkgqueue curdeps pkg n v flatdeps | 184 local pkgdeps pkgqueue curdeps pkg n v flatdeps |
| 171 | 185 |
| 172 maxlevel="${1}" | 186 jail="${1}" |
| 187 maxlevel="${2}" | |
| 173 # shellcheck disable=SC2034 # appears unused | 188 # shellcheck disable=SC2034 # appears unused |
| 174 flat="${2}" | 189 flat="${3}" |
| 175 shift 2 | 190 shift 3 |
| 176 | 191 |
| 177 # shellcheck disable=SC2034 # pkgqueue seems unused | 192 # shellcheck disable=SC2034 # pkgqueue seems unused |
| 178 pkgqueue='' | 193 pkgqueue='' |
| 179 farray_create pkgqueue # queue (array) of packages that are queued for | 194 farray_create pkgqueue # queue (array) of packages that are queued for |
| 180 # resolution | 195 # resolution |
| 181 | 196 |
| 182 for pkg in "$@"; do | 197 for pkg in "$@"; do |
| 183 if ! "${PKG}" query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then | 198 if ! call_pkg "${opt_jail}" query '%n' "${pkg}" 1>/dev/null 2>/dev/null ; then |
| 184 farray_release pkgqueue | 199 farray_release pkgqueue |
| 185 fatal "${EX_DATAERR}" "Package not found: ${pkg}" | 200 fatal "${EX_DATAERR}" "Package not found: ${pkg}" |
| 186 fi | 201 fi |
| 187 farray_append pkgqueue "${pkg}" | 202 farray_append pkgqueue "${pkg}" |
| 188 done | 203 done |
| 195 while IFS=$' \t\n' read -r n v; do | 210 while IFS=$' \t\n' read -r n v; do |
| 196 [ -z "${n}" ] || [ -z "${v}" ] && continue | 211 [ -z "${n}" ] || [ -z "${v}" ] && continue |
| 197 farray_append curdeps "${n}=${v}" | 212 farray_append curdeps "${n}=${v}" |
| 198 farray_append pkgqueue "${n}" | 213 farray_append pkgqueue "${n}" |
| 199 done <<EOF_5079e996-c6d2-4e6d-825d-53183a64ab06 | 214 done <<EOF_5079e996-c6d2-4e6d-825d-53183a64ab06 |
| 200 $(LC_ALL=C.UTF-8 "${PKG}" query '%rn %rv' "${pkg}") | 215 $(call_pkg "${opt_jail}" query '%rn %rv' "${pkg}") |
| 201 EOF_5079e996-c6d2-4e6d-825d-53183a64ab06 | 216 EOF_5079e996-c6d2-4e6d-825d-53183a64ab06 |
| 202 falist_set pkgdeps "${pkg}" "${curdeps}" | 217 falist_set pkgdeps "${pkg}" "${curdeps}" |
| 203 farray_release curdeps | 218 farray_release curdeps |
| 204 curdeps='' | 219 curdeps='' |
| 205 fi | 220 fi |
| 207 farray_release pkgqueue | 222 farray_release pkgqueue |
| 208 # falist_debug pkgdeps | 223 # falist_debug pkgdeps |
| 209 if checkyesno flat; then | 224 if checkyesno flat; then |
| 210 for pkg in "$@"; do | 225 for pkg in "$@"; do |
| 211 _flatten_pkgdeps flatdeps "${pkgdeps}" "${pkg}" | 226 _flatten_pkgdeps flatdeps "${pkgdeps}" "${pkg}" |
| 212 _print_flatdeps '<--' "${pkg}" "$(LC_ALL=C.UTF-8 "${PKG}" query '%v' "${pkg}")" "${flatdeps}" | 227 _print_flatdeps '<--' "${pkg}" "$(call_pkg "${opt_jail}" query '%v' "${pkg}")" "${flatdeps}" |
| 213 falist_release "${flatdeps}" | 228 falist_release "${flatdeps}" |
| 214 done | 229 done |
| 215 else | 230 else |
| 216 for pkg in "$@"; do | 231 for pkg in "$@"; do |
| 217 _print_dependency_tree 0 "${maxlevel}" '<--' "${pkg}" "$(LC_ALL=C.UTF-8 "${PKG}" query '%v' "${pkg}")" "${pkgdeps}" | 232 _print_dependency_tree 0 "${maxlevel}" '<--' "${pkg}" "$(call_pkg "${opt_jail}" query '%v' "${pkg}")" "${pkgdeps}" |
| 218 done | 233 done |
| 219 fi | 234 fi |
| 220 falist_release pkgdeps | 235 falist_release pkgdeps |
| 221 } | 236 } |
| 222 | 237 |
| 341 | 356 |
| 342 | 357 |
| 343 #: | 358 #: |
| 344 #: Implementation of the "detail" command. | 359 #: Implementation of the "detail" command. |
| 345 #: | 360 #: |
| 361 #: Args: | |
| 362 #: $1 (str, null): The jail to attach to | |
| 363 #: $2...: The command's options and arguments | |
| 364 #: | |
| 346 command_detail() { | 365 command_detail() { |
| 347 local opt_nofreebsd opt_filterunused opt_noauto opt_mapped opt_nofreebsd | 366 local opt_jail opt_nofreebsd opt_filterunused opt_noauto \ |
| 367 opt_mapped opt_nofreebsd | |
| 348 # $@ | 368 # $@ |
| 349 | 369 |
| 350 local package \ | 370 local package \ |
| 351 packages do_sort idx prev_package \ | 371 packages do_sort idx prev_package \ |
| 352 repositories packagemapping instver instrepo \ | 372 repositories packagemapping instver instrepo \ |
| 353 repo title_printed indexfile _dummy opt acookie \ | 373 repo title_printed indexfile _dummy opt acookie \ |
| 354 pkglabel pkgdescr pkgversion mapped_package | 374 pkglabel pkgdescr pkgversion mapped_package |
| 355 | 375 |
| 376 opt_jail="${1}" | |
| 377 shift | |
| 356 do_sort=no | 378 do_sort=no |
| 357 opt_filterunused=no | 379 opt_filterunused=no |
| 358 opt_nofreebsd=no | 380 opt_nofreebsd=no |
| 359 opt_noauto=no | 381 opt_noauto=no |
| 360 opt_mapped=no | 382 opt_mapped=no |
| 392 esac | 414 esac |
| 393 done | 415 done |
| 394 shift $((OPTIND-1)) | 416 shift $((OPTIND-1)) |
| 395 OPTIND=1 | 417 OPTIND=1 |
| 396 | 418 |
| 419 if [ -n "${opt_jail}" ]; then | |
| 420 can_call_command "${opt_jail}" || fatal "${EX_UNAVAILABLE}" "jail \`${opt_jail}' does not exist or attaching denied" | |
| 421 fi | |
| 422 | |
| 397 packages='' | 423 packages='' |
| 398 farray_create packages | 424 farray_create packages |
| 399 repositories='' | 425 repositories='' |
| 400 get_active_repositories repositories | 426 get_active_repositories repositories "${opt_jail}" |
| 401 packagemapping='' | 427 packagemapping='' |
| 402 init_package_mapping packagemapping | 428 init_package_mapping packagemapping "${opt_jail}" |
| 403 falist_set packagemapping "uwsginl" "uwsgi" | 429 indexfile="$(get_local_index_file "${opt_jail}")" |
| 404 indexfile="$(get_local_index_file)" | |
| 405 | 430 |
| 406 if checkyesno opt_nofreebsd; then | 431 if checkyesno opt_nofreebsd; then |
| 407 while IFS='|' read -r package repo; do | 432 while IFS='|' read -r package repo; do |
| 408 [ "${repo}" != 'FreeBSD' ] && farray_append packages "${package}" | 433 [ "${repo}" != 'FreeBSD' ] && farray_append packages "${package}" |
| 409 done <<EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e | 434 done <<EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e |
| 410 $(LC_ALL=C.UTF-8 "${PKG}" query '%n|%R') | 435 $(call_pkg "${opt_jail}" query '%n|%R') |
| 411 EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e | 436 EOF_1fa6f326-49e6-4b01-a7ea-52372d00df1e |
| 412 fi | 437 fi |
| 413 if checkyesno opt_noauto; then | 438 if checkyesno opt_noauto; then |
| 414 for package in $(LC_ALL=C.UTF-8 "${PKG}" query -e '%a = 0' '%n'); do | 439 for package in $(call_pkg "${opt_jail}" query -e '%a = 0' '%n'); do |
| 415 farray_append packages "${package}" | 440 farray_append packages "${package}" |
| 416 done | 441 done |
| 417 fi | 442 fi |
| 418 if checkyesno opt_mapped; then | 443 if checkyesno opt_mapped; then |
| 419 acookie="$(falist_cookie_first packagemapping)" | 444 acookie="$(falist_cookie_first packagemapping)" |
| 429 | 454 |
| 430 idx=1 | 455 idx=1 |
| 431 prev_package='' # to skip duplicate packages | 456 prev_package='' # to skip duplicate packages |
| 432 while farray_tryget package packages "${idx}"; do | 457 while farray_tryget package packages "${idx}"; do |
| 433 if [ "${prev_package}" != "${package}" ]; then | 458 if [ "${prev_package}" != "${package}" ]; then |
| 434 _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" "${opt_filterunused}" | 459 _package_max_detail "${package}" "${packagemapping}" "${repositories}" "${indexfile}" "${opt_filterunused}" "${opt_jail}" |
| 435 prev_package="${package}" | 460 prev_package="${package}" |
| 436 fi | 461 fi |
| 437 idx=$((idx + 1)) | 462 idx=$((idx + 1)) |
| 438 done | 463 done |
| 439 | 464 |
| 440 falist_release "${packagemapping}" | 465 falist_release "${packagemapping}" |
| 441 farray_release "${repositories}" | 466 farray_release "${repositories}" |
| 442 farray_release "${packages}" | 467 farray_release "${packages}" |
| 443 } | 468 } |
| 444 | 469 |
| 453 #: $2 (alist): The | 478 #: $2 (alist): The |
| 454 #: $3 (array): The array with all the configured/active repositories | 479 #: $3 (array): The array with all the configured/active repositories |
| 455 #: $4 (str, null): The local index file if it exists | 480 #: $4 (str, null): The local index file if it exists |
| 456 #: $5 (bool): Flag whether to suppress details for repositories that do | 481 #: $5 (bool): Flag whether to suppress details for repositories that do |
| 457 #: not contain the package `$1` | 482 #: not contain the package `$1` |
| 483 #: $6 (str, null): The jail where the packages live | |
| 458 #: | 484 #: |
| 459 _package_max_detail() { | 485 _package_max_detail() { |
| 460 local package packagemapping repositories indexfile opt_filterunused | 486 local package packagemapping repositories indexfile \ |
| 487 opt_filterunused opt_jail | |
| 461 | 488 |
| 462 local instver instrepo repo title_printed _dummy \ | 489 local instver instrepo repo title_printed _dummy \ |
| 463 pkglabel pkgdescr pkgversion mapped_package | 490 pkglabel pkgdescr pkgversion mapped_package |
| 464 | 491 |
| 465 package="${1}" | 492 package="${1}" |
| 466 packagemapping="${2}" | 493 packagemapping="${2}" |
| 467 repositories="${3}" | 494 repositories="${3}" |
| 468 indexfile="${4}" | 495 indexfile="${4}" |
| 469 opt_filterunused="${5}" | 496 opt_filterunused="${5}" |
| 497 opt_jail="${6}" | |
| 470 | 498 |
| 471 # shellcheck disable=SC2034 # appears unused | 499 # shellcheck disable=SC2034 # appears unused |
| 472 title_printed=no | 500 title_printed=no |
| 473 IFS='|' read -r instver instrepo <<EOF_e9bd7819-b4c5-4a86-b984-f5226db58cb1 | 501 IFS='|' read -r instver instrepo <<EOF_e9bd7819-b4c5-4a86-b984-f5226db58cb1 |
| 474 $(LC_ALL=C.UTF-8 "${PKG}" query '%v|%R' "${package}") | 502 $(call_pkg "${opt_jail}" query '%v|%R' "${package}") |
| 475 EOF_e9bd7819-b4c5-4a86-b984-f5226db58cb1 | 503 EOF_e9bd7819-b4c5-4a86-b984-f5226db58cb1 |
| 476 print_title title_printed "${package}" "${instver}" "${instrepo}" | 504 print_title title_printed "${package}" "${instver}" "${instrepo}" |
| 477 if [ -n "${indexfile}" ]; then | 505 if [ -n "${indexfile}" ]; then |
| 478 read -r _dummy pkglabel pkgdescr <<EOF_b1f225bd-d234-4a23-8a2a-40c2e5b7ff3c | 506 read -r _dummy pkglabel pkgdescr <<EOF_b1f225bd-d234-4a23-8a2a-40c2e5b7ff3c |
| 479 $(LC_ALL=C.UTF-8 "${PKG}" version -U -I -n "${package}" -v "${indexfile}") | 507 $(call_pkg "${opt_jail}" version -U -I -n "${package}" -v "${indexfile}") |
| 480 EOF_b1f225bd-d234-4a23-8a2a-40c2e5b7ff3c | 508 EOF_b1f225bd-d234-4a23-8a2a-40c2e5b7ff3c |
| 481 pkgversion="$(parse_index_file_for_package_version "${indexfile}" "${package}")" | 509 pkgversion="$(parse_index_file_for_package_version "${indexfile}" "${package}" "${opt_jail}")" |
| 482 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" "${pkgdescr}" | 510 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" "${pkgdescr}" |
| 483 fi | 511 fi |
| 484 farray_for_each repositories _package_repository_detail "${package}" "${opt_filterunused}" 0 | 512 farray_for_each repositories _package_repository_detail "${package}" "${opt_filterunused}" "${opt_jail}" 0 |
| 485 mapped_package="$(get_package_mapping "${packagemapping}" "${package}")" | 513 mapped_package="$(get_package_mapping "${packagemapping}" "${package}")" |
| 486 if [ -n "${mapped_package}" ]; then | 514 if [ -n "${mapped_package}" ]; then |
| 487 printf '%18s %s\n' "--------------->" "${mapped_package}" | 515 printf '%18s %s\n' "--------------->" "${mapped_package}" |
| 488 if [ -n "${indexfile}" ]; then | 516 if [ -n "${indexfile}" ]; then |
| 489 pkgversion="$(parse_index_file_for_package_version "${indexfile}" "${mapped_package}")" | 517 pkgversion="$(parse_index_file_for_package_version "${indexfile}" "${mapped_package}" "${opt_jail}")" |
| 490 pkglabel="$(LC_ALL=C.UTF-8 "${PKG}" version --test-version "${instver}" "${pkgversion}")" | 518 pkglabel="$(call_pkg "${opt_jail}" version --test-version "${instver}" "${pkgversion}")" |
| 491 print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" '' 19 | 519 print_detail_item "INDEX" "${pkgversion}" "${pkglabel}" '' 19 |
| 492 fi | 520 fi |
| 493 farray_for_each repositories _mapped_package_repository_detail "${mapped_package}" "{instver}" "${opt_filterunused}" 19 | 521 farray_for_each repositories _mapped_package_repository_detail "${mapped_package}" "{instver}" "${opt_filterunused}" "${opt_jail}" 19 |
| 494 fi | 522 fi |
| 495 } | 523 } |
| 496 | 524 |
| 497 | 525 |
| 498 #: | 526 #: |
| 523 #: $1 (str): The repositories array | 551 #: $1 (str): The repositories array |
| 524 #: $2 (int): The current index | 552 #: $2 (int): The current index |
| 525 #: $3: The element value (i.e. repository name) | 553 #: $3: The element value (i.e. repository name) |
| 526 #: $4 (str): The (master) package name | 554 #: $4 (str): The (master) package name |
| 527 #: $5 (flag): The global flat whether to filter repository printing | 555 #: $5 (flag): The global flat whether to filter repository printing |
| 528 #: $6 (int, optional): The extra indent value to forward to called functions | 556 #: $6 (str, null): The jail in which the package data live |
| 557 #: $7 (int, optional): The extra indent value to forward to called functions | |
| 529 #: | 558 #: |
| 530 _package_repository_detail() { | 559 _package_repository_detail() { |
| 531 local repositories idx reponame package extraindent opt_filterunused | 560 local repositories idx reponame package extraindent opt_filterunused \ |
| 561 opt_jail | |
| 532 | 562 |
| 533 local _dummy \ | 563 local _dummy \ |
| 534 pkglabel pkgdescr pkgversion | 564 pkglabel pkgdescr pkgversion |
| 535 | 565 |
| 536 repositories="${1}" | 566 repositories="${1}" |
| 537 # shellcheck disable=SC2034 # appears unused (yes, accept it) | 567 # shellcheck disable=SC2034 # appears unused (yes, accept it) |
| 538 idx="${2}" | 568 idx="${2}" |
| 539 reponame="${3}" | 569 reponame="${3}" |
| 540 package="${4}" | 570 package="${4}" |
| 541 opt_filterunused="${5}" | 571 opt_filterunused="${5}" |
| 542 extraindent="${6:-0}" | 572 opt_jail="${6}" |
| 543 | 573 extraindent="${7:-0}" |
| 574 | |
| 544 read -r _dummy pkglabel pkgdescr <<EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 | 575 read -r _dummy pkglabel pkgdescr <<EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 |
| 545 $(LC_ALL=C.UTF-8 "${PKG}" version -U -R -r "${reponame}" -n "${package}" -v) | 576 $(call_pkg "${opt_jail}" version -U -R -r "${reponame}" -n "${package}" -v) |
| 546 EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 | 577 EOF_19cf2d80-4eb9-4cda-bd4d-96b04e769206 |
| 547 pkgversion="$(LC_ALL=C.UTF-8 "${PKG}" rquery -U -r "${reponame}" '%v' "${package}")" | 578 pkgversion="$(call_pkg "${opt_jail}" rquery -U -r "${reponame}" '%v' "${package}")" |
| 548 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" "${pkgdescr}" "${extraindent}" | 579 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" "${pkgdescr}" "${extraindent}" |
| 549 } | 580 } |
| 550 | 581 |
| 551 | 582 |
| 552 #: | 583 #: |
| 558 #: $2 (int): The current index | 589 #: $2 (int): The current index |
| 559 #: $3: The element value (i.e. repository name) | 590 #: $3: The element value (i.e. repository name) |
| 560 #: $4 (str): The mapped package name | 591 #: $4 (str): The mapped package name |
| 561 #: $5 (str): The parent package version | 592 #: $5 (str): The parent package version |
| 562 #: $6 (flag): The global flat whether to filter repository printing | 593 #: $6 (flag): The global flat whether to filter repository printing |
| 563 #: $7 (int, optional): The extra indent value to forward to called functions | 594 #: $7 (str, null): The jail where the package data live |
| 595 #: $8 (int, optional): The extra indent value to forward to called functions | |
| 564 #: | 596 #: |
| 565 _mapped_package_repository_detail() { | 597 _mapped_package_repository_detail() { |
| 566 local repositories idx reponame package parent_pkgversion \ | 598 local repositories idx reponame package parent_pkgversion \ |
| 567 opt_filterunused extraindent | 599 opt_filterunused extraindent opt_jail |
| 568 | 600 |
| 569 local _dummy \ | 601 local _dummy \ |
| 570 pkglabel pkgversion | 602 pkglabel pkgversion |
| 571 | 603 |
| 572 repositories="${1}" | 604 repositories="${1}" |
| 574 idx="${2}" | 606 idx="${2}" |
| 575 reponame="${3}" | 607 reponame="${3}" |
| 576 package="${4}" | 608 package="${4}" |
| 577 parent_pkgversion="${5}" | 609 parent_pkgversion="${5}" |
| 578 opt_filterunused="${6}" | 610 opt_filterunused="${6}" |
| 579 extraindent="${7:-0}" | 611 opt_jail="${7}" |
| 580 | 612 extraindent="${8:-0}" |
| 581 pkgversion="$(LC_ALL=C.UTF-8 "${PKG}" rquery -U -r "${reponame}" '%v' "${package}")" | 613 |
| 582 pkglabel="$(LC_ALL=C.UTF-8 "${PKG}" version --test-version "${parent_pkgversion}" "${pkgversion}")" | 614 pkgversion="$(call_pkg "${opt_jail}" rquery -U -r "${reponame}" '%v' "${package}")" |
| 615 pkglabel="$(call_pkg "${opt_jail}" version --test-version "${parent_pkgversion}" "${pkgversion}")" | |
| 583 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" '' "${extraindent}" | 616 _shall_print_package_detail_item "${pkglabel}" "${opt_filterunused}" && print_detail_item "${reponame}" "${pkgversion}" "${pkglabel}" '' "${extraindent}" |
| 584 } | 617 } |
| 585 | 618 |
| 586 | 619 |
| 587 #: | 620 #: |
| 657 | 690 |
| 658 | 691 |
| 659 # | 692 # |
| 660 # Global option handling | 693 # Global option handling |
| 661 # | 694 # |
| 662 while getopts "Vh-:" _opt ; do | 695 |
| 663 postprocess_getopts_for_long "Vh-:" _opt "version" "help" "" | 696 opt_jail='' |
| 697 while getopts "Vhj:-:" _opt ; do | |
| 698 postprocess_getopts_for_long "Vhj-:" _opt "version" "help" "jail=" "" | |
| 664 case "${_opt}" in | 699 case "${_opt}" in |
| 665 V|version) | 700 V|version) |
| 666 printf 'fports %s\n' '@@SIMPLEVERSIONSTR@@' | 701 printf 'fports %s\n' '@@SIMPLEVERSIONSTR@@' |
| 667 exit 0 | 702 exit 0 |
| 668 ;; | 703 ;; |
| 669 h|help) | 704 h|help) |
| 670 echo "${USAGE}" | 705 echo "${USAGE}" |
| 671 exit 0 | 706 exit 0 |
| 672 ;; | 707 ;; |
| 708 j|jail) | |
| 709 opt_jail="${OPTARG}" | |
| 710 ;; | |
| 673 \?) | 711 \?) |
| 674 exit 2; | 712 exit 2; |
| 675 ;; | 713 ;; |
| 676 *) | 714 *) |
| 677 fatal 2 "option handling failed" | 715 fatal 2 "option handling failed" |
| 691 | 729 |
| 692 case "${command}" in | 730 case "${command}" in |
| 693 '') | 731 '') |
| 694 fatal 2 "no command given";; | 732 fatal 2 "no command given";; |
| 695 deptree) | 733 deptree) |
| 696 command_deptree "$@";; | 734 command_deptree "${opt_jail}" "$@";; |
| 697 detail) | 735 detail) |
| 698 command_detail "$@";; | 736 command_detail "${opt_jail}" "$@";; |
| 699 *) | 737 *) |
| 700 fatal 2 "unknown command \`${command}'";; | 738 fatal 2 "unknown command \`${command}'";; |
| 701 esac | 739 esac |
