diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2017-05-05 13:12:32 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-05-20 21:57:40 -0400 |
commit | 049e0ab662f31458262d2179c0206aab4c381b6f (patch) | |
tree | 05d02a56f49cd631c32772bbf38a72af5b8ba208 | |
parent | eed44fd867a4afdcd406ae6dfc10876a90fb8706 (diff) | |
download | devtools-049e0ab662f31458262d2179c0206aab4c381b6f.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 +} |