#!/bin/bash abort() { echo ${1:-'Cancelled'} exit 1 } getpkgfile() { if [[ ${#} -ne 1 ]]; then echo 'ERROR: No canonical package found!' >&2 exit 1 elif [ ! -f "${1}" ]; then echo "ERROR: Package ${1} not found!" >&2 exit 1 fi echo ${1} } ## # usage : get_full_version( $epoch, $pkgver, $pkgrel ) # return : full version spec, including epoch (if necessary), pkgver, pkgrel ## get_full_version() { if [[ $1 -eq 0 ]]; then # zero epoch case, don't include it in version echo $2-$3 else echo $1:$2-$3 fi } # Source makepkg.conf; fail if it is not found if [ -r '/etc/makepkg.conf' ]; then source '/etc/makepkg.conf' else abort '/etc/makepkg.conf not found!' fi # Source user-specific makepkg.conf overrides if [ -r ~/.makepkg.conf ]; then . ~/.makepkg.conf fi cmd=$(basename "$0") if [ ! -f PKGBUILD ]; then abort 'No PKGBUILD file' fi . PKGBUILD pkgbase=${pkgbase:-$pkgname} # set up repo-specific opts depending on how we were called server='gerolde.archlinux.org' if [ "$cmd" == 'extrapkg' ]; then repo='extra' elif [ "$cmd" == 'corepkg' ]; then repo='core' elif [ "$cmd" == 'testingpkg' ]; then repo='testing' elif [ "$cmd" == 'stagingpkg' ]; then repo='staging' elif [ "$cmd" == 'communitypkg' ]; then repo='community' server='aur.archlinux.org' elif [ "$cmd" == 'community-testingpkg' ]; then repo='community-testing' server='aur.archlinux.org' elif [ "$cmd" == 'community-stagingpkg' ]; then repo='community-staging' server='aur.archlinux.org' elif [ "$cmd" == 'multilibpkg' ]; then repo='multilib' server='aur.archlinux.org' elif [ "$cmd" == 'multilib-testingpkg' ]; then repo='multilib-testing' server='aur.archlinux.org' else if [ $# -eq 0 ]; then abort 'usage: commitpkg <reponame> [-l limit] [commit message]' fi repo="$1" shift fi # check if all local source files are under version control for s in ${source[@]}; do echo $s | grep -Fvq '://' && \ svn status $s | grep -q '^\?' && \ abort "$s is not under version control" done # check if changelog and install files are under version control for i in 'changelog' 'install'; do filelist=$(sed -n "s/^[[:space:]]*$i=//p" PKGBUILD) for file in $filelist; do # evaluate any bash variables used eval file=${file} if svn status ${file} | grep -q '^\?'; then abort "${file} is not under version control" fi done done # see if any limit options were passed, we'll send them to rsync unset rsyncopts if [ "$1" = '-l' ]; then rsyncopts="--bwlimit=$2" shift 2 fi echo -n 'committing changes to trunk...' if [ -n "$1" ]; then svn commit -q -m "upgpkg: $pkgbase $pkgver-$pkgrel $1" || abort else svn commit -q || abort fi echo 'done' for _arch in ${arch[@]}; do for _pkgname in ${pkgname[@]}; do fullver=$(get_full_version ${epoch:-0} $pkgver $pkgrel) pkgfile=$(getpkgfile "$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null) pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null) if [ -f "$pkgfile" ]; then pkgfile="./$pkgfile" elif [ -f "$pkgdestfile" ]; then pkgfile="$pkgdestfile" else echo "skipping ${_arch}" continue 2 fi echo -n 'uploading ' rsync -p --chmod 'ug=rw,o=r' -c -h -L --progress $rsyncopts --partial "${pkgfile}" -e ssh "$server:staging/$repo/${pkgfile##*/}" || abort done archrelease $repo-${_arch} || abort done if [ "${arch[*]}" == 'any' ]; then if [ -d ../repos/$repo-i686 -a -d ../repos/$repo-x86_64 ]; then pushd ../repos/ >/dev/null echo "removing $repo-i686 and $repo-x86_64..." svn rm $repo-i686 svn rm $repo-x86_64 svn commit -q -m "removed $repo-i686 and $repo-x86_64 for $pkgname" echo 'done' popd >/dev/null fi fi