summaryrefslogtreecommitdiff
path: root/src/crossrepomove.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/crossrepomove.in')
-rw-r--r--src/crossrepomove.in86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/crossrepomove.in b/src/crossrepomove.in
new file mode 100644
index 0000000..c028d62
--- /dev/null
+++ b/src/crossrepomove.in
@@ -0,0 +1,86 @@
+#!/bin/bash
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+m4_include(lib/common.sh)
+
+scriptname=${0##*/}
+
+if [[ -z $1 ]]; then
+ printf 'Usage: %s [pkgbase]\n' "$scriptname"
+ exit 1
+fi
+
+pkgbase="${1}"
+
+case $scriptname in
+ extra2community)
+ source_name='packages'
+ target_name='community'
+ source_repo='extra'
+ target_repo='community'
+ ;;
+ community2extra)
+ source_name='community'
+ target_name='packages'
+ source_repo='community'
+ target_repo='extra'
+ ;;
+ *)
+ die "Couldn't find configuration for %s" "$scriptname"
+ ;;
+esac
+
+server='repos.archlinux.org'
+source_svn="svn+ssh://svn-${source_name}@${server}/srv/repos/svn-${source_name}/svn"
+target_svn="svn+ssh://svn-${target_name}@${server}/srv/repos/svn-${target_name}/svn"
+source_dbscripts="/srv/repos/svn-${source_name}/dbscripts"
+target_dbscripts="/srv/repos/svn-${target_name}/dbscripts"
+
+setup_workdir
+
+pushd "$WORKDIR" >/dev/null
+
+msg "Downloading sources for %s" "${pkgbase}"
+svn -q checkout -N "${target_svn}" target_checkout
+mkdir -p "target_checkout/${pkgbase}/repos"
+svn -q export "${source_svn}/${pkgbase}/trunk" "target_checkout/${pkgbase}/trunk" || die
+# shellcheck source=PKGBUILD.proto
+. "target_checkout/${pkgbase}/trunk/PKGBUILD"
+
+msg "Downloading packages for %s" "${pkgbase}"
+for _arch in "${arch[@]}"; do
+ if [[ "${_arch[*]}" == 'any' ]]; then
+ repo_arch='x86_64'
+ else
+ repo_arch=${_arch}
+ fi
+ for _pkgname in "${pkgname[@]}"; do
+ fullver=$(get_full_version "$_pkgname")
+ pkgpath="/srv/ftp/$source_repo/os/$repo_arch/$_pkgname-$fullver-${_arch}.pkg.tar.*"
+ # shellcheck disable=2029
+ ssh "$server" "cp $pkgpath staging/$target_repo" || die
+ done
+done
+
+msg "Adding %s to %s" "${pkgbase}" "${target_repo}"
+svn -q add "target_checkout/${pkgbase}"
+svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" target_checkout
+pushd "target_checkout/${pkgbase}/trunk" >/dev/null
+archrelease "${arch[@]/#/$target_repo-}" || die
+popd >/dev/null
+
+# shellcheck disable=2029
+ssh "${server}" "${target_dbscripts}/db-update" || die
+
+msg "Removing %s from %s" "${pkgbase}" "${source_repo}"
+for _arch in "${arch[@]}"; do
+ # shellcheck disable=2029
+ ssh "${server}" "${source_dbscripts}/db-remove ${source_repo} ${_arch} ${pkgbase}"
+done
+svn -q checkout -N "${source_svn}" source_checkout
+svn -q up "source_checkout/${pkgbase}"
+svn -q rm "source_checkout/${pkgbase}"
+svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" source_checkout
+
+popd >/dev/null