diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2018-04-20 17:31:35 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-04-20 17:31:35 -0400 |
commit | 12fa04f545d0d27c1082af4e416b31c7ded1da34 (patch) | |
tree | cc28606b2e2bd21ca50b2f2a5c6795da1a52137e | |
parent | 0c3b06c84e65ffcb8aab669269402a8dc47704e4 (diff) | |
parent | 92856d037420e7dcce2bf6203067fa44564e7ae1 (diff) |
Merge branch 'lukeshu/pierre-tests-v3'parabola/20180420
-rw-r--r-- | .editorconfig | 7 | ||||
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | .travis.yml | 9 | ||||
-rw-r--r-- | db-functions | 2 | ||||
-rwxr-xr-x | db-repo-add | 4 | ||||
-rw-r--r-- | test/Makefile | 6 | ||||
-rwxr-xr-x | test/cases/create-filelists.bats | 95 | ||||
-rwxr-xr-x | test/cases/db-move.bats | 59 | ||||
-rwxr-xr-x | test/cases/db-remove.bats | 20 | ||||
-rwxr-xr-x | test/cases/db-repo-add.bats | 60 | ||||
-rwxr-xr-x | test/cases/db-repo-remove.bats | 35 | ||||
-rwxr-xr-x | test/cases/db-update.bats | 188 | ||||
-rwxr-xr-x | test/cases/ftpdir-cleanup.bats | 107 | ||||
-rwxr-xr-x | test/cases/packages.bats | 45 | ||||
-rwxr-xr-x | test/cases/sourceballs.bats | 34 | ||||
-rw-r--r-- | test/fixtures/pkg-any-a/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-any-b/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-simple-a/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-simple-b/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-simple-epoch/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-single-arch/PKGBUILD | 13 | ||||
-rw-r--r-- | test/fixtures/pkg-single-epoch/PKGBUILD | 14 | ||||
-rw-r--r-- | test/fixtures/pkg-split-a/PKGBUILD | 1 | ||||
-rw-r--r-- | test/fixtures/pkg-split-b/PKGBUILD | 1 | ||||
-rw-r--r-- | test/lib/common.bash | 280 |
25 files changed, 495 insertions, 497 deletions
diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ffdaa55 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +[*.yml] +indent_style = space @@ -1,10 +1,11 @@ *~ -*.pyc -/config.local -test/packages/*/*.pkg.tar.?z \#*# .#* +*.pyc +/config.local +/.idea /coverage + yftime src* pkg* diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0b0519c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +sudo: required + +language: bash + +services: + - docker + +script: + - make test diff --git a/db-functions b/db-functions index 2629b85..2ef0a44 100644 --- a/db-functions +++ b/db-functions @@ -297,7 +297,7 @@ check_pkgfile() { in_array "${pkgarch}" "${ARCHES[@]}" 'any' || return 1 - if echo "${pkgfile##*/}" | grep "${pkgname}-${pkgver}-${pkgarch}" &>/dev/null; then + if echo "${pkgfile##*/}" | grep "^${pkgname}-${pkgver}-${pkgarch}" &>/dev/null; then return 0 else return 1 diff --git a/db-repo-add b/db-repo-add index c9e3a15..0fc69fe 100755 --- a/db-repo-add +++ b/db-repo-add @@ -30,8 +30,8 @@ done for tarch in "${tarches[@]}"; do for pkgfile in "${pkgfiles[@]}"; do - if [[ ! -f "${FTP_BASE}/${repo}/os/${arch}/${pkgfile##*/}" ]]; then - die "Package file %s not found in %s" "${pkgfile##*/}" "${FTP_BASE}/${repo}/os/${arch}/" + if [[ ! -f ${FTP_BASE}/${repo}/os/${tarch}/${pkgfile##*/} ]]; then + die "Package file %s not found in %s" "${pkgfile##*/}" "${FTP_BASE}/${repo}/os/${tarch}/" else msg "Adding %s to [%s]..." "$pkgfile" "$repo" fi diff --git a/test/Makefile b/test/Makefile index 9a6d18f..da09c4a 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,10 +1,10 @@ -PACKAGE_CACHE ?= $(or $(TMPDIR),/tmp)/dbscripts-build +export BUILDDIR ?= $(or $(TMPDIR),/tmp)/dbscripts-build test: - PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) PACKAGE_CACHE=$(PACKAGE_CACHE) bats cases + PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) bats cases test-coverage: - PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) PACKAGE_CACHE=$(PACKAGE_CACHE) kcov \ + PATH=$(CURDIR)/../:$(CURDIR)/../cron-jobs/:$(PATH) kcov \ --include-path=$(CURDIR)/../ \ --exclude-path=$(CURDIR)/../test,$(CURDIR)/../cron-jobs/makepkg.conf,$(CURDIR)/../config \ $(COVERAGE_DIR) \ diff --git a/test/cases/create-filelists.bats b/test/cases/create-filelists.bats deleted file mode 100755 index b7fa015..0000000 --- a/test/cases/create-filelists.bats +++ /dev/null @@ -1,95 +0,0 @@ -load ../lib/common - -@test "create simple file lists" { - local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch') - local pkgbase - local arch - - for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done - done - db-update - - for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/${pkgbase}" &>/dev/null; then - die "usr/bin/${pkgbase} not found in ${arch}/extra${FILESEXT}" - fi - done - done -} - -@test "create any file lists" { - local pkgs=('pkg-any-a' 'pkg-any-b') - local pkgbase - local arch - - for pkgbase in "${pkgs[@]}"; do - releasePackage extra "${pkgbase}" any - done - db-update - - for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/share/${pkgbase}/test" &>/dev/null; then - die "usr/share/${pkgbase}/test not found in ${arch}/extra${FILESEXT}" - fi - done - done -} - -@test "create split file lists" { - local pkgs=('pkg-split-a' 'pkg-split-b') - local pkg - local pkgbase - local pkgname - local pkgnames - local arch - - for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done - done - db-update - - for pkgbase in "${pkgs[@]}"; do - pkgnames=($(source "${TMP}/svn-packages-copy/${pkgbase}/trunk/PKGBUILD"; echo "${pkgname[@]}")) - for pkgname in "${pkgnames[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/${pkgname}" &>/dev/null; then - die "usr/bin/${pkgname} not found in ${arch}/extra${FILESEXT}" - fi - done - done - done -} - -@test "cleanup file lists" { - local pkgs=('pkg-simple-a' 'pkg-simple-b') - local pkgbase - local arch - - for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done - done - db-update - - for arch in "${ARCH_BUILD[@]}"; do - db-remove extra "${arch}" pkg-simple-a - done - - for arch in "${ARCH_BUILD[@]}"; do - if ! bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/pkg-simple-b" &>/dev/null; then - die "usr/bin/pkg-simple-b not found in ${arch}/extra${FILESEXT}" - fi - if bsdtar -xOf "${FTP_BASE}/extra/os/${arch}/extra${FILESEXT}" | grep "usr/bin/pkg-simple-a" &>/dev/null; then - die "usr/bin/pkg-simple-a still found in ${arch}/extra${FILESEXT}" - fi - done - -} diff --git a/test/cases/db-move.bats b/test/cases/db-move.bats index b23a5b7..8d5087f 100755 --- a/test/cases/db-move.bats +++ b/test/cases/db-move.bats @@ -6,21 +6,16 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage testing "${pkgbase}" "${arch}" - done + releasePackage testing "${pkgbase}" done db-update 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-1-1-${arch}.pkg.tar.xz" "${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" { @@ -29,9 +24,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage testing "${pkgbase}" "${arch}" - done + releasePackage testing "${pkgbase}" done db-update @@ -39,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}-1-1-${arch}.pkg.tar.xz" "${arch}" - done + checkRemovedPackage testing "${pkgbase}" + checkPackage extra "${pkgbase}" done } @@ -52,19 +43,15 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage testing "${pkgbase}" "${arch}" - done + releasePackage testing "${pkgbase}" done db-update 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-1:1-1-${arch}.pkg.tar.xz" "${arch}" - done + checkRemovedPackage testing pkg-simple-epoch + checkPackage extra pkg-simple-epoch } @test "move any packages" { @@ -72,15 +59,15 @@ load ../lib/common local pkgbase for pkgbase in "${pkgs[@]}"; do - releasePackage testing "${pkgbase}" any + releasePackage testing "${pkgbase}" done db-update db-move testing extra pkg-any-a - checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz - checkRemovedAnyPackage testing pkg-any-a - checkAnyPackage testing pkg-any-b-1-1-any.pkg.tar.xz + checkPackage extra pkg-any-a + checkRemovedPackage testing pkg-any-a + checkPackage testing pkg-any-b } @test "move split packages" { @@ -90,24 +77,12 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage testing "${pkgbase}" "${arch}" - done + releasePackage testing "${pkgbase}" done 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 - done - for arch in "${ARCH_BUILD[@]}"; do - for pkg in $(getPackageNamesFromPackageBase pkg-split-b); do - checkPackage testing "${pkg##*/}" "${arch}" - done - done - - checkRemovedAnyPackage testing pkg-split-a + 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 99b31f7..ff88237 100755 --- a/test/cases/db-remove.bats +++ b/test/cases/db-remove.bats @@ -6,9 +6,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -20,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 } @@ -32,9 +28,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -44,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 } @@ -55,7 +47,7 @@ load ../lib/common local pkgbase for pkgbase in "${pkgs[@]}"; do - releasePackage extra "${pkgbase}" any + releasePackage extra "${pkgbase}" done db-update @@ -65,6 +57,6 @@ load ../lib/common done for pkgbase in "${pkgs[@]}"; do - checkRemovedAnyPackage extra "${pkgbase}" + checkRemovedPackage extra "${pkgbase}" done } diff --git a/test/cases/db-repo-add.bats b/test/cases/db-repo-add.bats index aeab8ef..ef6cfe7 100755 --- a/test/cases/db-repo-add.bats +++ b/test/cases/db-repo-add.bats @@ -1,24 +1,41 @@ load ../lib/common +__movePackageToRepo() { + local repo=$1 + local pkgbase=$2 + local arch=$3 + local tarch + local tarches + + if [[ $arch == any ]]; then + tarches=(${ARCHES[@]}) + else + tarches=(${arch}) + fi + + # FIXME: pkgbase might not be part of the package filename + 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}/" + done +} + @test "add simple packages" { local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in "${pkgs[@]}"; do + releasePackage extra "$pkgbase" for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "$pkgbase" "$arch" - mv "${STAGING}"/extra/* "${FTP_BASE}/${PKGPOOL}/" - ln -s "${FTP_BASE}/${PKGPOOL}/${pkgbase}-1-1-${arch}.pkg.tar.xz" "${FTP_BASE}/extra/os/${arch}/" - ln -s "${FTP_BASE}/${PKGPOOL}/${pkgbase}-1-1-${arch}.pkg.tar.xz.sig" "${FTP_BASE}/extra/os/${arch}/" + __movePackageToRepo extra ${pkgbase} ${arch} db-repo-add extra "${arch}" "${pkgbase}-1-1-${arch}.pkg.tar.xz" done 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 } @@ -27,21 +44,36 @@ load ../lib/common local pkgbase local arch + for pkgbase in "${pkgs[@]}"; do + releasePackage extra "$pkgbase" + done + for arch in "${ARCH_BUILD[@]}"; do add_pkgs=() for pkgbase in "${pkgs[@]}"; do - releasePackage extra "$pkgbase" "$arch" - mv "${STAGING}"/extra/* "${FTP_BASE}/${PKGPOOL}/" - ln -s "${FTP_BASE}/${PKGPOOL}/${pkgbase}-1-1-${arch}.pkg.tar.xz" "${FTP_BASE}/extra/os/${arch}/" - ln -s "${FTP_BASE}/${PKGPOOL}/${pkgbase}-1-1-${arch}.pkg.tar.xz.sig" "${FTP_BASE}/extra/os/${arch}/" + __movePackageToRepo extra ${pkgbase} ${arch} add_pkgs+=("${pkgbase}-1-1-${arch}.pkg.tar.xz") done db-repo-add extra "${arch}" "${add_pkgs[@]}" 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 +} + +@test "add any packages" { + local pkgs=('pkg-any-a' 'pkg-any-b') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + __movePackageToRepo extra ${pkgbase} any + db-repo-add extra any ${pkgbase}-1-1-any.pkg.tar.xz + done + + for pkgbase in ${pkgs[@]}; do + checkPackageDB extra ${pkgbase} done } diff --git a/test/cases/db-repo-remove.bats b/test/cases/db-repo-remove.bats index 5f8ddc7..389c31e 100755 --- a/test/cases/db-repo-remove.bats +++ b/test/cases/db-repo-remove.bats @@ -6,9 +6,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -20,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 } @@ -32,9 +28,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -44,8 +38,25 @@ load ../lib/common done for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - checkRemovedPackageDB extra "${pkgbase}" "${arch}" - done + checkRemovedPackageDB extra "${pkgbase}" + done +} + +@test "remove any packages" { + local pkgs=('pkg-any-a' 'pkg-any-b') + local pkgbase + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + done + + db-update + + for pkgbase in ${pkgs[@]}; do + db-repo-remove extra any ${pkgbase} + done + + for pkgbase in ${pkgs[@]}; do + checkRemovedPackageDB extra ${pkgbase} done } diff --git a/test/cases/db-update.bats b/test/cases/db-update.bats index f0bb85b..56e364b 100755 --- a/test/cases/db-update.bats +++ b/test/cases/db-update.bats @@ -6,30 +6,26 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done 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-simple-a' 'i686' + releasePackage extra 'pkg-single-arch' db-update - checkPackage extra 'pkg-simple-a-1-1-i686.pkg.tar.xz' 'i686' + checkPackage extra 'pkg-single-arch' } @test "add single epoch package" { - releasePackage extra 'pkg-simple-epoch' 'i686' + releasePackage extra 'pkg-single-epoch' db-update - checkPackage extra 'pkg-simple-epoch-1:1-1-i686.pkg.tar.xz' 'i686' + checkPackage extra 'pkg-single-epoch' } @test "add any packages" { @@ -37,13 +33,13 @@ load ../lib/common local pkgbase for pkgbase in "${pkgs[@]}"; do - releasePackage extra "${pkgbase}" any + releasePackage extra "${pkgbase}" done db-update for pkgbase in "${pkgs[@]}"; do - checkAnyPackage extra "${pkgbase}-1-1-any.pkg.tar.xz" + checkPackage extra "${pkgbase}" done } @@ -54,140 +50,186 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done 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 } @test "update any package" { - releasePackage extra pkg-any-a any + releasePackage extra pkg-any-a db-update - pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null - sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD - svn commit -q -m"update pkg to pkgrel=2" >/dev/null - __buildPackage any - popd >/dev/null + updatePackage pkg-any-a - releasePackage extra pkg-any-a any + releasePackage extra pkg-any-a db-update - checkAnyPackage 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" { - releasePackage extra pkg-any-a any + releasePackage extra pkg-any-a - pushd "${TMP}/svn-packages-copy/pkg-any-a/trunk/" >/dev/null - sed 's/pkgrel=1/pkgrel=2/g' -i PKGBUILD - svn commit -q -m"update pkg to pkgrel=2" >/dev/null - __buildPackage any - popd >/dev/null + updatePackage pkg-any-a - releasePackage testing pkg-any-a any + releasePackage testing pkg-any-a db-update - checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz any - checkAnyPackage 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 any + releasePackage extra pkg-any-a db-update - checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz any + checkPackage extra pkg-any-a - releasePackage extra pkg-any-a any - ! db-update >/dev/null 2>&1 + releasePackage extra pkg-any-a + run db-update + [ "$status" -ne 0 ] } @test "update same any package to different repositories" { - releasePackage extra pkg-any-a any + releasePackage extra pkg-any-a db-update - checkAnyPackage extra pkg-any-a-1-1-any.pkg.tar.xz any + checkPackage extra pkg-any-a - releasePackage testing pkg-any-a any - ! db-update >/dev/null 2>&1 + releasePackage testing pkg-any-a + run db-update + [ "$status" -ne 0 ] - local arch - for arch in "${ARCH_BUILD[@]}"; do - if [ -r "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" ]; then - ! bsdtar -xf "${FTP_BASE}/testing/os/${arch}/testing${DBEXT%.tar.*}" -O | grep "${pkgbase}" &>/dev/null - fi - done + checkRemovedPackageDB testing pkg-any-a } - @test "add incomplete split package" { skip # commented out with "This is fucking obnoxious" -- abslibre is broken local repo='extra' local pkgbase='pkg-split-a' local arch - for arch in "${ARCH_BUILD[@]}"; do - releasePackage "${repo}" "${pkgbase}" "${arch}" - done + releasePackage "${repo}" "${pkgbase}" # remove a split package to make db-update fail rm "${STAGING}/extra/${pkgbase}1-"* - ! db-update >/dev/null 2>&1 + run db-update + [ "$status" -ne 0 ] - for arch in "${ARCH_BUILD[@]}"; do - if [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" ]; then - ! bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${DBEXT%.tar.*}" -O | grep "${pkgbase}" &>/dev/null - fi - done + checkRemovedPackageDB ${repo} ${pkgbase} } @test "unknown repo" { mkdir "${STAGING}/unknown/" - releasePackage extra 'pkg-simple-a' 'i686' - releasePackage unknown 'pkg-simple-b' 'i686' + releasePackage extra 'pkg-any-a' + releasePackage unknown 'pkg-any-b' db-update - checkPackage extra 'pkg-simple-a-1-1-i686.pkg.tar.xz' 'i686' + checkPackage extra 'pkg-any-a' [ ! -e "${FTP_BASE}/unknown" ] rm -rf "${STAGING}/unknown/" } @test "add unsigned package fails" { - releasePackage extra 'pkg-simple-a' 'i686' + releasePackage extra 'pkg-any-a' rm "${STAGING}"/extra/*.sig - ! db-update >/dev/null 2>&1 + run db-update + [ "$status" -ne 0 ] - checkRemovedPackage extra pkg-simple-a-1-1-i686.pkg.tar.xz i686 + checkRemovedPackageDB extra pkg-any-a } @test "add invalid signed package fails" { local p - releasePackage extra 'pkg-simple-a' 'i686' + releasePackage extra 'pkg-any-a' for p in "${STAGING}"/extra/*${PKGEXT}; do unxz "$p" xz -0 "${p%%.xz}" done - ! db-update >/dev/null 2>&1 + run db-update + [ "$status" -ne 0 ] - checkRemovedPackage extra pkg-simple-a-1-1-i686.pkg.tar.xz i686 + checkRemovedPackageDB extra pkg-any-a } @test "add broken signature fails" { local s - releasePackage extra 'pkg-simple-a' 'i686' + releasePackage extra 'pkg-any-a' for s in "${STAGING}"/extra/*.sig; do echo 0 > "$s" done - ! db-update >/dev/null 2>&1 + run db-update + [ "$status" -ne 0 ] + + checkRemovedPackageDB extra pkg-any-a +} + +@test "add package with inconsistent version fails" { + local p + releasePackage extra 'pkg-any-a' + + for p in "${STAGING}"/extra/*; do + mv "${p}" "${p/pkg-any-a-1/pkg-any-a-2}" + done + + run db-update + [ "$status" -ne 0 ] + checkRemovedPackageDB extra 'pkg-any-a' +} + +@test "add package with inconsistent name fails" { + local p + releasePackage extra 'pkg-any-a' + + for p in "${STAGING}"/extra/*; do + mv "${p}" "${p/pkg-/foo-pkg-}" + done + + run db-update + [ "$status" -ne 0 ] + checkRemovedPackage extra 'pkg-any-a' +} + +@test "add package with inconsistent pkgbuild fails" { + skip # abslibre is broken + releasePackage extra 'pkg-any-a' + + updateRepoPKGBUILD 'pkg-any-a' extra any + + run db-update + [ "$status" -ne 0 ] + checkRemovedPackageDB extra 'pkg-any-a' +} + +@test "add package with insufficient permissions fails" { + releasePackage core 'pkg-any-a' + releasePackage extra 'pkg-any-b' + + chmod -xwr ${FTP_BASE}/core/os/i686 + run db-update + [ "$status" -ne 0 ] + chmod +xwr ${FTP_BASE}/core/os/i686 + + checkRemovedPackageDB core 'pkg-any-a' + checkRemovedPackageDB extra 'pkg-any-b' +} + +@test "package has to be a regular file" { + local p + local target=$(mktemp -d) + + releasePackage extra 'pkg-simple-a' + + for p in "${STAGING}"/extra/*i686*; do + mv "${p}" "${target}" + ln -s "${target}/${p##*/}" "${p}" + done - checkRemovedPackage extra pkg-simple-a-1-1-i686.pkg.tar.xz i686 + run db-update + [ "$status" -ne 0 ] + checkRemovedPackageDB extra "pkg-simple-a" } diff --git a/test/cases/ftpdir-cleanup.bats b/test/cases/ftpdir-cleanup.bats index 220418b..00fbe94 100755 --- a/test/cases/ftpdir-cleanup.bats +++ b/test/cases/ftpdir-cleanup.bats @@ -1,14 +1,30 @@ load ../lib/common +__getPackageNamesFromPackageBase() { + local pkgbase=$1 + + (. "fixtures/${pkgbase}/PKGBUILD"; echo ${pkgname[@]}) +} + +__checkRepoRemovedPackage() { + local repo=$1 + local pkgbase=$2 + local repoarch=$3 + local pkgname + + 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" { local pkgs=('pkg-simple-a' 'pkg-simple-b') local pkgbase local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -17,17 +33,14 @@ load ../lib/common db-remove extra "${arch}" pkg-simple-a done - ftpdir-cleanup >/dev/null + ftpdir-cleanup + checkRemovedPackage extra 'pkg-simple-a' for arch in "${ARCH_BUILD[@]}"; do - local pkg1="pkg-simple-a-1-1-${arch}.pkg.tar.xz" - checkRemovedPackage extra 'pkg-simple-a' "${arch}" - [ ! -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] - [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${pkg1}" ] - - local pkg2="pkg-simple-b-1-1-${arch}.pkg.tar.xz" - checkPackage extra "${pkg2}" "${arch}" + __checkRepoRemovedPackage extra 'pkg-simple-a' ${arch} done + + checkPackage extra pkg-simple-b } @test "cleanup epoch packages" { @@ -36,9 +49,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -47,13 +58,11 @@ load ../lib/common db-remove extra "${arch}" pkg-simple-epoch done - ftpdir-cleanup >/dev/null + ftpdir-cleanup + checkRemovedPackage extra 'pkg-simple-epoch' for arch in "${ARCH_BUILD[@]}"; do - local pkg1="pkg-simple-epoch-1:1-1-${arch}.pkg.tar.xz" - checkRemovedPackage extra 'pkg-simple-epoch' "${arch}" - [ ! -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] - [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${pkg1}" ] + __checkRepoRemovedPackage extra 'pkg-simple-epoch' ${arch} done } @@ -63,20 +72,20 @@ load ../lib/common local arch='any' for pkgbase in "${pkgs[@]}"; do - releasePackage extra "${pkgbase}" any + releasePackage extra "${pkgbase}" done db-update db-remove extra any pkg-any-a - ftpdir-cleanup >/dev/null + ftpdir-cleanup local pkg1='pkg-any-a-1-1-any.pkg.tar.xz' - checkRemovedAnyPackage extra 'pkg-any-a' - [ ! -f "${FTP_BASE}/${PKGPOOL}/${pkg1}" ] - [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${pkg1}" ] + 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" - checkAnyPackage extra "${pkg2}" + checkPackage extra pkg-any-b } @test "cleanup split packages" { @@ -86,9 +95,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update @@ -97,17 +104,43 @@ load ../lib/common db-remove extra "${arch}" "${pkgs[0]}" done - ftpdir-cleanup >/dev/null + ftpdir-cleanup for arch in "${ARCH_BUILD[@]}"; do - for pkg in $(getPackageNamesFromPackageBase "${pkgs[0]}"); do - checkRemovedPackage extra "${pkgs[0]}" "${arch}" - [ ! -f "${FTP_BASE}/${PKGPOOL}/${pkg}" ] - [ ! -f "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] - done + __checkRepoRemovedPackage extra ${pkgs[0]} ${arch} + done - for pkg in $(getPackageNamesFromPackageBase "${pkgs[1]}"); do - checkPackage extra "${pkg##*/}" "${arch}" + checkRemovedPackage extra "${pkgs[0]}" + checkPackage extra "${pkgs[1]}" +} + +@test "cleanup old packages" { + local pkgs=('pkg-simple-a' 'pkg-simple-b') + local pkgbase + local arch + + for pkgbase in ${pkgs[@]}; do + releasePackage extra ${pkgbase} + done + + db-update + + for pkgbase in ${pkgs[@]}; do + for arch in "${ARCH_BUILD[@]}"; do + db-remove extra ${arch} ${pkgbase} done done + + ftpdir-cleanup + + local pkgfilea="pkg-simple-a-1-1-${arch}.pkg.tar.xz" + local pkgfileb="pkg-simple-b-1-1-${arch}.pkg.tar.xz" + for arch in "${ARCH_BUILD[@]}"; do + touch -d "-$(expr ${CLEANUP_KEEP} + 1)days" ${CLEANUP_DESTDIR}/${pkgfilea}{,.sig} + done + + ftpdir-cleanup + + [ ! -f ${CLEANUP_DESTDIR}/${pkgfilea} ] + [ -f ${CLEANUP_DESTDIR}/${pkgfileb} ] } diff --git a/test/cases/packages.bats b/test/cases/packages.bats deleted file mode 100755 index 3e0246b..0000000 --- a/test/cases/packages.bats +++ /dev/null @@ -1,45 +0,0 @@ -load ../lib/common - -@test "packages" { - local result - local pkg - local pkgbase - local pkgarchs - local pkgarch - local tmp - tmp=$(mktemp -d) - - # FIXME: Evaluate if this test is sane and even needed - - cp -rL fixtures/* "${tmp}" - - for pkgbase in "${tmp}"/*; do - pushd "${pkgbase}" - # FIXME: Is overriding IFS a bats bug? - IFS=' ' - pkgarchs=($(. PKGBUILD; echo ${arch[@]})) - for pkgarch in "${pkgarchs[@]}"; do - echo "Building ${pkgbase} on ${pkgarch}" - run namcap -e pkgnameindesc,tags PKGBUILD - [ -z "$output" ] - - __buildPackage "$pkgarch" - - if [[ $pkgarch != "$ARCH_HOST" && $pkgarch != any ]]; then - # Cross-arch namcap is silly: - # - # W: Referenced library 'libc.so.6' is an uninstalled dependency - # W: Dependency included and not needed ('glibc')ยป - continue - fi - for pkg in *-${pkgarch}${PKGEXT}; do - msg 'run namcap -e pkgnameindesc %q' "${pkg}" - run namcap -e pkgnameindesc "${pkg}" - printf '%s\n' "$output" | sed 's/^/> /' - cp "$pkg" -t /tmp -f - [ -z "$output" ] - done - done - popd - done -} diff --git a/test/cases/sourceballs.bats b/test/cases/sourceballs.bats index cf80658..f5e41a8 100755 --- a/test/cases/sourceballs.bats +++ b/test/cases/sourceballs.bats @@ -1,20 +1,28 @@ load ../lib/common +__checkSourcePackage() { + local pkgbase=$1 + [ -r ${FTP_BASE}/${SRCPOOL}/${pkgbase}-*${SRCEXT} ] +} + +__checkRemovedSourcePackage() { + local pkgbase=$1 + [ ! -r ${FTP_BASE}/${SRCPOOL}/${pkgbase}-*${SRCEXT} ] +} + @test "sourceballs" { local pkgs=('pkg-simple-a' 'pkg-simple-b' 'pkg-simple-epoch') local pkgbase local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update sourceballs for pkgbase in "${pkgs[@]}"; do - [ -r "${FTP_BASE}/${SRCPOOL}/${pkgbase}"-*"${SRCEXT}" ] + __checkSourcePackage ${pkgbase} done } @@ -23,13 +31,13 @@ load ../lib/common local pkgbase for pkgbase in "${pkgs[@]}"; do - releasePackage extra "${pkgbase}" any + releasePackage extra "${pkgbase}" done db-update sourceballs for pkgbase in "${pkgs[@]}"; do - [ -r "${FTP_BASE}/${SRCPOOL}/${pkgbase}"-*"${SRCEXT}" ] + __checkSourcePackage ${pkgbase} done } @@ -40,16 +48,14 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update sourceballs for pkgbase in "${pkgs[@]}"; do - [ -r "${FTP_BASE}/${SRCPOOL}/${pkgbase}"-*"${SRCEXT}" ] + __checkSourcePackage ${pkgbase} done } @@ -59,9 +65,7 @@ load ../lib/common local arch for pkgbase in "${pkgs[@]}"; do - for arch in "${ARCH_BUILD[@]}"; do - releasePackage extra "${pkgbase}" "${arch}" - done + releasePackage extra "${pkgbase}" done db-update sourceballs @@ -71,6 +75,6 @@ load ../lib/common done sourceballs - [ ! -r "${FTP_BASE}/${SRCPOOL}/pkg-simple-a"-*"${SRCEXT}" ] - [ -r "${FTP_BASE}/${SRCPOOL}/pkg-simple-b"-*"${SRCEXT}" ] + __checkRemovedSourcePackage pkg-simple-a + __checkSourcePackage pkg-simple-b } diff --git a/test/fixtures/pkg-any-a/PKGBUILD b/test/fixtures/pkg-any-a/PKGBUILD index cd5d66f..bf8f39c 100644 --- a/test/fixtures/pkg-any-a/PKGBUILD +++ b/test/fixtures/pkg-any-a/PKGBUILD @@ -5,6 +5,7 @@ pkgdesc="A package called ${pkgname}" arch=('any') url='http://www.archlinux.org/' license=('GPL') +options=(!strip) package() { install -d -m755 "${pkgdir}"/usr/share/${pkgname} diff --git a/test/fixtures/pkg-any-b/PKGBUILD b/test/fixtures/pkg-any-b/PKGBUILD index 90794fc..295cc77 100644 --- a/test/fixtures/pkg-any-b/PKGBUILD +++ b/test/fixtures/pkg-any-b/PKGBUILD @@ -5,6 +5,7 @@ pkgdesc="A package called ${pkgname}" arch=('any') url='http://www.archlinux.org/' license=('GPL') +options=(!strip) package() { install -d -m755 "${pkgdir}"/usr/share/${pkgname} diff --git a/test/fixtures/pkg-simple-a/PKGBUILD b/test/fixtures/pkg-simple-a/PKGBUILD index 9b4478e..d3fcbbb 100644 --- a/test/fixtures/pkg-simple-a/PKGBUILD +++ b/test/fixtures/pkg-simple-a/PKGBUILD @@ -6,6 +6,7 @@ arch=('i686' 'x86_64') url='http://www.archlinux.org/' license=('GPL') depends=('glibc') +options=(!strip) makedepends=('gcc') source=('Makefile' 'test.c') md5sums=('c6cb8dcc86253355fed559416d0c8dcf' diff --git a/test/fixtures/pkg-simple-b/PKGBUILD b/test/fixtures/pkg-simple-b/PKGBUILD index 4a9e58d..fb44762 100644 --- a/test/fixtures/pkg-simple-b/PKGBUILD +++ b/test/fixtures/pkg-simple-b/PKGBUILD @@ -6,6 +6,7 @@ arch=('i686' 'x86_64') url='http://www.archlinux.org/' license=('GPL') depends=('glibc') +options=(!strip) makedepends=('gcc') source=('Makefile' 'test.c') md5sums=('c6cb8dcc86253355fed559416d0c8dcf' diff --git a/test/fixtures/pkg-simple-epoch/PKGBUILD b/test/fixtures/pkg-simple-epoch/PKGBUILD index 0761b32..ef1261f 100644 --- a/test/fixtures/pkg-simple-epoch/PKGBUILD +++ b/test/fixtures/pkg-simple-epoch/PKGBUILD @@ -7,6 +7,7 @@ arch=('i686' 'x86_64') url='http://www.archlinux.org/' license=('GPL') depends=('glibc') +options=(!strip) makedepends=('gcc') source=('Makefile' 'test.c') md5sums=('c6cb8dcc86253355fed559416d0c8dcf' diff --git a/test/fixtures/pkg-single-arch/PKGBUILD b/test/fixtures/pkg-single-arch/PKGBUILD new file mode 100644 index 0000000..de5dbc2 --- /dev/null +++ b/test/fixtures/pkg-single-arch/PKGBUILD @@ -0,0 +1,13 @@ +pkgname=pkg-single-arch +pkgver=1 +pkgrel=1 +pkgdesc="A package called ${pkgname}" +arch=('x86_64') +url='http://www.archlinux.org/' +license=('GPL') +depends=('glibc') +options=(!strip) + +package() { + install -D -m755 /bin/true ${pkgdir}/usr/bin/${pkgname} +} diff --git a/test/fixtures/pkg-single-epoch/PKGBUILD b/test/fixtures/pkg-single-epoch/PKGBUILD new file mode 100644 index 0000000..95898ac --- /dev/null +++ b/test/fixtures/pkg-single-epoch/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=pkg-single-epoch +pkgver=1 +pkgrel=1 +epoch=1 +pkgdesc="A package called ${pkgname}" +arch=('x86_64') +url='http://www.archlinux.org/' +license=('GPL') +depends=('glibc') +options=(!strip) + +package() { + install -D -m755 /bin/true ${pkgdir}/usr/bin/${pkgname} +} diff --git a/test/fixtures/pkg-split-a/PKGBUILD b/test/fixtures/pkg-split-a/PKGBUILD index f7a0576..06b6148 100644 --- a/test/fixtures/pkg-split-a/PKGBUILD +++ b/test/fixtures/pkg-split-a/PKGBUILD @@ -7,6 +7,7 @@ arch=('i686' 'x86_64') url='http://www.archlinux.org/' license=('GPL') depends=('glibc') +options=(!strip) makedepends=('gcc') source=('Makefile' 'test.c') md5sums=('c6cb8dcc86253355fed559416d0c8dcf' diff --git a/test/fixtures/pkg-split-b/PKGBUILD b/test/fixtures/pkg-split-b/PKGBUILD index 3bd635c..7d1f0d6 100644 --- a/test/fixtures/pkg-split-b/PKGBUILD +++ b/test/fixtures/pkg-split-b/PKGBUILD @@ -8,6 +8,7 @@ url='http://www.archlinux.org/' license=('GPL') depends=('glibc') +options=(!strip) makedepends=('gcc') source=('Makefile' 'test.c') md5sums=('c6cb8dcc86253355fed559416d0c8dcf' diff --git a/test/lib/common.bash b/test/lib/common.bash index aeed8a0..73b0c54 100644 --- a/test/lib/common.bash +++ b/test/lib/common.bash @@ -3,9 +3,12 @@ . /usr/share/makepkg/util.sh . "$(dirname "${BASH_SOURCE[0]}")"/../test.conf -die() { - echo "$*" >&2 - exit 1 +__updatePKGBUILD() { + local pkgrel + + pkgrel=$(. PKGBUILD; expr ${pkgrel} + 1) + sed "s/pkgrel=.*/pkgrel=${pkgrel}/" -i PKGBUILD + svn commit -q -m"update pkg to pkgrel=${pkgrel}" } __getCheckSum() { @@ -15,37 +18,44 @@ __getCheckSum() { } __buildPackage() { - local arch=$1 + local pkgdest=${1:-.} local p - local checkSum + local cache + local pkgarches + local tarch local pkgnames - if [[ -n ${PACKAGE_CACHE} ]]; then - checkSum=$(__getCheckSum PKGBUILD) - # TODO: Be more specific - if cp -av ${PACKAGE_CACHE}/${checkSum}/*-${arch}${PKGEXT}{,.sig} .; then - return 0 - fi + if [[ -n ${BUILDDIR} ]]; then + cache=${BUILDDIR}/$(__getCheckSum PKGBUILD) + if [[ -d ${cache} ]]; then + cp -Lv ${cache}/*${PKGEXT}{,.sig} ${pkgdest} + return 0 + else + mkdir -p ${cache} + fi fi - if [ "${arch}" == 'any' ]; then - sudo librechroot -n "dbscripts@${arch}" make - else - sudo librechroot -n "dbscripts@${arch}" -A "$arch" make - fi - sudo libremakepkg -n "dbscripts@${arch}" + pkgarches=($(. PKGBUILD; echo ${arch[@]})) + for tarch in ${pkgarches[@]}; do + if [ "${tarch}" == 'any' ]; then + sudo librechroot -n "dbscripts@${tarch}" make + else + sudo librechroot -n "dbscripts@${tarch}" -A "$tarch" make + fi + sudo PKGDEST="${pkgdest}" libremakepkg -n "dbscripts@${tarch}" + done pkgnames=($(. PKGBUILD; print_all_package_names)) + pushd ${pkgdest} for p in ${pkgnames[@]/%/${PKGEXT}}; do - [[ ${p} = *-${arch}${PKGEXT} ]] || continue # Manually sign packages as "makepkg --sign" is buggy gpg -v --detach-sign --no-armor --use-agent ${p} - if [[ -n ${PACKAGE_CACHE} ]]; then - mkdir -p ${PACKAGE_CACHE}/${checkSum} - cp -Lv ${p}{,.sig} ${PACKAGE_CACHE}/${checkSum}/ + if [[ -n ${BUILDDIR} ]]; then + cp -Lv ${p}{,.sig} ${cache}/ fi done + popd } setup() { @@ -65,6 +75,7 @@ setup() { SRCPOOL='sources/packages' TESTING_REPO='testing' STABLE_REPOS=('core' 'extra') + ARCHES=(${ARCH_BUILD[*]@Q}) CLEANUP_DESTDIR="${TMP}/package-cleanup" SOURCE_CLEANUP_DESTDIR="${TMP}/source-cleanup" STAGING="${TMP}/staging" @@ -73,6 +84,7 @@ setup() { SOURCE_CLEANUP_DRYRUN=false eot . config + PKGEXT=".pkg.tar.xz" mkdir -p "${TMP}/"{ftp,tmp,staging,{package,source}-cleanup,svn-packages-{copy,repo}} @@ -95,7 +107,7 @@ eot SVNREPOS=( "svn-packages-copy file://${TMP}/svn-packages-repo core extra testing" ) - ARCHES=(${ARCH_BUILD[*]}) + ARCHES=(${ARCH_BUILD[*]@Q}) eot echo 'BUILDSYSTEM=abs' > "$XDG_CONFIG_HOME/xbs/xbs.conf" } @@ -104,31 +116,11 @@ teardown() { rm -rf "${TMP}" } -getpkgbase() { - 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 -} - releasePackage() { local repo=$1 local pkgbase=$2 - local arch=$3 - local a - local p - local pkgver - local pkgname + local pkgarches + local tarch if [ ! -d "${TMP}/svn-packages-copy/${pkgbase}/trunk" ]; then mkdir -p "${TMP}/svn-packages-copy/${pkgbase}"/{trunk,repos} @@ -137,142 +129,148 @@ releasePackage() { svn commit -q -m"initial commit of ${pkgbase}" "${TMP}/svn-packages-copy" fi - pushd "${TMP}/svn-packages-copy/${pkgbase}/trunk/" >/dev/null - __buildPackage ${arch} - xbs release-client "${repo}" "${arch}" - pkgver=$(. PKGBUILD; get_full_version) - pkgname=($(. PKGBUILD; echo "${pkgname[@]}")) - for p in "${pkgname[@]}"; do - cp "${p}-${pkgver}-${arch}"${PKGEXT}{,.sig} "${STAGING}/${repo}/" + pushd "${TMP}/svn-packages-copy/${pkgbase}/trunk/" + + __buildPackage "${STAGING}"/${repo} + pkgarches=($(. PKGBUILD; echo ${arch[@]})) + for tarch in "${pkgarches[@]}"; do + xbs release-client "${repo}" "${tarch}" done - popd >/dev/null + popd } -getPackageNamesFromPackageBase() { +updatePackage() { local pkgbase=$1 - $(. "packages/${pkgbase}/PKGBUILD"; echo ${pkgname[@]}) -} - -checkAnyPackageDB() { - local repo=$1 - local pkg=$2 - local arch - local db - - [ -r "${FTP_BASE}/${PKGPOOL}/${pkg}" ] - [ -r "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ] - - for arch in "${ARCH_BUILD[@]}"; do - [ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] - [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}")" ] - - [ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig" ] - [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}.sig")" ] - - for db in "${DBEXT}" "${FILESEXT}"; do - if [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ]; then - bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkg}" &>/dev/null - fi - done - done - [ ! -r "${STAGING}/${repo}/${pkg}" ] - [ ! -r "${STAGING}/${repo}/${pkg}".sig ] + pushd "${TMP}/svn-packages-copy/${pkgbase}/trunk/" + __updatePKGBUILD + __buildPackage + popd } -checkAnyPackage() { - local repo=$1 - local pkg=$2 - - checkAnyPackageDB "$repo" "$pkg" +updateRepoPKGBUILD() { + local pkgbase=$1 + local repo=$2 + local arch=$3 - local pkgbase=$(getpkgbase "${FTP_BASE}/${PKGPOOL}/${pkg}") - svn up -q "${TMP}/svn-packages-copy/${pkgbase}" - [ -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-any" ] + pushd "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-${arch}/" + __updatePKGBUILD + popd } checkPackageDB() { local repo=$1 - local pkg=$2 - local arch=$3 + local pkgbase=$2 local db + local pkgarch + local repoarch + local repoarches + local pkgfile + local pkgname - [ -r "${FTP_BASE}/${PKGPOOL}/${pkg}" ] - [ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}" ] - [ ! -r "${STAGING}/${repo}/${pkg}" ] - - [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}")" ] - - [ -r "${FTP_BASE}/${PKGPOOL}/${pkg}.sig" ] - [ -L "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig" ] - [ ! -r "${STAGING}/${repo}/${pkg}.sig" ] - - [ "$(readlink -e "${FTP_BASE}/${repo}/os/${arch}/${pkg}.sig")" == "$(readlink -e "${FTP_BASE}/${PKGPOOL}/${pkg}.sig")" ] + # 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 + repoarches=("${pkgarches[@]}") + fi - for db in "${DBEXT}" "${FILESEXT}"; do - if [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ]; then - bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkg}" &>/dev/null - fi + 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=$(getpkgbase "${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 -checkRemovedPackageDB() { - local repo=$1 - local pkgbase=$2 - local arch=$3 - local db - - for db in "${DBEXT}" "${FILESEXT}"; do - if [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ]; then - ! bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkgbase}" &>/dev/null - fi - done + 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" } -checkRemovedAnyPackageDB() { +checkRemovedPackageDB() { local repo=$1 local pkgbase=$2 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 [[ ${pkgarches[@]} == any ]]; then + tarches=(${ARCHES[@]}) + else + tarches=(${pkgarches[@]}) + fi for db in "${DBEXT}" "${FILESEXT}"; do - for arch in "${ARCH_BUILD[@]}"; do - if [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ]; then - ! bsdtar -xf "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkgbase}" &>/dev/null + for tarch in "${tarches[@]}"; do + if [ -r "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" ]; then + for pkgname in ${pkgnames[@]}; do + ! bsdtar -xf "${FTP_BASE}/${repo}/os/${tarch}/${repo}${db%.tar.*}" -O | grep "${pkgname}" &>/dev/null + done fi done done } - -checkRemovedAnyPackage() { - local repo=$1 - local pkgbase=$2 - - checkRemovedAnyPackageDB "$repo" "$pkgbase" - - svn up -q "${TMP}/svn-packages-copy/${pkgbase}" - [ ! -d "${TMP}/svn-packages-copy/${pkgbase}/repos/${repo}-any" ] -} |