diff --git a/Makefile b/Makefile index 988d3354..9b939826 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,17 @@ IMAGE:=dbscripts/test -RUN_OPTIONS:=--rm --network=none -v $(PWD):/dbscripts:ro --tmpfs=/tmp:exec -w /dbscripts/test +RUN_OPTIONS:=--rm --network=none -v $(PWD):/dbscripts:ro -v dbscripts:/build --tmpfs=/tmp:exec -w /dbscripts/test +CASES ?= cases +CRUN := docker test-image: - docker build --pull -t $(IMAGE) test + $(CRUN) build --pull -t $(IMAGE) test test: test-image - docker run $(RUN_OPTIONS) $(IMAGE) make test + $(CRUN) run $(RUN_OPTIONS) $(IMAGE) make CASES=$(CASES) test test-coverage: test-image rm -rf ${PWD}/coverage mkdir -m 777 ${PWD}/coverage - docker run $(RUN_OPTIONS) -v ${PWD}/coverage:/coverage -e COVERAGE_DIR=/coverage $(IMAGE) make test-coverage + $(CRUN) run $(RUN_OPTIONS) -v ${PWD}/coverage:/coverage -e COVERAGE_DIR=/coverage $(IMAGE) make test-coverage .PHONY: test-image test test-coverage diff --git a/db-functions b/db-functions index 22455319..632153b6 100644 --- a/db-functions +++ b/db-functions @@ -109,7 +109,14 @@ trap cleanup EXIT #repo_lock [timeout] -repo_lock () { +repo_lock() { + local repo base=${1}; shift + for repo in ${base} ${base}-debug; do + _repo_lock ${repo} "${@}" + done +} + +_repo_lock () { local LOCKDIR="$TMPDIR/.repolock.$1.$2" local DBLOCKFILE="${FTP_BASE}/${1}/os/${2}/${1}${DBEXT}.lck" local _count @@ -152,7 +159,14 @@ repo_lock () { return 1 } -repo_unlock () { #repo_unlock +repo_unlock(){ + local repo base=${1}; shift + for repo in ${base} ${base}-debug; do + _repo_unlock ${repo} "${@}" + done +} + +_repo_unlock () { #repo_unlock local LOCKDIR="$TMPDIR/.repolock.$1.$2" if [[ ! -d $LOCKDIR ]]; then warning "Repo lock [%s] (%s) was not locked!" "$1" "$2" @@ -234,6 +248,14 @@ getpkgarch() { echo "$_ver" } +is_debug_package() { + local pkgfile=${1} + local pkgbase="$(getpkgbase "${pkgfile}")" + local pkgname="$(getpkgname "${pkgfile}")" + + [[ ${pkgbase}-debug = ${pkgname} ]] +} + check_packager() { local _packager @@ -310,7 +332,7 @@ check_pkgvcs() { read -ra vcsnames <<<"${vcsnames}" [[ "${vcsver}" = "${_pkgver}" ]] || return 1 - in_array "${_pkgname}" "${vcsnames[@]}" || return 1 + in_array "${_pkgname}" "${vcsnames[@]}" "${_pkgbase}-debug" || return 1 return 0 } @@ -334,6 +356,7 @@ check_splitpkgs() { # not a split package (( ${#vcsnames[@]} > 1 )) || continue + [[ ${_pkgbase}-debug = ${_pkgname} ]] && continue mkdir -p "${repo}/${_pkgarch}/${_pkgbase}" echo "${_pkgname}" >> "${repo}/${_pkgarch}/${_pkgbase}/staging" @@ -410,7 +433,7 @@ check_repo_permission() { (( ${#PKGREPOS[@]} == 0 )) && return 1 [[ -z "${PKGPOOL}" ]] && return 1 - in_array "${repo}" "${PKGREPOS[@]}" || return 1 + in_array "${repo}" "${PKGREPOS[@]}" "${DEBUGREPOS[@]}" || return 1 [[ -w $FTP_BASE/${PKGPOOL} ]] || return 1 @@ -426,6 +449,7 @@ check_repo_permission() { } set_repo_permission() { + local -; set -x local repo=$1 local arch=$2 local dbfile="${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" @@ -443,11 +467,13 @@ set_repo_permission() { } arch_repo_modify() { + echo "call: arch_repo_modify ${@@Q}" local action=$1 local repo=$2 local arch=$3 local pkgs=("${@:4}") local dbfile="${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT}" + tree "${FTP_BASE}" if [[ ${action} = remove && ! -f ${dbfile} ]]; then error "No database found at '%s'" "$dbfile" @@ -456,6 +482,7 @@ arch_repo_modify() { # package files for repo-add might be relative to repo dir pushd "${dbfile%/*}" >/dev/null + ls /usr/bin/"repo-${action}" -q "${dbfile}" "${pkgs[@]}" \ || error '%s' "repo-${action} ${dbfile@Q} ${pkgs[*]@Q}" set_repo_permission "${repo}" "${arch}" diff --git a/db-move b/db-move index 6f20397c..4e577b53 100755 --- a/db-move +++ b/db-move @@ -12,7 +12,9 @@ args=("${@}") repo_from="${args[0]}" repo_to="${args[1]}" ftppath_from="${FTP_BASE}/${repo_from}/os/" +ftppath_debug_from="${FTP_BASE}/${repo_from}-debug/os/" ftppath_to="${FTP_BASE}/${repo_to}/os/" +ftppath_debug_to="${FTP_BASE}/${repo_to}-debug/os/" check_leapfrog=false if in_array "${repo_from}" "${STAGING_REPOS[@]}" && in_array "${repo_to}" "${STABLE_REPOS[@]}"; then @@ -65,7 +67,9 @@ msg "Moving packages from [%s] to [%s]..." "$repo_from" "$repo_to" for arch in "${ARCHES[@]}"; do declare -a add_pkgs_$arch + declare -a add_debug_pkgs_$arch declare -a remove_pkgs_$arch + declare -a remove_debug_pkgs_$arch done for pkgbase in "${args[@]:2}"; do tag_list="" @@ -88,7 +92,9 @@ for pkgbase in "${args[@]:2}"; do for tarch in "${tarches[@]}"; do declare -n add_pkgs="add_pkgs_${tarch}" + declare -n add_debug_pkgs="add_debug_pkgs_${tarch}" declare -n remove_pkgs="remove_pkgs_${tarch}" + declare -n remove_debug_pkgs="remove_debug_pkgs_${tarch}" for pkgname in "${pkgnames[@]}"; do pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/${pkgname}-${pkgver}-${pkgarch}"${PKGEXTS}) pkgfile="${pkgpath##*/}" @@ -99,6 +105,18 @@ for pkgbase in "${args[@]:2}"; do fi add_pkgs+=("${FTP_BASE}/${PKGPOOL}/${pkgfile}") remove_pkgs+=("${pkgname}") + + debug_pkgpath=$(getpkgfile "${ftppath_debug_from}/${tarch}/${pkgname}-debug-${pkgver}-${pkgarch}"${PKGEXTS}) + debug_pkgfile="${debug_pkgpath##*/}" + if [[ -f ${debug_pkgpath} ]]; then + msg2 "Found debug package %s" "${pkgname}-debug" + ln -s "../../../${PKGPOOL}-debug/${debug_pkgfile}" "${ftppath_debug_to}/${tarch}/" + if [[ -f ${FTP_BASE}/${PKGPOOL}-debug/${debug_pkgfile}.sig ]]; then + ln -s "../../../${PKGPOOL}-debug/${debug_pkgfile}.sig" "${ftppath_debug_to}/${tarch}/" + fi + add_debug_pkgs+=("${FTP_BASE}/${PKGPOOL}-debug/${debug_pkgfile}") + remove_debug_pkgs+=("${pkgname}-debug") + fi done done fi @@ -109,11 +127,17 @@ done for tarch in "${ARCHES[@]}"; do declare -n add_pkgs="add_pkgs_${tarch}" + declare -n add_debug_pkgs="add_debug_pkgs_${tarch}" declare -n remove_pkgs="remove_pkgs_${tarch}" + declare -n remove_debug_pkgs="remove_debug_pkgs_${tarch}" if [[ -n ${add_pkgs[@]} ]]; then arch_repo_modify add "${repo_to}" "${tarch}" "${add_pkgs[@]}" arch_repo_modify remove "${repo_from}" "${tarch}" "${remove_pkgs[@]}" fi + if [[ -n ${add_debug_pkgs[@]} ]]; then + arch_repo_modify add "${repo_to}-debug" "${tarch}" "${add_debug_pkgs[@]}" + arch_repo_modify remove "${repo_from}-debug" "${tarch}" "${remove_debug_pkgs[@]}" + fi done for pkgarch in "${ARCHES[@]}"; do diff --git a/db-remove b/db-remove index a27a9f29..7daed118 100755 --- a/db-remove +++ b/db-remove @@ -12,7 +12,6 @@ repo="$1" arch="$2" pkgbases=("${@:3}") -ftppath="$FTP_BASE/$repo/os" vcsrepo="$repo-$arch" if ! check_repo_permission "$repo"; then @@ -45,6 +44,16 @@ for pkgbase in "${pkgbases[@]}"; do done for tarch in "${tarches[@]}"; do - arch_repo_modify remove "${repo}" "${tarch}" "${remove_pkgs[@]}" + if (( ${#remove_pkgs[@]} >= 1 )); then + arch_repo_modify remove "${repo}" "${tarch}" "${remove_pkgs[@]}" + for pkg in "${remove_pkgs[@]}"; do + if is_globfile "${FTP_BASE}/${repo}-debug/os/${tarch}/${pkg}-debug"*; then + msg "Found debug package. Removing %s from [%s]..." "$pkg" "$repo" + remove_debug_pkgs+=("${pkg}-debug") + arch_repo_modify remove "${repo}-debug" "${tarch}" "${pkg}-debug" + fi + done + fi + repo_unlock "$repo" "$tarch" done diff --git a/db-update b/db-update index b85295f3..069c564d 100755 --- a/db-update +++ b/db-update @@ -79,31 +79,50 @@ done for repo in "${repos[@]}"; do msg "Updating [%s]..." "$repo" + tree "${STAGING}/${repo}" any_pkgs=($(getpkgfiles "${STAGING}/${repo}/"*-any${PKGEXTS} 2>/dev/null)) for pkgarch in "${ARCHES[@]}"; do add_pkgs=() + debug_pkgs=() arch_pkgs=($(getpkgfiles "${STAGING}/${repo}/"*"-${pkgarch}"${PKGEXTS} 2>/dev/null)) for pkg in "${arch_pkgs[@]}" "${any_pkgs[@]}"; do pkgfile="${pkg##*/}" + + if is_debug_package "${pkg}"; then + debug_pkgs+=("${pkgfile}") + currentpool=${PKGPOOL}-debug + currentrepo=${repo}-debug + else + add_pkgs+=("${pkgfile}") + currentpool=${PKGPOOL} + currentrepo=${repo} + fi + msg2 '%s (%s)' "$pkgfile" "$pkgarch" # any packages might have been moved by the previous run if [[ -f ${pkg} ]]; then - mv "${pkg}" "$FTP_BASE/${PKGPOOL}" + mv "${pkg}" "$FTP_BASE/${currentpool}" fi - ln -s "../../../${PKGPOOL}/${pkgfile}" "$FTP_BASE/$repo/os/${pkgarch}" + ln -s "../../../${currentpool}/${pkgfile}" "$FTP_BASE/${currentrepo}/os/${pkgarch}" # also move signatures if [[ -f ${pkg}.sig ]]; then - mv "${pkg}.sig" "$FTP_BASE/${PKGPOOL}" + mv "${pkg}.sig" "$FTP_BASE/${currentpool}" fi - "$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")/db-archive" "${FTP_BASE}/${PKGPOOL}/${pkg##*/}" - if [[ -f $FTP_BASE/${PKGPOOL}/${pkgfile}.sig ]]; then - ln -s "../../../${PKGPOOL}/${pkgfile}.sig" "$FTP_BASE/$repo/os/${pkgarch}" + if [[ ${PKGPOOL} = ${currentpool} ]]; then + # do not archive debug info, this is not of historic interest + "$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")/db-archive" "${FTP_BASE}/${PKGPOOL}/${pkg##*/}" + fi + if [[ -f $FTP_BASE/${currentpool}/${pkgfile}.sig ]]; then + ln -s "../../../${currentpool}/${pkgfile}.sig" "$FTP_BASE/${currentrepo}/os/${pkgarch}" fi - add_pkgs+=("${pkgfile}") done + declare -p add_pkgs debug_pkgs if (( ${#add_pkgs[@]} >= 1 )); then arch_repo_modify add "${repo}" "${pkgarch}" ${add_pkgs[@]} fi + if (( ${#debug_pkgs[@]} >= 1 )); then + arch_repo_modify add "${repo}-debug" "${pkgarch}" ${debug_pkgs[@]} + fi done done diff --git a/test/Dockerfile b/test/Dockerfile index 83c84499..ae91cfbd 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -1,8 +1,10 @@ -FROM archlinux/base -RUN pacman -Syu --noconfirm --needed sudo fakeroot awk subversion make kcov bash-bats gettext grep +FROM docker.io/archlinux/base +RUN pacman -Syu --noconfirm --needed sudo fakeroot awk subversion make kcov bash-bats gettext grep tree binutils RUN pacman-key --init RUN echo '%wheel ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/wheel -RUN useradd -N -g users -G wheel -d /build -m tester +RUN useradd -N -g users -G wheel -d /tester -m tester +RUN mkdir -p /build; chown -R tester: /build +VOLUME ["/build"] USER tester RUN echo -e "\ Key-Type: RSA\n\ @@ -16,5 +18,4 @@ Expire-Date: 0\n\ | gpg --quiet --batch --no-tty --no-permission-warning --gen-key RUN gpg --export | sudo pacman-key -a - RUN sudo pacman-key --lsign-key tester@localhost -ENV BUILDDIR=/build ENV PACKAGER="Bob Tester " diff --git a/test/Makefile b/test/Makefile index d9437bfd..d7ac08a6 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,11 +1,13 @@ +CASES ?= cases + test: - PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) bats cases + BUILDDIR=/build PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) bats $(CASES) test-coverage: - PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) kcov \ + BUILDDIR=/build PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) kcov \ --include-path=$(CURDIR)/../ \ --exclude-path=$(CURDIR)/../test,$(CURDIR)/../cron-jobs/makepkg.conf,$(CURDIR)/../config \ $(COVERAGE_DIR) \ - bats cases + bats $(CASES) .PHONY: test test-coverage diff --git a/test/cases/db-move.bats b/test/cases/db-move.bats index f4407168..243e956a 100644 --- a/test/cases/db-move.bats +++ b/test/cases/db-move.bats @@ -7,15 +7,54 @@ load ../lib/common local arch for pkgbase in ${pkgs[@]}; do + echo "releasing to testing: $pkgbase" releasePackage testing ${pkgbase} done + echo "db-updating..." db-update + echo "db-move testing -> extra pkg-simple-a" db-move testing extra pkg-simple-a + echo checkRemovedPackage testing pkg-simple-a checkRemovedPackage testing pkg-simple-a + echo checkPackage extra pkg-simple-a 1-1 checkPackage extra pkg-simple-a 1-1 + echo checkPackage testing pkg-simple-b 1-1 + checkPackage testing pkg-simple-b 1-1 +} + +@test "move debug package" { + local arches=('i686' 'x86_64') + local pkgs=('pkg-debuginfo' 'pkg-simple-b') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + echo "releasing to testing: $pkgbase" + releasePackage testing ${pkgbase} + done + + echo "db-updating..." + db-update + + echo "db-move testing -> extra pkg-debuginfo" + db-move testing extra pkg-debuginfo + + echo checkRemovedPackage testing pkg-debuginfo + checkRemovedPackage testing pkg-debuginfo + + echo checkRemovedPackage testing-debug pkg-debuginfo-debug + checkRemovedPackage testing-debug pkg-debuginfo + + echo checkPackage extra pkg-debuginfo 1-1 + checkPackage extra pkg-debuginfo 1-1 + + echo checkPackage extra-debug pkg-debuginfo 1-1 + checkPackage extra-debug pkg-debuginfo 1-1 + + echo checkPackage testing pkg-simple-b 1-1 checkPackage testing pkg-simple-b 1-1 } diff --git a/test/cases/db-remove.bats b/test/cases/db-remove.bats index 0597b4dc..5f2674a4 100644 --- a/test/cases/db-remove.bats +++ b/test/cases/db-remove.bats @@ -23,6 +23,31 @@ load ../lib/common done } +@test "remove debug package" { + local arches=('i686' 'x86_64') + local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b' 'pkg-simple-epoch' 'pkg-debuginfo') + local debug_pkgs=('pkg-debuginfo') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + done + + db-update + + for pkgbase in ${pkgs[@]}; do + for arch in ${arches[@]}; do + db-remove extra ${arch} ${pkgbase} + done + done + + checkRemovedPackage extra pkg-debuginfo + for pkgbase in ${debug_pkgs[@]}; do + checkRemovedPackage extra-debug ${pkgbase} + done +} + @test "remove multiple packages" { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-split-a' 'pkg-split-b' 'pkg-simple-epoch') diff --git a/test/cases/db-repo-add.bats b/test/cases/db-repo-add.bats index e49c2fad..33834337 100644 --- a/test/cases/db-repo-add.bats +++ b/test/cases/db-repo-add.bats @@ -6,6 +6,7 @@ __movePackageToRepo() { local arch=$3 local tarch local tarches + local is_debug=0 if [[ $arch == any ]]; then tarches=(${ARCHES[@]}) @@ -14,10 +15,18 @@ __movePackageToRepo() { fi # FIXME: pkgbase might not be part of the package filename + if __isGlobfile "${STAGING}"/${repo}/${pkgbase}-debug-*-*-${arch}${PKGEXT}; then + mv -v "${STAGING}"/${repo}/${pkgbase}-debug-*-*-${arch}${PKGEXT}{,.sig} "${FTP_BASE}/${PKGPOOL}-debug/" + is_debug=1 + fi mv -v "${STAGING}"/${repo}/${pkgbase}-*-*-${arch}${PKGEXT}{,.sig} "${FTP_BASE}/${PKGPOOL}/" for tarch in ${tarches[@]}; do ln -sv ${FTP_BASE}/${PKGPOOL}/${pkgbase}-*-*-${arch}${PKGEXT} "${FTP_BASE}/${repo}/os/${tarch}/" ln -sv ${FTP_BASE}/${PKGPOOL}/${pkgbase}-*-*-${arch}${PKGEXT}.sig "${FTP_BASE}/${repo}/os/${tarch}/" + if ((is_debug)); then + ln -sv ${FTP_BASE}/${PKGPOOL}-debug/${pkgbase}-*-*-${arch}${PKGEXT} "${FTP_BASE}/${repo}-debug/os/${tarch}/" + ln -sv ${FTP_BASE}/${PKGPOOL}-debug/${pkgbase}-*-*-${arch}${PKGEXT}.sig "${FTP_BASE}/${repo}-debug/os/${tarch}/" + fi done } @@ -40,6 +49,25 @@ __movePackageToRepo() { done } +@test "add debug packages" { + local arches=('i686' 'x86_64') + local pkgs=('pkg-debuginfo') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + for arch in ${arches[@]}; do + __movePackageToRepo extra ${pkgbase} ${arch} + db-repo-add extra ${arch} ${pkgbase}-1-1-${arch}${PKGEXT} + db-repo-add extra-debug ${arch} ${pkgbase}-debug-1-1-${arch}${PKGEXT} + done + done + + checkPackageDB extra ${pkgbase} 1-1 + checkPackageDB extra-debug ${pkgbase} 1-1 +} + @test "add multiple packages" { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b') diff --git a/test/cases/db-repo-remove.bats b/test/cases/db-repo-remove.bats index 77bcc241..262c4f15 100644 --- a/test/cases/db-repo-remove.bats +++ b/test/cases/db-repo-remove.bats @@ -23,6 +23,30 @@ load ../lib/common done } + +@test "remove debug packages" { + local arches=('i686' 'x86_64') + local pkgs=('pkg-debuginfo') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + done + + db-update + + for pkgbase in ${pkgs[@]}; do + for arch in ${arches[@]}; do + db-repo-remove extra ${arch} ${pkgbase} + db-repo-remove extra-debug ${arch} ${pkgbase}-debug + done + done + + checkRemovedPackageDB extra ${pkgbase} + checkRemovedPackageDB extra-debug ${pkgbase}-debug +} + @test "remove multiple packages" { local arches=('i686' 'x86_64') local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch') diff --git a/test/cases/db-update.bats b/test/cases/db-update.bats index ddeb4060..2aec4ee5 100644 --- a/test/cases/db-update.bats +++ b/test/cases/db-update.bats @@ -23,6 +23,13 @@ load ../lib/common checkPackage extra 'pkg-single-arch' 1-1 } +@test "add debug package" { + releasePackage extra 'pkg-debuginfo' + db-update + checkPackage extra 'pkg-debuginfo' 1-1 + checkPackage extra-debug 'pkg-debuginfo' 1-1 +} + @test "add single epoch package" { releasePackage extra 'pkg-single-epoch' db-update diff --git a/test/cases/testing2x.bats b/test/cases/testing2x.bats index 6127cf96..c0db45c3 100644 --- a/test/cases/testing2x.bats +++ b/test/cases/testing2x.bats @@ -14,3 +14,21 @@ load ../lib/common checkPackage core pkg-any-a 1-2 checkRemovedPackage testing pkg-any-a } + + +@test "move debug package" { + releasePackage core pkg-debuginfo + db-update + + updatePackage pkg-debuginfo + + releasePackage testing pkg-debuginfo + db-update + + testing2x pkg-debuginfo + + checkPackage core pkg-debuginfo 1-2 + checkRemovedPackage testing pkg-debuginfo + checkPackage core-debug pkg-debuginfo 1-2 + checkRemovedPackage testing-debug pkg-debuginfo +} diff --git a/test/fixtures/pkg-debuginfo/PKGBUILD b/test/fixtures/pkg-debuginfo/PKGBUILD new file mode 100644 index 00000000..0da276a5 --- /dev/null +++ b/test/fixtures/pkg-debuginfo/PKGBUILD @@ -0,0 +1,13 @@ +pkgname=pkg-debuginfo +pkgver=1 +pkgrel=1 +pkgdesc="A package named ${pkgname}" +arch=('i686' 'x86_64') + +# guarantee that split debug packages are turned on +options=('strip' 'debug') + +package() { + install -D /dev/null "${pkgdir}"/usr/bin/hello + install -D /dev/null "${pkgdir}"/../${pkgname}-debug/usr/lib/debug/usr/bin/hello.debug +} diff --git a/test/lib/common.bash b/test/lib/common.bash index 02693809..fdf427b6 100644 --- a/test/lib/common.bash +++ b/test/lib/common.bash @@ -103,7 +103,9 @@ setup() { ARCHIVEUSER="" SVNREPO="file://${TMP}/svn-packages-repo" PKGREPOS=('core' 'extra' 'testing' 'staging') + DEBUGREPOS=('core-debug' 'extra-debug' 'testing-debug' 'staging-debug') PKGPOOL='pool/packages' + DEBUGPKGPOOL='pool/packages-debug' SRCPOOL='sources/packages' STAGING_REPOS=('staging') TESTING_REPOS=('testing') @@ -121,26 +123,38 @@ eot mkdir -p "${TMP}/"{ftp,tmp,staging,{package,source}-cleanup,svn-packages-{copy,repo}} for r in ${PKGREPOS[@]}; do - mkdir -p "${TMP}/staging/${r}" + mkdir -p "${TMP}"/staging/${r}{,-debug} for a in ${ARCHES[@]}; do - mkdir -p "${TMP}/ftp/${r}/os/${a}" + mkdir -p "${TMP}"/ftp/${r}{,-debug}/os/${a} done done mkdir -p "${TMP}/ftp/${PKGPOOL}" mkdir -p "${TMP}/ftp/${SRCPOOL}" + mkdir -p "${TMP}/ftp/${PKGPOOL}-debug" + mkdir -p "${TMP}/ftp/${SRCPOOL}-debug" # make dummy packages for "reproducibility" - pacman -Qq | pacman -Sddp - | while read -r line; do - line=${line##*/} - pkgname=${line%-*-*-*} - mkdir -p "${ARCHIVE_BASE}/packages/${pkgname:0:1}/${pkgname}" - touch "${ARCHIVE_BASE}/packages/${pkgname:0:1}/${pkgname}/${line}"{,.sig} - done + pacman -Qi | awk -F': ' '\ + /^Name .*/ {printf "%s", $2} \ + /^Version .*/ {printf "-%s", $2} \ + /^Architecture .*/ {print "-"$2} \ + ' | while read -r line; do + line=$line.pkg.tar.xz + pkgname=${line%-*-*-*} + mkdir -p "${ARCHIVE_BASE}/packages/${pkgname:0:1}/${pkgname}" + touch "${ARCHIVE_BASE}/packages/${pkgname:0:1}/${pkgname}/${line}"{,.sig} + done svnadmin create "${TMP}/svn-packages-repo" svn checkout -q "file://${TMP}/svn-packages-repo" "${TMP}/svn-packages-copy" } +debug(){ + local -; set -x + $@ + set +x +} + teardown() { rm -rf "${TMP}" } @@ -193,7 +207,13 @@ checkPackageDB() { local pkgname local pkgarches=($(. "fixtures/$pkgbase/PKGBUILD"; echo ${arch[@]})) - local pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo ${pkgname[@]})) + # TODO: We need a better way to figure out when we are dealing with + # debug packages + if [[ "${repo}" = *-debug ]]; then + local pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo "${pkgname[@]}-debug")) + else + local pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo "${pkgname[@]}")) + fi if [[ ${pkgarches[@]} == any ]]; then repoarches=(${ARCHES[@]}) @@ -204,9 +224,8 @@ checkPackageDB() { 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 ${FTP_BASE}/${PKGPOOL}/${pkgfile} ] || [ -r ${FTP_BASE}/${PKGPOOL}-debug/${pkgfile} ] + [ -r ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ] || [ -r ${FTP_BASE}/${PKGPOOL}-debug/${pkgfile}.sig ] [ ! -r ${STAGING}/${repo}/${pkgfile} ] [ ! -r ${STAGING}/${repo}/${pkgfile}.sig ] @@ -217,12 +236,14 @@ checkPackageDB() { continue fi fi - + debug echo "${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}" [ -L ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile} ] - [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile})" == ${FTP_BASE}/${PKGPOOL}/${pkgfile} ] + [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile})" == ${FTP_BASE}/${PKGPOOL}/${pkgfile} ] || \ + [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile})" == ${FTP_BASE}/${PKGPOOL}-debug/${pkgfile} ] [ -L ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig ] - [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig)" == ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ] + [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig)" == ${FTP_BASE}/${PKGPOOL}/${pkgfile}.sig ] || \ + [ "$(readlink -e ${FTP_BASE}/${repo}/os/${repoarch}/${pkgfile}.sig)" == ${FTP_BASE}/${PKGPOOL}-debug/${pkgfile}.sig ] for db in ${DBEXT} ${FILESEXT}; do [ -r "${FTP_BASE}/${repo}/os/${repoarch}/${repo}${db%.tar.*}" ] @@ -242,7 +263,7 @@ checkPackage() { local dirarches=() pkgbuildarches=() local pkgbuild dirarch pkgbuildver - for pkgbuild in "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-"+([^-])"/PKGBUILD"; do + for pkgbuild in "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo%-debug}-"+([^-])"/PKGBUILD"; do [[ -e $pkgbuild ]] || continue dirarch=${pkgbuild%/PKGBUILD} dirarch=${dirarch##*-} @@ -269,8 +290,7 @@ checkRemovedPackage() { local pkgbase=$2 svn up -q "${TMP}/svn-packages-copy/${pkgbase}" - - if __isGlobfile "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-"+([^-])"/PKGBUILD"; then + if __isGlobfile "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo%-debug}-"+([^-])"/PKGBUILD"; then return 1 fi @@ -289,7 +309,14 @@ checkRemovedPackageDB() { local pkgname pkgarches=($(. "fixtures/$pkgbase/PKGBUILD"; echo ${arch[@]})) - pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo ${pkgname[@]})) + + # TODO: We need a better way to figure out when we are dealing with + # debug packages + if [[ "${repo}" = *-debug ]]; then + pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo "${pkgname[@]}-debug")) + else + pkgnames=($(. "fixtures/$pkgbase/PKGBUILD"; echo "${pkgname[@]}")) + fi if [[ ${pkgarches[@]} == any ]]; then tarches=(${ARCHES[@]})