diff options
author | Gabriel Souza Franco <gabrielfrancosouza@gmail.com> | 2016-01-26 00:53:58 -0200 |
---|---|---|
committer | Gabriel Souza Franco <gabrielfrancosouza@gmail.com> | 2016-02-17 19:17:31 -0200 |
commit | eeaef122d06632579f3a1377c00d06675769223c (patch) | |
tree | bd14d2153fce12dc89c2819960f6d524d64b50bc | |
parent | cef32da5748d3c9abf1f21d30c32e8bff1f65007 (diff) |
Remove deleted split packages in db-move
Signed-off-by: Gabriel Souza Franco <gabrielfrancosouza@gmail.com>
-rw-r--r-- | db-functions | 1 | ||||
-rwxr-xr-x | db-move | 53 | ||||
-rwxr-xr-x | test/test.d/db-move.sh | 30 |
3 files changed, 81 insertions, 3 deletions
diff --git a/db-functions b/db-functions index 0b87fc1..8bdebcd 100644 --- a/db-functions +++ b/db-functions @@ -703,7 +703,6 @@ arch_db_move() { local ftppath_from="${FTP_BASE}/${repo_from}/os" - # TODO: detect if a pkgname has been removed from a split package and clean up the repo for pkgname in "${pkgnames[@]}"; do pkgentry=$(pkgentry_from_db "$repo_from" "$arch" "$pkgname") pkgs=($(getpkgfiles "$ftppath_from/$arch/$pkgentry"*${PKGEXT})) @@ -13,8 +13,8 @@ repo_from="${args[0]}" repo_to="${args[1]}" arch="${args[2]}" pkgnames=("${args[@]:3}") -ftppath_from="${FTP_BASE}/${repo_from}/os/" -ftppath_to="${FTP_BASE}/${repo_to}/os/" +ftppath_from="${FTP_BASE}/${repo_from}/os" +ftppath_to="${FTP_BASE}/${repo_to}/os" if ! check_repo_permission $repo_to || ! check_repo_permission $repo_from; then die "You don't have permission to move packages from ${repo_from} to ${repo_to}" @@ -37,13 +37,62 @@ done msg "Moving packages from [${repo_from}] to [${repo_to}]..." +declare -a pkgs_to_remove for arch in ${arches[@]}; do for pkgname in "${pkgnames[@]}"; do msg2 "$arch\t$pkgname" + + pkgver_from=$(pkgver_from_db "${repo_from}" "${arch}" "${pkgname}") + pkgver_to=$(pkgver_from_db "${repo_to}" "${arch}" "${pkgname}") + + pkg=$(echo "$ftppath_from/${arch}/$pkgname-$pkgver_from"*${PKGEXT}) + + if [ ! -f "${pkg}" ]; then + die "Package ${pkgname} not found in repo" + fi + + pkgbase=$(getpkgbase "${pkg}") + pkgarch=$(getpkgarch "${pkg}") + arch_db_move "${repo_from}" "${repo_to}" "${arch}" "${pkgname}" + + # package isn't in target repo yet + if [ -z "${pkgver_to}" ]; then + continue + fi + + get_pkgbuild ${repo_from} ${pkgbase} ${pkgver_from} || die "PKGBUILD not found for ${pkgbase}-${pkgver_from}" + get_pkgbuild ${repo_to} ${pkgbase} ${pkgver_to} || die "PKGBUILD not found for ${pkgbase}-${pkgver_to}" + + pkgnames_from=($(. "${WORKDIR}/pkgbuilds/${repo_from}/${pkgbase}-${pkgver_from}"; echo ${pkgname[@]})) + pkgnames_to=($(. "${WORKDIR}/pkgbuilds/${repo_to}/${pkgbase}-${pkgver_to}"; echo ${pkgname[@]})) + + # list pkgnames_from twice to make them non-unique + for pkg in $(uniq_array ${pkgnames_from[@]} ${pkgnames_from[@]} ${pkgnames_to[@]}); do + pkgarches=($(. "${WORKDIR}/pkgbuilds/${repo_to}/${pkgbase}-${pkgver_to}"; get_arch ${pkg})) + if [[ ${pkgarches[0]} == "any" ]]; then + msg2 "any\t${pkg}\t[removal]" + for _arch in ${ARCHES[@]}; do + pkgs_to_remove+=(${pkg}/${_arch}) + done + else + msg2 "${arch}\t${pkg}\t[removal]" + pkgs_to_remove+=(${pkg}/${arch}) + fi + done done done +if [[ ${#pkgs_to_remove[@]} > 0 ]]; then + pkgs_to_remove=($(dedup_array ${pkgs_to_remove[@]})) + + for pkgname in ${pkgs_to_remove[@]}; do + pkgarch=${pkgname#*/} + pkgname=${pkgname%/*} + arch_db_remove "${repo_to}" "${pkgarch}" "${pkgname}" + done +fi + arch_history_commit "db-move: $repo_from -> $repo_to: ${pkgnames[*]}" for pkgarch in ${arches[@]}; do diff --git a/test/test.d/db-move.sh b/test/test.d/db-move.sh index 528abe3..45e2803 100755 --- a/test/test.d/db-move.sh +++ b/test/test.d/db-move.sh @@ -119,4 +119,34 @@ testMoveSplitPackages() { checkRemovedAnyPackage testing pkg-split-a } +testMoveChangedSplitPackages() { + local arches=('i686' 'x86_64') + local pkgbase='pkg-split-a' + local pkg + local arch + + for arch in ${arches[@]}; do + releasePackage extra ${pkgbase} ${arch} + done + + "${curdir}"/../../db-update + + pushd "${TMP}/svn-packages-copy/pkg-split-a/trunk/" >/dev/null + sed "s/pkgrel=1/pkgrel=2/g;s/pkgname=('pkg-split-a1' 'pkg-split-a2')/pkgname='pkg-split-a1'/g" -i PKGBUILD + arch_svn commit -q -m"remove pkg-split-a2; pkgrel=2" >/dev/null + popd >/dev/null + + for arch in ${arches[@]}; do + releasePackage testing ${pkgbase} ${arch} + done + + "${curdir}"/../../db-update + "${curdir}"/../../db-move testing extra all pkg-split-a1 + + for arch in ${arches[@]}; do + checkPackage extra ${pkgbase}1-1-2-${arch}.pkg.tar.xz ${arch} + checkRemovedPackage extra ${pkgbase}2-1-2-${arch}.pkg.tar.xz ${arch} + done +} + . "${curdir}/../lib/shunit2" |