Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 792:954d3607e87d
ports.subr: Parse a (local) index file for a package version
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 30 Oct 2024 00:48:32 +0100 |
| parents | 1ffb4e15151d |
| children | 3b5a59b0840d |
| files | share/local-bsdtools/ports.subr tests/ports.t |
| diffstat | 2 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/share/local-bsdtools/ports.subr Tue Oct 29 22:44:49 2024 +0100 +++ b/share/local-bsdtools/ports.subr Wed Oct 30 00:48:32 2024 +0100 @@ -319,3 +319,34 @@ esac return 1 } + + +#: +#: Parse a given index file for a package and yield its version. +#: +#: Args: +#: $1 (str): An existing index file +#: $2 (str): The package to search for +#: +#: Output (stdout): +#: The package version if found, or a null string +#: +#: Returns: +#: int: 0 if a matching package is found, 1 otherwise +#: +parse_index_file_for_package_version() { + # $1 $2 + + local pkgspec _rest + + [ -r "${1}" ] || fatal "${EX_SOFTWARE}" "given index file \`${1}' is not readable (or does not exist)" + + # Using grep to pre-select with BREs is at least one magnitude slower + while IFS='|' read -r pkgspec _rest; do + if [ "${pkgspec%-*}" = "${2}" ]; then + printf '%s' "${pkgspec##*-}" + return 0 + fi + done <"${1}" + return 1 +}
--- a/tests/ports.t Tue Oct 29 22:44:49 2024 +0100 +++ b/tests/ports.t Wed Oct 30 00:48:32 2024 +0100 @@ -86,6 +86,11 @@ /home/fag/ports/INDEX-[0-9]+ \(no-eol\) (re) $ unset VERSION_SOURCE + $ _pkgversion="$(parse_index_file_for_package_version "$(get_local_index_file)" 'pkg')" + $ [ -n "${_pkgversion}" ] + $ printf '%s' "${_pkgversion}" + \d+\.\d+(\.\d+) \(no-eol\) (re) + Repositories ============
