summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2017-05-05 13:12:32 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2017-09-13 16:44:20 -0400
commitcbfe74c814437f93b0d9b983f740104a7e303049 (patch)
tree652bca3210e00beec6323b3ffba5f32a71923cac
parent14984ae4cc613f63c69f2437a2d915b5a7d818c5 (diff)
downloaddevtools-cbfe74c814437f93b0d9b983f740104a7e303049.tar.xz
common.sh: Add a find_cached_srcpackage counterpart to find_cached_package
-rw-r--r--lib/common.sh57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/common.sh b/lib/common.sh
index ed98449..118a06c 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -281,3 +281,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
+}