From cecd257786e49f89468dfac7579ba75a7e42f537 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Mon, 5 Mar 2012 01:48:27 +0100 Subject: 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 -- cgit v1.2.3-54-g00ecf