diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2017-05-05 13:12:32 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-01-03 14:58:21 -0500 |
commit | f4c608ffdfb95678615042ea9e88f4d6d87db2fd (patch) | |
tree | beea5c7ec6f2b952ca1efa99594bed2a423862c4 | |
parent | d8c84529df77dc051f27e477f4132a1aebe749ca (diff) | |
download | devtools-f4c608ffdfb95678615042ea9e88f4d6d87db2fd.tar.xz |
common.sh: Add a find_cached_srcpackage counterpart to find_cached_package
-rw-r--r-- | lib/common.sh | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/common.sh b/lib/common.sh index 0b1dc59..ac42b00 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -224,3 +224,60 @@ find_cached_package() { return 1 esac } + +## +# usage: find_cached_srcpackage( $pkgname, $pkgver, $arch ) +# +# $pkgver can be supplied with or without a pkgrel appended. +# If not supplied, any pkgrel will be matched. +## +find_cached_srcpackage() { + local searchdirs=("$PWD" "$SRCPKGDEST") results=() + local targetname=$1 targetver=$2 targetarch=$3 + local dir pkg pkgbasename name ver rel arch r results + + for dir in "${searchdirs[@]}"; do + [[ -d $dir ]] || continue + + for pkg in "$dir"/*.src.tar?(.?z); do + [[ -f $pkg ]] || continue + + # avoid adding duplicates of the same inode + for r in "${results[@]}"; do + [[ $r -ef $pkg ]] && continue 2 + done + + # split apart package filename into parts + pkgbasename=${pkg##*/} + pkgbasename=${pkgbasename%.src.tar?(.?z)} + + arch=${pkgbasename##*-} + pkgbasename=${pkgbasename%-"$arch"} + + rel=${pkgbasename##*-} + pkgbasename=${pkgbasename%-"$rel"} + + ver=${pkgbasename##*-} + name=${pkgbasename%-"$ver"} + + if [[ $targetname = "$name" && $targetarch = "$arch" ]] && + pkgver_equal "$targetver" "$ver-$rel"; then + results+=("$pkg") + fi + done + done + + case ${#results[*]} in + 0) + return 1 + ;; + 1) + printf '%s\n' "${results[0]}" + return 0 + ;; + *) + _l error 'Multiple packages found:' + printf '\t%s\n' "${results[@]}" >&2 + return 1 + esac +} |