#!/bin/bash if [ $# -ne 4 ]; then echo "usage: $(basename $0) " exit 1 fi . "$(dirname $0)/db-functions" . "$(dirname $0)/config" packagebase="$1" repofrom="$2" repoto="$3" _arch="$4" ftppath_from="$FTP_BASE/$repofrom/os/" ftppath_to="$FTP_BASE/$repoto/os/" svnrepo_from="$repofrom-$_arch" svnrepo_to="$repoto-$_arch" [ "$UID" = "" ] && UID=$(uid) WORKDIR="$TMPDIR/db-move.$svnrepo_from.$svnrepo_to.$UID" cleanup() { trap '' 0 2 # unlock repo_unlock $repoto $_arch repo_unlock $repofrom $_arch rm -rf "$WORKDIR" [ "$1" ] && exit $1 } ctrl_c() { echo "Interrupted" >&2 cleanup 0 } die() { echo "$*" >&2 cleanup 1 } trap ctrl_c 2 trap cleanup 0 repo_lock $repoto $_arch repo_lock $repofrom $_arch /bin/mkdir -p "$WORKDIR" cd "$WORKDIR" /usr/bin/svn checkout -N $SVNREPO checkout cd checkout /usr/bin/svn up -q $packagebase if [ -d "$packagebase/repos/$svnrepo_from" ]; then . "$packagebase/repos/$svnrepo_from/$BUILDSCRIPT" for i in ${pkgname[@]}; do _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" if [ ! -f "$ftppath_from/${_arch}/$_pkgfile" ]; then die "error: package file '$_pkgfile' not found in repo '$repofrom'" fi done if [ -d "$packagebase/repos/$svnrepo_to" ]; then echo " Removing existing package from subversion" /usr/bin/svn rm --force -q "$packagebase/repos/$svnrepo_to" /usr/bin/svn commit -q -m "$(basename $0): $packagebase removed by $(id -un) for move to $repoto" fi echo " Moving svn entries" /usr/bin/svn mv -r HEAD "$packagebase/repos/$svnrepo_from" "$packagebase/repos/$svnrepo_to" /usr/bin/svn commit -m "$(basename $0): moved $packagebase from [$repofrom] to [$repoto] ($_arch)" echo " Moving package file and updating DBs" cd "$WORKDIR" [ -d build/ ] || mkdir build cd build/ if [ "${_arch}" == "any" ]; then arches="i686 x86_64" else arches="${_arch}" fi for architecture in $arches; do # copy the db file into our working area if [ -f "$ftppath_from/$architecture/$repofrom$DBEXT" ]; then /bin/cp "$ftppath_from/$architecture/$repofrom$DBEXT" . /usr/bin/repo-remove -q "$repofrom$DBEXT" ${pkgname[@]} || die "Error in repo-remove" #use '*' to move the old DB too mv $repofrom$DBEXT* "$ftppath_from/$architecture" echo " Package files will be cleaned up automatically" fi if [ -f "$ftppath_to/$architecture/$repoto$DBEXT" ]; then /bin/cp "$ftppath_to/$architecture/$repoto$DBEXT" . fi for i in ${pkgname[@]}; do _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" /bin/cp "$ftppath_from/$architecture/$_pkgfile" . /usr/bin/repo-add -q "$repoto$DBEXT" $_pkgfile || die "Error in repo-add $_pkgfile" done #use '*' to move the old DB too mv $repoto$DBEXT* $ftppath_to/$architecture for i in ${pkgname[@]}; do _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" if [ "${_arch}" == "any" ]; then mv ${_pkgfile} $ftppath_to/any ln -s ../any/${_pkgfile} $ftppath_to/$architecture/ else mv ${_pkgfile} $ftppath_to/$architecture fi done done else die "Error: $packagebase is not in repo $repofrom" fi cleanup