#!/bin/bash source "$(dirname "$(readlink -e "$0")")/etc/dbscripts.cfg" source "$(dirname "$(readlink -e "$0")")/share/db-functions" if [ $# -lt 3 ]; then msg "usage: %s ..." "${0##*/}" exit 1 fi args=("${@}") repo_from="${args[0]}" repo_to="${args[1]}" ftppath_from="${root_dir}/${repo_from}/os/" ftppath_to="${root_dir}/${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 %s to %s" "${repo_from}" "${repo_to}" fi # TODO: this might lock too much (main_architectures) for pkgarch in "${main_architectures[@]}"; do repo_lock "${repo_to}" "${pkgarch}" || exit 1 repo_lock "${repo_from}" "${pkgarch}" || exit 1 done # First loop is to check that all necessary files exist for pkgbase in "${args[@]:2}"; do for pkgarch in "${main_architectures[@]}" 'any'; do xbsrepo_from="$(xbs releasepath "${pkgbase}" "${repo_from}" "${pkgarch}")" if [ -r "${xbsrepo_from}/PKGBUILD" ]; then pkgnames=($(. "${xbsrepo_from}/PKGBUILD"; echo "${pkgname[@]}")) if [ ${#pkgnames[@]} -lt 1 ]; then die "Could not read pkgname" fi pkgver=$(. "${xbsrepo_from}/PKGBUILD"; get_full_version "${epoch:-0}" "${pkgver}" "${pkgrel}") if [ -z "${pkgver}" ]; then die "Could not read pkgver" fi if [ "${pkgarch}" == 'any' ]; then tarches=("${main_architectures[@]}") else tarches=("${pkgarch}") fi for pkgname in "${pkgnames[@]}"; do for tarch in "${tarches[@]}"; do getpkgfile "${ftppath_from}/${tarch}/${pkgname}-${pkgver}-${pkgarch}"${package_extension_suffixfile} >/dev/null done done continue 2 fi done die "%s not found in %s" "${pkgbase}" "${repo_from}" done msg "Moving packages from [%s] to [%s]..." "${repo_from}" "${repo_to}" declare -A add_pkgs declare -A remove_pkgs for pkgbase in "${args[@]:2}"; do # move the package in xbs arches=($(xbs move "${repo_from}" "${repo_to}" "${pkgbase}")) # move the package in ftp for pkgarch in "${arches[@]}"; do xbsrepo_to="$(xbs releasepath "$pkgbase" "$repo_to" "$pkgarch")" if true; then # to add an indent level to make merging easier if [ "${pkgarch}" == 'any' ]; then tarches=("${main_architectures[@]}") else tarches=("${pkgarch}") fi msg2 '%s (%s)' "${pkgbase}" "${tarches[*]}" pkgnames=($(. "${xbsrepo_to}/PKGBUILD"; echo "${pkgname[@]}")) pkgver=$(. "${xbsrepo_to}/PKGBUILD"; get_full_version "${epoch:-0}" "${pkgver}" "${pkgrel}") for pkgname in "${pkgnames[@]}"; do for tarch in "${tarches[@]}"; do pkgpath=$(getpkgfile "${ftppath_from}/${tarch}/${pkgname}-${pkgver}-${pkgarch}"${package_extension_suffixfile}) pkgfile="${pkgpath##*/}" ln -s "../../../${native_packages_pool}/${pkgfile}" "${ftppath_to}/${tarch}/" if [ -f "${root_dir}/${native_packages_pool}/${pkgfile}.sig" ]; then ln -s "../../../${native_packages_pool}/${pkgfile}.sig" "${ftppath_to}/${tarch}/" fi add_pkgs[${tarch}]+="${root_dir}/${native_packages_pool}/${pkgfile} " remove_pkgs[${tarch}]+="${pkgname} " done done fi done done for tarch in "${main_architectures[@]}"; do if [ -n "${add_pkgs[${tarch}]}" ]; then arch_repo_add "${repo_to}" "${tarch}" ${add_pkgs[${tarch}]} arch_repo_remove "${repo_from}" "${tarch}" ${remove_pkgs[${tarch}]} fi done for pkgarch in "${main_architectures[@]}"; do repo_unlock "${repo_from}" "${pkgarch}" repo_unlock "${repo_to}" "${pkgarch}" done