[Dev] [dbscripts] [PATCH 29/31] Move package and db checks from test cases to library

Luke Shumaker lukeshu at lukeshu.com
Fri Apr 6 18:44:02 GMT 2018


From: Pierre Schmitz <pierre at archlinux.de>

(cherry picked from commit 7628525156110022fa70ad91e4bc13ee8a3cceb0)
---
 test/cases/db-move.bats        |  37 ++++-------
 test/cases/db-remove.bats      |  10 +--
 test/cases/db-repo-add.bats    |  12 +---
 test/cases/db-repo-remove.bats |  10 +--
 test/cases/db-update.bats      |  54 +++++++----------
 test/cases/ftpdir-cleanup.bats |  46 +++++++-------
 test/lib/common.bash           | 135 +++++++++++++++++++++++------------------
 7 files changed, 143 insertions(+), 161 deletions(-)

diff --git a/test/cases/db-move.bats b/test/cases/db-move.bats
index cdc89e3..8d5087f 100755
--- a/test/cases/db-move.bats
+++ b/test/cases/db-move.bats
@@ -13,12 +13,9 @@ load ../lib/common
 
 	db-move testing extra pkg-simple-a
 
-	for arch in "${ARCH_BUILD[@]}"; do
-		checkPackage extra "pkg-simple-a-1-1-${arch}.pkg.tar.xz" "${arch}"
-		checkRemovedPackage testing pkg-simple-a "${arch}"
-
-		checkPackage testing "pkg-simple-b-1-1-${arch}.pkg.tar.xz" "${arch}"
-	done
+	checkRemovedPackage testing pkg-simple-a
+	checkPackage extra pkg-simple-a
+	checkPackage testing pkg-simple-b
 }
 
 @test "move multiple packages" {
@@ -35,10 +32,8 @@ load ../lib/common
 	db-move testing extra pkg-simple-a pkg-simple-b
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkPackage extra "${pkgbase}-1-1-${arch}.pkg.tar.xz" "${arch}"
-			checkRemovedPackage testing "${pkgbase}" "${arch}"
-		done
+		checkRemovedPackage testing "${pkgbase}"
+		checkPackage extra "${pkgbase}"
 	done
 }
 
@@ -55,10 +50,8 @@ load ../lib/common
 
 	db-move testing extra pkg-simple-epoch
 
-	for arch in "${ARCH_BUILD[@]}"; do
-		checkPackage extra "pkg-simple-epoch-1:1-1-${arch}.pkg.tar.xz" "${arch}"
-		checkRemovedPackage testing pkg-simple-epoch "${arch}"
-	done
+	checkRemovedPackage testing pkg-simple-epoch
+	checkPackage extra pkg-simple-epoch
 }
 
 @test "move any packages" {
@@ -72,9 +65,9 @@ load ../lib/common
 	db-update
 	db-move testing extra pkg-any-a
 
-	checkPackage extra pkg-any-a-1-1-any.pkg.tar.xz any
-	checkRemovedPackage testing pkg-any-a any
-	checkPackage testing pkg-any-b-1-1-any.pkg.tar.xz any
+	checkPackage extra pkg-any-a
+	checkRemovedPackage testing pkg-any-a
+	checkPackage testing pkg-any-b
 }
 
 @test "move split packages" {
@@ -90,12 +83,6 @@ load ../lib/common
 	db-update
 	db-move testing extra pkg-split-a
 
-	for arch in "${ARCH_BUILD[@]}"; do
-		for pkg in $(getPackageNamesFromPackageBase pkg-split-a); do
-			checkPackage extra "${pkg##*/}" "${arch}"
-		done
-		for pkg in $(getPackageNamesFromPackageBase pkg-split-b); do
-			checkPackage testing "${pkg##*/}" "${arch}"
-		done
-	done
+	checkPackage extra pkg-split-a
+	checkPackage testing pkg-split-b
 }
diff --git a/test/cases/db-remove.bats b/test/cases/db-remove.bats
index deb0f0e..ff88237 100755
--- a/test/cases/db-remove.bats
+++ b/test/cases/db-remove.bats
@@ -18,9 +18,7 @@ load ../lib/common
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkRemovedPackage extra "${pkgbase}" "${arch}"
-		done
+		checkRemovedPackage extra "${pkgbase}"
 	done
 }
 
