diff --git a/db-move b/db-move index efd54e0..fab8527 100755 --- a/db-move +++ b/db-move @@ -1,17 +1,17 @@ #!/bin/bash -if [ $# -ne 4 ]; then - echo "usage: $(basename $0) " - exit 1 +if [ $# -lt 4 ]; then + echo "usage: $(basename $0) " + exit 1 fi . "$(dirname $0)/db-functions" . "$(dirname $0)/config" -packagebase="$1" -repofrom="$2" -repoto="$3" -_arch="$4" +args=($@) +_arch="${args[${#args[@]}-1]}" && unset args[${#args[@]}-1] +repoto="${args[${#args[@]}-1]}" && unset args[${#args[@]}-1] +repofrom="${args[${#args[@]}-1]}" && unset args[${#args[@]}-1] ftppath_from="$FTP_BASE/$repofrom/os/" ftppath_to="$FTP_BASE/$repoto/os/" @@ -24,100 +24,104 @@ WORKDIR="$TMPDIR/db-move.$svnrepo_from.$svnrepo_to.$UID" cleanup() { trap '' 0 2 - # unlock + # unlock repo_unlock $repoto $_arch repo_unlock $repofrom $_arch - rm -rf "$WORKDIR" - [ "$1" ] && exit $1 + rm -rf "$WORKDIR" + [ "$1" ] && exit $1 } ctrl_c() { - echo "Interrupted" >&2 - cleanup 0 + echo "Interrupted" >&2 + cleanup 0 } die() { - echo "$*" >&2 - cleanup 1 + echo "$*" >&2 + cleanup 1 } -trap ctrl_c 2 -trap cleanup 0 +for pkgbase in ${args[@]}; do + echo "==> Moving package '$pkgbase'" -repo_lock $repoto $_arch -repo_lock $repofrom $_arch + trap ctrl_c 2 + trap cleanup 0 -/bin/mkdir -p "$WORKDIR" + repo_lock $repoto $_arch + repo_lock $repofrom $_arch -cd "$WORKDIR" -/usr/bin/svn checkout -N $SVNREPO checkout -cd checkout + /bin/mkdir -p "$WORKDIR" -/usr/bin/svn up -q $packagebase -if [ -d "$packagebase/repos/$svnrepo_from" ]; then - . "$packagebase/repos/$svnrepo_from/$BUILDSCRIPT" + 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'" + 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 - 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 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/ - 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 + 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 - done -else - die "Error: $packagebase is not in repo $repofrom" -fi + else + die "Error: $packagebase is not in repo $repofrom" + fi +done cleanup