127 lines
2.9 KiB
Bash
Executable File
127 lines
2.9 KiB
Bash
Executable File
#!/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}
|
|
}
|
|
|
|
# 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" == '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 <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 -vq '://' && \
|
|
svn status $s | grep -q '?' && \
|
|
abort "$s is not under version control"
|
|
done) || true
|
|
|
|
# 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) || true
|
|
|
|
# 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
|
|
pkgfile=$(getpkgfile "$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null)
|
|
pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$pkgver-$pkgrel-${_arch}".pkg.tar.* 2>/dev/null)
|
|
|
|
if [ ! -f "$pkgfile" -a -f "$pkgdestfile" ]; then
|
|
pkgfile="$pkgdestfile"
|
|
elif [ ! -f "$pkgfile" ]; then
|
|
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 || 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
|