@@ -40,9 +38,7 @@ load ../lib/common
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkRemovedPackage extra "${pkgbase}" "${arch}"
-		done
+		checkRemovedPackage extra "${pkgbase}"
 	done
 }
 
@@ -61,6 +57,6 @@ load ../lib/common
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		checkRemovedPackage extra "${pkgbase}" any
+		checkRemovedPackage extra "${pkgbase}"
 	done
 }
diff --git a/test/cases/db-repo-add.bats b/test/cases/db-repo-add.bats
index a04d9bb..ef6cfe7 100755
--- a/test/cases/db-repo-add.bats
+++ b/test/cases/db-repo-add.bats
@@ -35,9 +35,7 @@ __movePackageToRepo() {
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkPackageDB extra "${pkgbase}-1-1-${arch}.pkg.tar.xz" "${arch}"
-		done
+		checkPackageDB extra "${pkgbase}"
 	done
 }
 
@@ -60,9 +58,7 @@ __movePackageToRepo() {
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkPackageDB extra "${pkgbase}-1-1-${arch}.pkg.tar.xz" "${arch}"
-		done
+		checkPackageDB extra "${pkgbase}"
 	done
 }
 
@@ -78,8 +74,6 @@ __movePackageToRepo() {
 	done
 
 	for pkgbase in ${pkgs[@]}; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkPackageDB extra ${pkgbase}-1-1-any.pkg.tar.xz ${arch}
-		done
+		checkPackageDB extra ${pkgbase}
 	done
 }
diff --git a/test/cases/db-repo-remove.bats b/test/cases/db-repo-remove.bats
index 6145f25..389c31e 100755
--- a/test/cases/db-repo-remove.bats
+++ b/test/cases/db-repo-remove.bats
@@ -18,9 +18,7 @@ load ../lib/common
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkRemovedPackageDB extra "${pkgbase}" "${arch}"
-		done
+		checkRemovedPackageDB extra "${pkgbase}"
 	done
 }
 
@@ -40,9 +38,7 @@ load ../lib/common
 	done
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkRemovedPackageDB extra "${pkgbase}" "${arch}"
-		done
+		checkRemovedPackageDB extra "${pkgbase}"
 	done
 }
 
@@ -61,6 +57,6 @@ load ../lib/common
 	done
 
 	for pkgbase in ${pkgs[@]}; do
-		checkRemovedPackageDB extra ${pkgbase} any
+		checkRemovedPackageDB extra ${pkgbase}
 	done
 }
diff --git a/test/cases/db-update.bats b/test/cases/db-update.bats
index 3a2e543..56e364b 100755
--- a/test/cases/db-update.bats
+++ b/test/cases/db-update.bats
@@ -12,22 +12,20 @@ load ../lib/common
 	db-update
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			checkPackage extra "${pkgbase}-1-1-${arch}.pkg.tar.xz" "${arch}"
-		done
+		checkPackage extra "${pkgbase}"
 	done
 }
 
 @test "add single simple package" {
 	releasePackage extra 'pkg-single-arch'
 	db-update
-	checkPackage extra 'pkg-single-arch-1-1-x86_64.pkg.tar.xz' 'x86_64'
+	checkPackage extra 'pkg-single-arch'
 }
 
 @test "add single epoch package" {
 	releasePackage extra 'pkg-single-epoch'
 	db-update
-	checkPackage extra 'pkg-single-epoch-1:1-1-x86_64.pkg.tar.xz' 'x86_64'
+	checkPackage extra 'pkg-single-epoch'
 }
 
 @test "add any packages" {
@@ -41,7 +39,7 @@ load ../lib/common
 	db-update
 
 	for pkgbase in "${pkgs[@]}"; do
-		checkPackage extra "${pkgbase}-1-1-any.pkg.tar.xz" any
+		checkPackage extra "${pkgbase}"
 	done
 }
 
@@ -58,11 +56,7 @@ load ../lib/common
 	db-update
 
 	for pkgbase in "${pkgs[@]}"; do
-		for arch in "${ARCH_BUILD[@]}"; do
-			for pkg in $(getPackageNamesFromPackageBase ${pkgbase}); do
-				checkPackage extra "${pkg##*/}" "${arch}"
-			done
-		done
+		checkPackage extra "${pkgbase}"
 	done
 }
 
