[arch-dev-public] [PATCH 3/7] Update db-move to support multiple pkgs
--- db-move | 142 +++++++++++++++++++++++++++++++++------------------------------ 1 files changed, 74 insertions(+), 68 deletions(-) diff --git a/db-move b/db-move index d385f12..04ce7ca 100755 --- a/db-move +++ b/db-move @@ -8,10 +8,12 @@ fi . "$(dirname $0)/db-functions" . "$(dirname $0)/config" -packagebase="$1" -repofrom="$2" -repoto="$3" -_arch="$4" +#Parse off args from the BACK of the list +# this adds support for multiple package names +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/" @@ -41,85 +43,89 @@ die() { 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 - for i in ${pkgname[@]}; do - _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" - getpkgfile "$ftppath_from/${_arch}/"$_pkgfile >/dev/null - done + /usr/bin/svn up -q $packagebase + if [ -d "$packagebase/repos/$svnrepo_from" ]; then + . "$packagebase/repos/$svnrepo_from/$BUILDSCRIPT" - 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 + for i in ${pkgname[@]}; do + _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" + getpkgfile "$ftppath_from/${_arch}/"$_pkgfile >/dev/null + done - 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)" + 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 package file and updating DBs' - cd "$WORKDIR" - [ -d build/ ] || mkdir build - cd build/ + 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)" - if [ "${_arch}" == 'any' ]; then - arches='i686 x86_64' - else - arches="${_arch}" - fi + echo ' Moving package file and updating DBs' + cd "$WORKDIR" + [ -d build/ ] || mkdir build + cd build/ - 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' + if [ "${_arch}" == 'any' ]; then + arches='i686 x86_64' + else + arches="${_arch}" fi - if [ -f "$ftppath_to/$architecture/$repoto$DBEXT" ]; then - /bin/cp "$ftppath_to/$architecture/$repoto$DBEXT" . - 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 - for i in ${pkgname[@]}; do - _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT" - _cpkgfile=$(getpkgfile "$ftppath_from/$architecture/"$_pkgfile) - [ $? -gt 0 ] && die - /bin/cp $_cpkgfile . - /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=$(getpkgfile "$i-$pkgver-$pkgrel-$_arch"$PKGEXT) - [ $? -gt 0 ] && die - if [ "${_arch}" == "any" ]; then - mv ${_pkgfile} $ftppath_to/any - ln -s ../any/${_pkgfile} $ftppath_to/$architecture/ - else - mv ${_pkgfile} $ftppath_to/$architecture + 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" + _cpkgfile=$(getpkgfile "$ftppath_from/$architecture/"$_pkgfile) + [ $? -gt 0 ] && die + /bin/cp $_cpkgfile . + /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=$(getpkgfile "$i-$pkgver-$pkgrel-$_arch"$PKGEXT) + [ $? -gt 0 ] && die + 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 -- 1.7.0.2
Am Donnerstag, 11. März 2010 23:02:35 schrieb Ghost1227:
+ /usr/bin/repo-add -q "$repoto$DBEXT" $_pkgfile || die "Error in repo-add $_pkgfile"
You are calling repo-add for every single package instead of once and adding all packages as parameters. The latter should be faster and more atomic. -- Pierre Schmitz, https://users.archlinux.de/~pierre
On 03/11/10 at 11:43pm, Pierre Schmitz wrote:
Am Donnerstag, 11. März 2010 23:02:35 schrieb Ghost1227:
+ /usr/bin/repo-add -q "$repoto$DBEXT" $_pkgfile || die "Error in repo-add $_pkgfile"
You are calling repo-add for every single package instead of once and adding all packages as parameters. The latter should be faster and more atomic.
--
Pierre Schmitz, https://users.archlinux.de/~pierre I'm more than willing to rework the patches (the right way this time) taking into account that and any other changes that the community would like to see... As I'm sure you all know by now i'm always looking for something to work on. --
participants (3)
-
Daniel J Griffiths (Ghost1227)
-
Ghost1227
-
Pierre Schmitz