From 8e2d2c6df75a992cf65ab24e7f97de9a9f04174c Mon Sep 17 00:00:00 2001 From: Aaron Griffin Date: Wed, 21 May 2008 00:33:12 -0400 Subject: Add db-move related scripts Used to easilly move a package from one repo to another Signed-off-by: Aaron Griffin --- db-move | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 db-move (limited to 'db-move') diff --git a/db-move b/db-move new file mode 100755 index 0000000..cb559d2 --- /dev/null +++ b/db-move @@ -0,0 +1,120 @@ +#!/bin/bash +# Originally from Pierre's testing2extra script + +if [ $# -ne 4 ]; then + echo "usage: $(basename $0) " + exit 1 +fi + +if [ -f "/etc/makepkg.conf" ]; then + #Get some config info + . /etc/makepkg.conf +else + echo "/etc/makepkg.conf does not exist!" + exit 1 +fi + +packagename="$1" +repofrom="$2" +repoto="$3" +arch="$4" + +export CARCH="$arch" + +##### Arch specific stuff. TODO make this configurable ##### +ftppath_from="/home/ftp/$repofrom/os/$arch/" +ftppath_to="/home/ftp/$repoto/os/$arch/" +svnpath="file:///home/svn-packages" +svnrepo_from="$repofrom-$arch" +svnrepo_to="$repoto-$arch" +############################################################ + +[ "$UID" = "" ] && UID=$(uid) + +WORKDIR="/tmp/db-move.$svnrepo_from.$svnrepo_to.$UID" +LOCKFILE="/tmp/.repolck.$arch.$reponame" + +cleanup() { + # unlock + rm -f "$LOCKFILE" + #rm -rf "$WORKDIR" + [ "$1" ] && exit $1 +} + +ctrl_c() { + echo "Interrupted" >&2 + cleanup 0 +} + +die() { + echo "$*" >&2 + cleanup 1 +} + +# check for locks +if [ -f "$LOCKFILE" ]; then + owner="$(/usr/bin/stat -c %U $LOCKFILE)" + die "error: db generation is already in progress (started by $owner)" +fi + +trap ctrl_c 2 +trap cleanup 0 + +/bin/touch "$LOCKFILE" +/bin/mkdir -p "$WORKDIR" + +cd "$WORKDIR" +/usr/bin/svn checkout -N $svnpath checkout +cd checkout + +/usr/bin/svn up -q $packagename +if [ -d "$packagename/repos/$svnrepo_from" ]; then + . "$packagename/repos/$svnrepo_from/$BUILDSCRIPT" + _pkgfile="$pkgname-$pkgver-$pkgrel-$CARCH$PKGEXT" + + if [ ! -f "$ftppath_from/$_pkgfile" ]; then + die "error: package file '$_pkgfile' not found in repo '$repofrom'" + fi + + if [ -d "$packagename/repos/$svnrepo_to" ]; then + echo " Removing existing package from subversion" + /usr/bin/svn rm --force -q "$packagename/repos/$svnrepo_to" + /usr/bin/svn commit -q -m "$(basename $0): $packagename removed by $(id -un) for move to $repoto" + fi + + echo " Moving svn entries" + /usr/bin/svn mv -r HEAD "$packagename/repos/$svnrepo_from" "$packagename/repos/$svnrepo_to" + /usr/bin/svn commit -m "$(basename $0): moved $packagename from [$repofrom] to [$repoto] ($arch)" + + echo " Moving package file and updating DBs" + cd "$WORKDIR" + [ -d build/ ] || mkdir build + cd build/ + + # copy the db file into our working area + if [ -f "$ftppath_from/$repofrom.db.tar.$DB_COMPRESSION" ]; then + cp "$ftppath_from/$repofrom.db.tar.$DB_COMPRESSION" . + else + touch "$repofrom.db.tar.$DB_COMPRESSION" + fi + + /usr/bin/repo-remove "$repofrom.db.tar.$DB_COMPRESSION" $packagename || die "Error in repo-remove" + #use '*' to move the old DB too + mv $repofrom.db.tar.$DB_COMPRESSION* $ftppath_from + echo " Package files will be cleaned up automatically" + + if [ -f "$ftppath_to/$repoto.db.tar.$DB_COMPRESSION" ]; then + cp "$ftppath_to/$repoto.db.tar.$DB_COMPRESSION" . + else + touch "$repoto.db.tar.$DB_COMPRESSION" + fi + + cp "$ftppath_from/$_pkgfile" . + /usr/bin/repo-add "$repoto.db.tar.$DB_COMPRESSION" $_pkgfile || die "Error in repo-add" + #use '*' to move the old DB too + mv $repoto.db.tar.$DB_COMPRESSION* $_pkgfile $ftppath_to +else + die "Error: $packagename is not in repo $repofrom" +fi + +cleanup -- cgit v1.2.3-24-g4f1b