@@ -75,7 +69,7 @@ load ../lib/common
 	releasePackage extra pkg-any-a
 	db-update
 
-	checkPackage extra pkg-any-a-1-2-any.pkg.tar.xz any
+	checkPackage extra pkg-any-a
 }
 
 @test "update any package to different repositories at once" {
@@ -87,14 +81,14 @@ load ../lib/common
 
 	db-update
 
-	checkPackage extra pkg-any-a-1-1-any.pkg.tar.xz any
-	checkPackage testing pkg-any-a-1-2-any.pkg.tar.xz any
+	checkPackage extra pkg-any-a
+	checkPackage testing pkg-any-a
 }
 
 @test "update same any package to same repository" {
 	releasePackage extra pkg-any-a
 	db-update
-	checkPackage extra pkg-any-a-1-1-any.pkg.tar.xz any
+	checkPackage extra pkg-any-a
 
 	releasePackage extra pkg-any-a
 	run db-update
@@ -104,13 +98,13 @@ load ../lib/common
 @test "update same any package to different repositories" {
 	releasePackage extra pkg-any-a
 	db-update
-	checkPackage extra pkg-any-a-1-1-any.pkg.tar.xz any
+	checkPackage extra pkg-any-a
 
 	releasePackage testing pkg-any-a
 	run db-update
 	[ "$status" -ne 0 ]
 
-	checkRemovedPackageDB testing pkg-any-a any
+	checkRemovedPackageDB testing pkg-any-a
 }
 
 @test "add incomplete split package" {
@@ -127,9 +121,7 @@ load ../lib/common
 	run db-update
 	[ "$status" -ne 0 ]
 
-	for arch in "${ARCH_BUILD[@]}"; do
-		checkRemovedPackageDB ${repo} ${pkgbase} ${arch}
-	done
+	checkRemovedPackageDB ${repo} ${pkgbase}
 }
 
 @test "unknown repo" {
@@ -137,7 +129,7 @@ load ../lib/common
 	releasePackage extra 'pkg-any-a'
 	releasePackage unknown 'pkg-any-b'
 	db-update
-	checkPackage extra 'pkg-any-a-1-1-any.pkg.tar.xz' any
+	checkPackage extra 'pkg-any-a'
 	[ ! -e "${FTP_BASE}/unknown" ]
 	rm -rf "${STAGING}/unknown/"
 }
@@ -148,7 +140,7 @@ load ../lib/common
 	run db-update
 	[ "$status" -ne 0 ]
 
-	checkRemovedPackageDB extra pkg-any-a any
+	checkRemovedPackageDB extra pkg-any-a
 }
 
 @test "add invalid signed package fails" {
@@ -161,7 +153,7 @@ load ../lib/common
 	run db-update
 	[ "$status" -ne 0 ]
 
-	checkRemovedPackageDB extra pkg-any-a any
+	checkRemovedPackageDB extra pkg-any-a
 }
 
 @test "add broken signature fails" {
@@ -173,7 +165,7 @@ load ../lib/common
 	run db-update
 	[ "$status" -ne 0 ]
 
-	checkRemovedPackageDB extra pkg-any-a any
+	checkRemovedPackageDB extra pkg-any-a
 }
 
 @test "add package with inconsistent version fails" {
@@ -186,7 +178,7 @@ load ../lib/common
 
 	run db-update
 	[ "$status" -ne 0 ]
-	checkRemovedPackageDB extra 'pkg-any-a' 'any'
+	checkRemovedPackageDB extra 'pkg-any-a'
 }
 
 @test "add package with inconsistent name fails" {
@@ -199,7 +191,7 @@ load ../lib/common
 
 	run db-update
 	[ "$status" -ne 0 ]
-	checkRemovedPackage extra 'foo-pkg-any-a' 'any'
+	checkRemovedPackage extra 'pkg-any-a'
 }
 
 @test "add package with inconsistent pkgbuild fails" {
@@ -210,7 +202,7 @@ load ../lib/common
 
 	run db-update
 	[ "$status" -ne 0 ]
-	checkRemovedPackageDB extra 'pkg-any-a' 'any'
+	checkRemovedPackageDB extra 'pkg-any-a'
 }
 
 @test "add package with insufficient permissions fails" {
@@ -222,8 +214,8 @@ load ../lib/common
 	[ "$status" -ne 0 ]
 	chmod +xwr ${FTP_BASE}/core/os/i686
 
-	checkRemovedPackageDB core 'pkg-any-a' 'any'
-	checkRemovedPackageDB extra 'pkg-any-b' 'any'
+	checkRemovedPackageDB core 'pkg-any-a'
+	checkRemovedPackageDB extra 'pkg-any-b'
 }
 
 @test "package has to be a regular file" {
@@ -239,7 +231,5 @@ load ../lib/common
 
 	run db-update
 	[ "$status" -ne 0 ]
-	for arch in "${ARCH_BUILD[@]}"; do
-		checkRemovedPackageDB extra "pkg-simple-a" $arch
-	done
+	checkRemovedPackageDB extra "pkg-simple-a"
 }
