devtools/commitpkg

147 lines
3.2 KiB
Plaintext
Raw Normal View History

#!/bin/bash
abort() {
2010-02-13 19:47:16 +01:00
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
2010-02-13 19:47:16 +01:00
if [ -r '/etc/makepkg.conf' ]; then
source '/etc/makepkg.conf'
else
2010-02-13 19:47:16 +01:00
abort '/etc/makepkg.conf not found!'
fi
# Source user-specific makepkg.conf overrides
if [ -r ~/.makepkg.conf ]; then
2010-02-13 19:47:16 +01:00
. ~/.makepkg.conf
fi
cmd=$(basename "$0")
if [ ! -f PKGBUILD ]; then
2010-02-13 19:47:16 +01:00
abort 'No PKGBUILD file'
fi
2010-02-13 19:47:16 +01:00
. PKGBUILD
pkgbase=${pkgbase:-$pkgname}
case "$cmd" in
commitpkg)
if [ $# -eq 0 ]; then
abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
fi
repo="$1"
shift
;;
*pkg)
repo="${cmd%pkg}"
;;
*)
2010-02-13 19:47:16 +01:00
abort 'usage: commitpkg <reponame> [-l limit] [commit message]'
;;
esac
case "$repo" in
core|extra|testing|staging)
server='gerolde.archlinux.org' ;;
community*|multilib*)
server='aur.archlinux.org' ;;
*)
server='gerolde.archlinux.org'
echo "Non-standard repository $repo in use, defaulting to server $server" ;;
esac
# check if all local source files are under version control
for s in ${source[@]}; do
echo $s | grep -Fvq '://' && \
svn status $s | grep -q '^\?' && \
2010-02-13 19:47:16 +01:00
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
2010-02-11 15:27:24 +01:00
# see if any limit options were passed, we'll send them to rsync
rsyncopts="-e ssh -p --chmod 'ug=rw,o=r' -c -h -L --progress --partial -y"
2010-02-13 19:47:16 +01:00
if [ "$1" = '-l' ]; then
rsyncopts="$rsyncopts --bwlimit=$2"
2010-02-13 19:47:16 +01:00
shift 2
fi
echo -n 'committing changes to trunk...'
if [ -n "$1" ]; then
2010-02-13 19:47:16 +01:00
svn commit -q -m "upgpkg: $pkgbase $pkgver-$pkgrel
2010-02-11 14:01:45 +01:00
$1" || abort
else
2010-02-13 19:47:16 +01:00
svn commit -q || abort
fi
echo 'done'
for _arch in ${arch[@]}; do
2010-02-13 19:47:16 +01:00
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)
2010-02-13 19:47:16 +01:00
if [ -f "$pkgfile" ]; then
pkgfile="./$pkgfile"
elif [ -f "$pkgdestfile" ]; then
pkgfile="$pkgdestfile"
else
2010-02-13 19:47:16 +01:00
echo "skipping ${_arch}"
continue 2
fi
echo -n 'uploading '
rsync $rsyncopts "${pkgfile}" "$server:staging/$repo/${pkgfile##*/}" || abort
2010-02-13 19:47:16 +01:00
done
archrelease $repo-${_arch} || abort
done
2010-02-13 19:47:16 +01:00
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..."
2010-02-13 19:47:16 +01:00
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