#!/bin/bash abort() { echo ${1:-"Cancelled"} exit 1 } # Verify that a remote file exists and is identical to a local one # Usage: package_verify package_verify() { local remote_checksum=$(ssh $2 openssl sha1 "'$3'" 2>/dev/null | grep -o '[0-9a-f]\{40\}$') local local_checksum=$(openssl sha1 "$1" | grep -o '[0-9a-f]\{40\}$') if [ -n "$remote_checksum" -a "$remote_checksum" == "$local_checksum" ]; then return 0 fi return 1 } # 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 source ~/.makepkg.conf fi cmd=$(basename $0) if [ ! -f PKGBUILD ]; then abort "No PKGBUILD file" fi source PKGBUILD pkgbase=${pkgbase:-${pkgname[0]}} # 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" == "communitypkg" ]; then repo="community" server="aur.archlinux.org" elif [ "$cmd" == "community-testingpkg" ]; then repo="community-testing" server="aur.archlinux.org" else if [ $# -eq 0 ]; then abort "usage: commitpkg [-l limit] [commit message]" fi repo="$1" shift fi # see if any limit options were passed, we'll send them to SCP unset scpopts if [ "$1" = "-l" ]; then scpopts="$1 $2" shift 2 fi for CARCH in ${arch[@]}; do echo "===> Uploading to $repo-$CARCH" for _pkgname in ${pkgname[@]}; do pkgfile=${_pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} if [ ! -f $pkgfile -a -f $PKGDEST/$pkgfile ]; then pkgfile=$PKGDEST/$pkgfile elif [ ! -f $pkgfile ]; then echo "File $pkgfile doesn't exist" # skip to next architecture continue 2 fi # combine what we know into a variable uploadto="staging/${repo}/$(basename ${pkgfile})" # don't re-upload the same package (useful for -any sub packages) if ! package_verify "${pkgfile}" ${server} "${uploadto}"; then scp ${scpopts} "${pkgfile}" "${server}:${uploadto}" || abort fi if ! package_verify "${pkgfile}" ${server} "${uploadto}"; then abort "File got corrupted during upload, cancelled." else echo "File integrity okay." fi echo "===> Uploaded $pkgfile" done if [ "$1" != "" ]; then svn commit -m "upgpkg: $pkgbase $pkgver-$pkgrel $1" > /dev/null || abort echo "===> Commited with message: upgpkg: $pkgbase $pkgver-$pkgrel $1" else svn commit || abort echo "===> Commited" fi archrelease $repo-$CARCH || abort done if [ "${arch[*]}" == "any" ]; then if [ -d ../repos/${repo}-i686 -a -d ../repos/${repo}-x86_64 ]; then pushd ../repos/ svn rm $repo-i686 svn rm $repo-x86_64 svn commit -m "removed $repo-i686 and $repo-x86_64 for $pkgname" popd fi fi # vim:ft=sh:ts=4:sw=4:et: