[aur-general] [PATCH] initial support for any architecture.

Aaron Griffin aaronmgriffin at gmail.com
Wed Mar 11 11:32:38 EDT 2009


On Wed, Mar 11, 2009 at 8:27 AM, Abhishek Dasgupta <abhidg at gmail.com> wrote:
> This patch adds initial support for any architecture.
> It assumes that there'll be a repo-any directory in repos/
> from which it'll pull the PKGBUILDs. Also the architectureo
> independent packages are assumed to be in $reponame/os/any.
>
> This commit does not fix anything going wrong in the cron-jobs
> or misc-scripts folder. Also this commit contain any helper
> scripts for the any architecture corresponding to db-core or
> testing2x.
>
> Signed-off-by: Abhishek Dasgupta <abhidg at gmail.com>
> ---
>  db-move   |   48 ++++++++++++++++++++++++----------------
>  db-remove |   33 +++++++++++++++++----------
>  db-update |   72 +++++++++++++++++++++++++++++++++++++++++++++---------------
>  3 files changed, 104 insertions(+), 49 deletions(-)
>
> diff --git a/db-move b/db-move
> index ff9677b..aac0e4e 100755
> --- a/db-move
> +++ b/db-move
> @@ -1,6 +1,27 @@
>  #!/bin/bash
>  # Originally from Pierre's testing2extra script
>
> +process_db_move() {
> +
> +    # copy the db file into our working area
> +    if [ -f "$ftppath_from/$1/$repofrom.db.tar.$DB_COMPRESSION" ]; then
> +        /bin/cp "$ftppath_from/$1/$repofrom.db.tar.$DB_COMPRESSION" .
> +        /usr/bin/repo-remove -q "$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/$1
> +        echo "    Package files will be cleaned up automatically"
> +    fi
> +
> +    if [ -f "$ftppath_to/$1/$repoto.db.tar.$DB_COMPRESSION" ]; then
> +        /bin/cp "$ftppath_to/$1/$repoto.db.tar.$DB_COMPRESSION" .
> +    fi
> +
> +    /bin/cp "$ftppath_from/$1/$_pkgfile" .
> +    /usr/bin/repo-add -q "$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/$1
> +
> +}
>  if [ $# -ne 4 ]; then
>        echo "usage: $(basename $0) <pkgname> <repo-from> <repo-to> <arch>"
>        exit 1
> @@ -17,8 +38,8 @@ _arch="$4"
>
>  export CARCH="$_arch"
>
> -ftppath_from="$FTP_BASE/$repofrom/os/$_arch/"
> -ftppath_to="$FTP_BASE/$repoto/os/$_arch/"
> +ftppath_from="$FTP_BASE/$repofrom/os/"
> +ftppath_to="$FTP_BASE/$repoto/os/"
>  svnrepo_from="$repofrom-$_arch"
>  svnrepo_to="$repoto-$_arch"
>
> @@ -62,7 +83,7 @@ if [ -d "$packagename/repos/$svnrepo_from" ]; then
>     . "$packagename/repos/$svnrepo_from/$BUILDSCRIPT"
>     _pkgfile="$pkgname-$pkgver-$pkgrel-$_arch$PKGEXT"
>
> -    if [ ! -f "$ftppath_from/$_pkgfile" ]; then
> +    if [ ! -f "$ftppath_from/$_arch/$_pkgfile" ]; then
>         die "error: package file '$_pkgfile' not found in repo '$repofrom'"
>     fi
>
> @@ -81,23 +102,12 @@ if [ -d "$packagename/repos/$svnrepo_from" ]; then
>     [ -d build/ ] || mkdir build
>     cd build/
>
> -    # copy the db file into our working area
> -    if [ -f "$ftppath_from/$repofrom.db.tar.$DB_COMPRESSION" ]; then
> -        /bin/cp "$ftppath_from/$repofrom.db.tar.$DB_COMPRESSION" .
> -        /usr/bin/repo-remove -q "$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 [ "$_arch" == "any" ]; then
> +       process_db_move i686
> +       process_db_move x86_64
> +    else
> +       process_db_move $_arch
>     fi
> -
> -    if [ -f "$ftppath_to/$repoto.db.tar.$DB_COMPRESSION" ]; then
> -        /bin/cp "$ftppath_to/$repoto.db.tar.$DB_COMPRESSION" .
> -    fi
> -
> -    /bin/cp "$ftppath_from/$_pkgfile" .
> -    /usr/bin/repo-add -q "$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
> diff --git a/db-remove b/db-remove
> index acc849d..6432d94 100755
> --- a/db-remove
> +++ b/db-remove
> @@ -1,5 +1,21 @@
>  #!/bin/bash
>
> +process_db_files() {
> +       # copy the db file into our working area
> +       if [ -f "$ftppath/$1/$reponame.db.tar.$DB_COMPRESSION" ]; then
> +               /bin/cp "$ftppath/$1/$reponame.db.tar.$DB_COMPRESSION" build/
> +       else
> +               echo "No database found at '$ftpdir', nothing more to do"
> +               exit 0
> +       fi
> +
> +       echo "    Removing from $reponame DB file"
> +       cd build/
> +       /usr/bin/repo-remove -q "$reponame.db.tar.$DB_COMPRESSION" $packagename
> +
> +       /bin/cp "$reponame.db.tar.$DB_COMPRESSION" "$ftppath/$1/"
> +}
> +
>  if [ $# -ne 3 ]; then
>        echo "usage: $(basename $0) <pkgname> <reponame> <arch>"
>        exit 1
> @@ -15,7 +31,7 @@ arch="$3"
>
>  export CARCH="$arch"
>
> -ftppath="$FTP_BASE/$reponame/os/$arch/"
> +ftppath="$FTP_BASE/$reponame/os/"
>  svnrepo="$reponame-$arch"
>
>  [ "$UID" = "" ] && UID=$(uid)
> @@ -64,20 +80,13 @@ fi
>  cd "$WORKDIR"
>  [ -d build/ ] || mkdir build
>
> -# copy the db file into our working area
> -if [ -f "$ftppath/$reponame.db.tar.$DB_COMPRESSION" ]; then
> -       /bin/cp "$ftppath/$reponame.db.tar.$DB_COMPRESSION" build/
> +if [ "$arch" == "any" ]; then
> +       process_db_files i686
> +       process_db_files x86_64
>  else
> -       echo "No database found at '$ftpdir', nothing more to do"
> -       exit 0
> +       process_db_files $arch
>  fi
>
> -echo "    Removing from $reponame DB file"
> -cd build/
> -/usr/bin/repo-remove -q "$reponame.db.tar.$DB_COMPRESSION" $packagename
> -
> -/bin/cp "$reponame.db.tar.$DB_COMPRESSION" "$ftppath/"
> -
>  echo "Package files will be cleaned up automatically"
>
>  cleanup
> diff --git a/db-update b/db-update
> index 77af39f..f51f470 100755
> --- a/db-update
> +++ b/db-update
> @@ -15,6 +15,7 @@ _arch="$2"
>  export CARCH="$_arch"
>
>  ftppath="$FTP_BASE/$reponame/os/$_arch/"
> +ftppath_base="$FTP_BASE/$reponame/os/"
>  svnrepo="$reponame-$_arch"
>  stagedir="$STAGING/$reponame"
>
> @@ -72,10 +73,21 @@ repo_lock $reponame $_arch
>  cd "$WORKDIR"
>
>  # copy the db file into our working area
> -if [ -f "$ftppath/$reponame.db.tar.$DB_COMPRESSION" ]; then
> -       /bin/cp "$ftppath/$reponame.db.tar.$DB_COMPRESSION" build/
> +if [ "$_arch" == "any" ]; then
> +       for architecture in i686 x86_64; do
> +               if [ -f "$ftppath_base/$architecture/$reponame.db.tar.gz.$DB_COMPRESSION" ]; then
> +                       /bin/cp "$ftppath_base/$architecture/$reponame.db.tar.gz.$DB_COMPRESSION" build/$reponame-i686.db.tar.gz
> +               else
> +                       touch "build/$reponame-$architecture.db.tar.$DB_COMPRESSION"
> +               fi
> +       done
> +else
> +       if [ -f "$ftppath/$reponame.db.tar.$DB_COMPRESSION" ]; then
> +               /bin/cp "$ftppath/$reponame.db.tar.$DB_COMPRESSION" build/
> +       else
> +               touch "build/$reponame.db.tar.$DB_COMPRESSION"
> +       fi
>  fi
> -
>  echo "Updating DB for $reponame $_arch"
>
>  if [ -d "${stagedir}64" ]; then
> @@ -106,11 +118,11 @@ fi
>  if [ -n "$ADDPKGS" ]; then
>
>        echo "==> Copying DB file from '$reponame'..." >&2
> -       if [ -f "$ftppath/$reponame.db.tar.$DB_COMPRESSION" ]; then
> -               /bin/cp "$ftppath/$reponame.db.tar.$DB_COMPRESSION" build/
> -       else
> -               touch "build/$reponame.db.tar.$DB_COMPRESSION"
> -       fi
> +#      if [ -f "$ftppath/$reponame.db.tar.$DB_COMPRESSION" ]; then
> +#              /bin/cp "$ftppath/$reponame.db.tar.$DB_COMPRESSION" build/
> +#      else
> +#              touch "build/$reponame.db.tar.$DB_COMPRESSION"
> +#      fi
>
>        echo "==> Processing new/updated packages for repository '$reponame'..." >&2
>
> @@ -147,10 +159,19 @@ if [ -n "$ADDPKGS" ]; then
>
>                pkgs=""
>                for pkg in $to_add; do pkgs="$pkgs $(basename $pkg)"; done
> -
> -               /usr/bin/repo-add -q "$reponame.db.tar.$DB_COMPRESSION" $pkgs
> +               if [ "$_arch" == "any" ]; then
> +                       /usr/bin/repo-add -q "$reponame-i686.db.tar.$DB_COMPRESSION" $pkgs
> +                       /usr/bin/repo-add -q "$reponame-x86_64.db.tar.$DB_COMPRESSION" $pkgs
> +               else
> +                       /usr/bin/repo-add -q "$reponame.db.tar.$DB_COMPRESSION" $pkgs
> +               fi
>        else
> -               rm -f "build/$reponame.db.tar.$DB_COMPRESSION"
> +               if [ "$_arch" == "any" ]; then
> +                       rm -f "build/$reponame-i686.db.tar.gz"
> +                       rm -f "build/$reponame-x86_64.db.tar.gz"
> +               else
> +                       rm -f "build/$reponame.db.tar.$DB_COMPRESSION"
> +               fi
>                echo "Errors found when adding packages"
>        fi
>  else
> @@ -159,13 +180,28 @@ fi
>
>  # if non empty, move all build dirs
>  if [ $(/bin/ls "$WORKDIR/build/" 2>/dev/null | wc -l) != 0 ]; then
> -       echo "Copying new files to '$ftppath'"
> -       for f in "$WORKDIR/build/"*; do
> -               if ! /bin/cp "$f" "$ftppath"; then
> -                       die "error: failure while copying files to $ftppath"
> -               fi
> -       done
> -
> +       if [ "$_arch" != "any" ]; then
> +               echo "Copying new files to '$ftppath'"
> +               for f in "$WORKDIR/build/"*; do
> +                       if ! /bin/cp "$f" "$ftppath"; then
> +                               die "error: failure while copying files to $ftppath"
> +                       fi
> +               done
> +       else
> +               echo "Copying architecture-independent packages..."
> +               for f in "$WORKDIR/build/"*.pkg.tar.gz; do
> +                       if ! /bin/cp "$f" "$ftppath"; then
> +                               die "error: failure while copying $f to $ftppath"
> +                       fi
> +               # Make link to arch-any package from os/{i686,x86_64} directories
> +                       ln -s "$ftppath/$f" "$ftppath_base/i686/"
> +                       ln -s "$ftppath/$f" "$ftppath_base/x86_64/"
> +               for architecture in i686 x86_64; do
> +                       if ! /bin/cp "$reponame-$architecture.db.tar.$DB_COMPRESSION" "$ftppath_base/$architecture/$reponame.db.tar.$DB_COMPRESSION"; then
> +                               die "error: failed to transfer $architecture repository database."
> +                       fi
> +               done
> +       fi
>  else
>        echo "Nothing to copy, no work done"
>  fi
>
> --
> Abhishek Dasgupta <http://abhidg.mine.nu>
> GPG 67972DOF pgp.mit.edu

Hmm the aur-general list is a weird place for this patch :)

The only thing that makes me hesitant about this is that I was going a
slightly different route.

This patch here:
http://code.phraktured.net/cgit.cgi/dbscripts/commit/?h=any-arch&id=1ef058dad91a5ca82db2744776251a2ab68bcf90
changes the dbscripts to loop over all architectures for each run. I
wanted to simply add "any" into the file detection part, but not
delete them until the very end

So this way, if I have 3 packages in my staging dir: foo(i686),
bar(x86_64), and baz(any), running db-update does the following:
for A in ARCHES (where ARCHES=(i686 x86_64)):
    get all files with "A" arch _or_ "any" arch
    do loop as normal
delete all files we processed correctly


More information about the aur-general mailing list