summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Souza Franco <gabrielfrancosouza@gmail.com>2016-01-26 00:53:58 -0200
committerGabriel Souza Franco <gabrielfrancosouza@gmail.com>2016-02-17 19:17:31 -0200
commiteeaef122d06632579f3a1377c00d06675769223c (patch)
treebd14d2153fce12dc89c2819960f6d524d64b50bc
parentcef32da5748d3c9abf1f21d30c32e8bff1f65007 (diff)
Remove deleted split packages in db-move
Signed-off-by: Gabriel Souza Franco <gabrielfrancosouza@gmail.com>
-rw-r--r--db-functions1
-rwxr-xr-xdb-move53
-rwxr-xr-xtest/test.d/db-move.sh30
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}))
diff --git a/db-move b/db-move
index b9479ff..688d89f 100755
--- a/db-move
+++ b/db-move
@@ -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"