diff --git a/test/cases/ftpdir-cleanup.bats b/test/cases/ftpdir-cleanup.bats
index 1a46fdf..35b3c9f 100755
--- a/test/cases/ftpdir-cleanup.bats
+++ b/test/cases/ftpdir-cleanup.bats
@@ -1,13 +1,21 @@
 load ../lib/common
 
+__getPackageNamesFromPackageBase() {
+	local pkgbase=$1
+
+	(. "packages/${pkgbase}/PKGBUILD"; echo ${pkgname[@]})
+}
+
 __checkRepoRemovedPackage() {
 	local repo=$1
 	local pkgbase=$2
-	local arch=$3
+	local repoarch=$3
+	local pkgname
 
-	# FIXME: pkgbase might not be part of the package filename
-	[[ ! -f ${FTP_BASE}/${PKGPOOL}/${pkgbase}*${PKGEXT} ]]
-	[[ ! -f ${FTP_BASE}/${repo}/os/${arch}/${pkgbase}*${PKGEXT} ]]
+	for pkgname in $(__getPackageNamesFromPackageBase ${pkgbase}); do
+		[[ ! -f ${FTP_BASE}/${PKGPOOL}/${pkgname}-*${PKGEXT} ]]
+		[[ ! -f ${FTP_BASE}/${repo}/os/${repoarch}/${pkgname}-*${PKGEXT} ]]
+	done
 }
 
 @test "cleanup simple packages" {
@@ -27,13 +35,12 @@ __checkRepoRemovedPackage() {
 
 	ftpdir-cleanup
 
+	checkRemovedPackage extra 'pkg-simple-a'
 	for arch in "${ARCH_BUILD[@]}"; do
-		checkRemovedPackage extra 'pkg-simple-a' "${arch}"
 		__checkRepoRemovedPackage extra 'pkg-simple-a' ${arch}
-
-		local pkg2="pkg-simple-b-1-1-${arch}.pkg.tar.xz"
-		checkPackage extra "${pkg2}" "${arch}"
 	done
+
+	checkPackage extra pkg-simple-b
 }
 
 @test "cleanup epoch packages" {
@@ -53,8 +60,8 @@ __checkRepoRemovedPackage() {
 
 	ftpdir-cleanup
 
+	checkRemovedPackage extra 'pkg-simple-epoch'
 	for arch in "${ARCH_BUILD[@]}"; do
-		checkRemovedPackage extra 'pkg-simple-epoch' "${arch}"
 		__checkRepoRemovedPackage extra 'pkg-simple-epoch' ${arch}
 	done
 }
@@ -73,11 +80,12 @@ __checkRepoRemovedPackage() {
 	ftpdir-cleanup
 
 	local pkg1='pkg-any-a-1-1-any.pkg.tar.xz'
-	checkRemovedPackage extra 'pkg-any-a' any
-	__checkRepoRemovedPackage extra 'pkg-any-a' any
+	checkRemovedPackage extra 'pkg-any-a'
+	for arch in ${ARCH_BUILD[@]}; do
+		__checkRepoRemovedPackage extra 'pkg-any-a' ${arch}
+	done
 
-	local pkg2="pkg-any-b-1-1-${arch}.pkg.tar.xz"
-	checkPackage extra "${pkg2}" any
+	checkPackage extra pkg-any-b
 }
 
 @test "cleanup split packages" {
@@ -99,15 +107,11 @@ __checkRepoRemovedPackage() {
 	ftpdir-cleanup
 
 	for arch in "${ARCH_BUILD[@]}"; do
-		for pkg in $(getPackageNamesFromPackageBase "${pkgs[0]}"); do
-			checkRemovedPackage extra "${pkg}" "${arch}"
-			__checkRepoRemovedPackage extra ${pkg} ${arch}
-		done
-
-		for pkg in $(getPackageNamesFromPackageBase "${pkgs[1]}"); do
-			checkPackage extra "${pkg##*/}" "${arch}"
-		done
+		__checkRepoRemovedPackage extra ${pkg[0]} ${arch}
 	done
+
+	checkRemovedPackage extra "${pkgs[0]}"
+	checkPackage extra "${pkgs[1]}"
 }
 
 @test "cleanup old packages" {
diff --git a/test/lib/common.bash b/test/lib/common.bash
index 98b4469..a833181 100644
--- a/test/lib/common.bash
+++ b/test/lib/common.bash
@@ -3,23 +3,6 @@
 . /usr/share/makepkg/util.sh
 . "$(dirname "${BASH_SOURCE[0]}")"/../test.conf
 
-__getPackageBaseFromPackage() {
-	local _base
-	_grep_pkginfo() {
-		local _ret
-
-		_ret="$(/usr/bin/bsdtar -xOqf "$1" .PKGINFO | grep -m 1 "^${2} = ")"
-		echo "${_ret#${2} = }"
-	}
-
-	_base="$(_grep_pkginfo "$1" "pkgbase")"
-	if [ -z "$_base" ]; then
-		_grep_pkginfo "$1" "pkgname"
-	else
-		echo "$_base"
-	fi
-}
-
 __updatePKGBUILD() {
 	local pkgrel
 
@@ -175,86 +158,118 @@ updateRepoPKGBUILD() {
 	popd
 }
 
-getPackageNamesFromPackageBase() {
-	local pkgbase=$1
-
-	$(. "packages/${pkgbase}/PKGBUILD"; echo ${pkgname[@]})
-}
-
 checkPackageDB() {
 	local repo=$1
-	local pkg=$2
-	local arch=$3
+	local pkgbase=$2
 	local db
-	local tarch
-	local tarches
-
-	[ -r "${FTP_BASE}/${PKGPOOL}/${pkg}" ]
-	[ -r "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ]
-	[ ! -r "${STAGING}/${repo}/${pkg}" ]
-	[ ! -r "${STAGING}/${repo}/${pkg}.sig" ]
-
-	if [[ $arch == any ]]; then
-		tarches=("${ARCHES[@]}")
+	local pkgarch
+	local repoarch
+	local repoarches
+	local pkgfile
+	local pkgname
+
+	# FIXME: We guess the location of the PKGBUILD used for this repo
+	# We cannot read from trunk as __updatePKGBUILD() might have bumped the version
+	# and different repos can have different versions of the same package
+	local pkgbuildPaths=($(compgen -G "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-*"))
+	local pkgbuildPath="${pkgbuildPaths[0]}"
+	echo Repo is $repo
+	echo pkgbuildPaths = ${pkgbuildPaths[@]}
+	echo pkgbuildPath = ${pkgbuildPath}
+	ls -ahl ${TMP}/svn-packages-copy/${pkgbase}/repos/
+	[ -r "${pkgbuildPath}/PKGBUILD" ]
+
+	local pkgarches=($(. "${pkgbuildPath}/PKGBUILD"; echo ${arch[@]}))
+	local pkgnames=($(. "${pkgbuildPath}/PKGBUILD"; echo ${pkgname[@]}))
+	local pkgver=$(. "${pkgbuildPath}/PKGBUILD"; get_full_version)
+
+	if [[ ${pkgarches[@]} == any ]]; then
+		repoarches=("${ARCHES[@]}")
 	else
-		tarches=("${arch}")
+		repoarches=("${pkgarches[@]}")
 	fi
 
-	for tarch in "${tarches[@]}"; do
-		[ -L "${FTP_BASE}/${repo}/os/${tarch}/${pkg}" ]
-		[ "$(readlink -e "${FTP_BASE}/${repo}/os/${tarch}/${pkg}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}")" ]
-
-		[ -L "${FTP_BASE}/${repo}/os/${tarch}/${pkg}.sig" ]
-		[ "$(readlink -e "${FTP_BASE}/${repo}/os/${tarch}/${pkg}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}.sig")" ]
-
-		for db in "${DBEXT}" "${FILESEXT}"; do
-			[ -r "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" ]
-			bsdtar -xf "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" -O | grep "${pkg}" &>/dev/null
+	for pkgarch in ${pkgarches[@]}; do
+		for pkgname in ${pkgnames[@]}; do
+			pkgfile="${pkgname}-${pkgver}-${pkgarch}${PKGEXT}"
+
+			[ -r "${FTP_BASE}/${PKGPOOL}/${pkgfile}" ]
+			[ -r "${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig" ]
+			[ ! -r "${STAGING}/${repo}/${pkgfile}" ]
+			[ ! -r "${STAGING}/${repo}/${pkgfile}.sig" ]
+
+			for repoarch in "${repoarches[@]}"; do
+				# Only 'any' packages can be found in repos of both arches
+				if [[ $pkgarch != any ]]; then
+					if [[ $pkgarch != ${repoarch} ]]; then
+						continue
+					fi
+				fi
+
+				[ -L "${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}" ]
+				[ "$(readlink -e "${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkgfile}")" ]
+
+				[ -L "${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig" ]
+				[ "$(readlink -e "${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig")" ]
+
+				for db in "${DBEXT}" "${FILESEXT}"; do
+					[ -r "${FTP_BASE}/${repo}/os/${repoarch}/${repo}${db%.tar.*}" ]
+					bsdtar -xf "${FTP_BASE}/${repo}/os/${repoarch}/${repo}${db%.tar.*}" -O | grep "${pkgfile%${PKGEXT}}" &>/dev/null
+				done
+			done
 		done
 	done
 }
 
 checkPackage() {
 	local repo=$1
-	local pkg=$2
-	local arch=$3
-
-	checkPackageDB "$repo" "$pkg" "$arch"
+	local pkgbase=$2
 
-	local pkgbase=$(__getPackageBaseFromPackage "${FTP_BASE}/${PKGPOOL}/${pkg}")
 	svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
-	[ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-${arch}" ]
+	# TODO: Does not fail if one arch is missing
+	compgen -G "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-*" >/dev/null
+
+	checkPackageDB "$repo" "$pkgbase"
 }
 
 checkRemovedPackage() {
 	local repo=$1
 	local pkgbase=$2
-	local arch=$3
-
-	checkRemovedPackageDB "$repo" "$pkgbase" "$arch"
 
 	svn up -q "${TMP}/svn-packages-copy/${pkgbase}"
-	[ ! -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-${arch}" ]
+	! compgen -G "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-*" >/dev/null
+
+	checkRemovedPackageDB "$repo" "$pkgbase"
 }
 
 checkRemovedPackageDB() {
 	local repo=$1
 	local pkgbase=$2
-	local arch=$3
+	local arch
 	local db
 	local tarch
 	local tarches
+	local pkgarches
+	local pkgnames
+	local pkgname
+
+	local pkgbuildPath="${TMP}/svn-packages-copy/${pkgbase}/trunk/PKGBUILD"
+	[[ -r ${pkgbuildPath} ]]
+	pkgarches=($(. "${pkgbuildPath}"; echo ${arch[@]}))
+	pkgnames=($(. "${pkgbuildPath}"; echo ${pkgname[@]}))
 
-	if [[ $arch == any ]]; then
+	if [[ ${pkgarches[@]} == any ]]; then
 		tarches=(${ARCHES[@]})
 	else
-		tarches=(${arch})
+		tarches=($pkgarches[@])
 	fi
 
 	for db in "${DBEXT}" "${FILESEXT}"; do
 		for tarch in "${tarches[@]}"; do
 			if [ -r "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" ]; then
-				! bsdtar -xf "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" -O | grep "${pkgbase}" &>/dev/null
+				for pkgname in ${pkgnames[@]}; do
+					! bsdtar -xf "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" -O | grep "${pkgname}" &>/dev/null
+				done
 			fi
 		done
 	done
-- 
2.16.2




More information about the Dev mailing list