From cecd257786e49f89468dfac7579ba75a7e42f537 Mon Sep 17 00:00:00 2001
From: Pierre Schmitz <pierre@archlinux.de>
Date: Mon, 5 Mar 2012 01:48:27 +0100
Subject: [PATCH] Add script to move packages between [extra] and [community]

---
 .gitignore       |  1 +
 Makefile         |  9 ++++-
 crossrepomove.in | 86 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 crossrepomove.in

diff --git a/.gitignore b/.gitignore
index 90a2015..691fd83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ mkarchroot
 rebuildpkgs
 zsh_completion
 find-libdeps
+crossrepomove
diff --git a/Makefile b/Makefile
index c35a561..9502475 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,8 @@ BINPROGS = \
 	lddd \
 	finddeps \
 	rebuildpkgs \
-	find-libdeps
+	find-libdeps \
+	crossrepomove
 
 SBINPROGS = \
 	mkarchroot \
@@ -59,6 +60,10 @@ ARCHBUILD_LINKS = \
 	gnome-unstable-i686-build \
 	gnome-unstable-x86_64-build
 
+CROSSREPOMOVE_LINKS = \
+	extra2community \
+	community2extra
+
 all: $(BINPROGS) $(SBINPROGS) bash_completion zsh_completion
 
 edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
@@ -82,6 +87,7 @@ install:
 	install -m0644 ${CONFIGFILES} $(DESTDIR)$(PREFIX)/share/devtools
 	for l in ${COMMITPKG_LINKS}; do ln -sf commitpkg $(DESTDIR)$(PREFIX)/bin/$$l; done
 	for l in ${ARCHBUILD_LINKS}; do ln -sf archbuild $(DESTDIR)$(PREFIX)/bin/$$l; done
+	for l in ${CROSSREPOMOVE_LINKS}; do ln -sf crossrepomove $(DESTDIR)$(PREFIX)/bin/$$l; done
 	ln -sf find-libdeps $(DESTDIR)$(PREFIX)/bin/find-libprovides
 	install -Dm0644 bash_completion $(DESTDIR)/etc/bash_completion.d/devtools
 	install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
@@ -93,6 +99,7 @@ uninstall:
 	for f in ${CONFIGFILES}; do rm -f $(DESTDIR)$(PREFIX)/share/devtools/$$f; done
 	for l in ${COMMITPKG_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 	for l in ${ARCHBUILD_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
+	for l in ${CROSSREPOMOVE_LINKS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$l; done
 	rm $(DESTDIR)/etc/bash_completion.d/devtools
 	rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
 	rm -f $(DESTDIR)$(PREFIX)/bin/communityco
diff --git a/crossrepomove.in b/crossrepomove.in
new file mode 100644
index 0000000..f010e33
--- /dev/null
+++ b/crossrepomove.in
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+m4_include(lib/common.sh)
+
+scriptname=${0##*/}
+
+if [[ -z $1 ]]; then
+	echo 'Usage: '$scriptname' [pkgbase]'
+	exit 1
+fi
+
+pkgbase="${1}"
+
+packages_svn='svn+ssh://gerolde.archlinux.org/srv/svn-packages'
+packages_server='gerolde.archlinux.org'
+community_svn='svn+ssh://aur.archlinux.org/srv/svn-packages'
+community_server='aur.archlinux.org'
+mirror='http://mirrors.kernel.org/archlinux'
+
+case $scriptname in
+	extra2community)
+		source_svn="${packages_svn}"
+		target_svn="${community_svn}"
+		source_server="${packages_server}"
+		target_server="${community_server}"
+		source_repo='extra'
+		target_repo='community'
+		;;
+	community2extra)
+		source_svn="${community_svn}"
+		target_svn="${packages_svn}"
+		source_server="${community_server}"
+		target_server="${packages_server}"
+		source_repo='community'
+		target_repo='extra'
+		;;
+	*)
+		die "Couldn't find configuration for $scriptname"
+		;;
+esac
+
+setup_workdir
+
+pushd $WORKDIR >/dev/null
+
+msg "Downloading sources for ${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
+. "target_checkout/${pkgbase}/trunk/PKGBUILD"
+
+msg "Downloading packages for ${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)
+		# FIXME: this only works with .xz packages
+		ssh "${target_server}" "cd staging/${target_repo}
+			curl -O ${mirror}/${source_repo}/os/${repo_arch}/$_pkgname-$fullver-${_arch}.pkg.tar.xz
+			curl -O ${mirror}/${source_repo}/os/${repo_arch}/$_pkgname-$fullver-${_arch}.pkg.tar.xz.sig" || die
+	done
+done
+
+msg "Adding ${pkgbase} to ${target_repo}"
+svn -q add "target_checkout/${pkgbase}"
+svn -q propset svn:keywords 'Id' "target_checkout/${pkgbase}/trunk/PKGBUILD"
+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
+ssh "${target_server}" '/arch/db-update' || die
+
+msg "Removing ${pkgbase} from ${source_repo}"
+for _arch in ${arch[@]}; do
+	ssh "${source_server}" "/arch/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
-- 
GitLab