diff options
-rw-r--r-- | db-functions | 18 | ||||
-rwxr-xr-x | db-move | 25 |
2 files changed, 34 insertions, 9 deletions
diff --git a/db-functions b/db-functions index 05ff1b9..47d23ef 100644 --- a/db-functions +++ b/db-functions @@ -598,3 +598,21 @@ arch_history_commit() { popd } +pkgentry_from_db() { + local repo="$1" + local arch="$2" + local pkgname="$3" + + local db="$FTP_BASE/$repo/os/$arch/$repo$DBEXT" + local line + + for line in $(tar tf "$db" | sed -n 's#^\([^/]*\)/$#\1#p'); do + local name=${line##*/} + if [[ ${line%-*-*} = $pkgname ]]; then + echo $name + return 0 + fi + done + + return 1 +} @@ -12,7 +12,7 @@ args=(${@}) repo_from="${args[0]}" repo_to="${args[1]}" arch="${args[2]}" -pkgs=("${args[@]:3}") +pkgnames=("${args[@]:3}") ftppath_from="${FTP_BASE}/${repo_from}/os/" ftppath_to="${FTP_BASE}/${repo_to}/os/" @@ -28,16 +28,23 @@ done msg "Moving packages from [${repo_from}] to [${repo_to}]..." -# TODO: resolve pkgname to pkgfile for db_add -# and actually make this script callable -# with a pkgname rather than a pkgfile -for pkg in "${pkgs[@]}"; do - pkgname=$(getpkgname "$FTP_BASE/$PKGPOOL/$pkg") - arch_db_add "${repo_to}" "$arch" "$pkg" - arch_db_remove "${repo_from}" "$arch" "$pkgname" +for pkgname in "${pkgnames[@]}"; do + pkgentry=$(pkgentry_from_db "$repo_from" "$arch" "$pkgname") + pkgs=($(getpkgfiles "$ftppath_from$arch/$pkgentry"*${PKGEXT})) + + if [[ -z $pkgentry ]]; then + warning "Failed to detect pkgentry for $pkgname" + continue + fi + + for pkg in "${pkgs[@]}"; do + pkgname=$(getpkgname "$pkg") + arch_db_add "${repo_to}" "$arch" "${pkg##*/}" + arch_db_remove "${repo_from}" "$arch" "$pkgname" + done done -arch_history_commit "db-move: ${pkgs[@]}" +arch_history_commit "db-move: $repo_from -> $repo_to: ${pkgnames[@]}" for pkgarch in ${ARCHES[@]}; do repo_unlock ${repo_from} ${pkgarch} |