#!/bin/bash
# LibreStage
# Prepares packages for upload into [staging]
# Copyright 2010 Nicolás Reynolds
# ---------- GNU General Public License 3 ----------
# This file is part of Parabola.
# Parabola is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Parabola is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Parabola. If not, see .
source /etc/libretools.conf
custom_config=$XDG_CONFIG_HOME/libretools/libretools.conf
[[ -e $custom_config ]] && source $custom_config
# End Config
usage() {
cat < [ ... ]
LibreRelease will stage for upload the package(s) built by the PKGBUILD on
the current directory to the specified repo(s).
EOU
}
repos=$@
while getopts 'h' arg; do
case $arg in
h) usage; exit 0 ;;
esac
done
if [ ${#repos} -eq 0 ]; then
usage
exit 1;
fi
[[ ! -e ./PKGBUILD ]] && {
error "PKGBUILD not found"
exit 1
}
# Source the needed files
source /etc/makepkg.conf
[[ -e ~/.makepkg.conf ]] && source ~/.makepkg.conf
source ./PKGBUILD
[[ -e ./rePKGBUILD ]] && source ./rePKGBUILD
# Default package location
PKGDEST=${PKGDEST:-.}
SRCPKGDEST=${SRCPKGDEST:-.}
PKGEXT=".pkg.tar.?z"
staged=false
# Copies the packages to the specified repos inside staging
for _arch in ${ARCHES[@]}; do
for pkg in ${pkgname[@]}; do
pkgpath=$(find ${PKGDEST}/ -type f \
-name "${pkg}-${pkgver}-${pkgrel}-${_arch}${PKGEXT}" -or \
-name "${pkg}-${epoch}:${pkgver}-${pkgrel}-${_arch}${PKGEXT}")
[[ -z ${pkgpath} ]] && continue
pkgfile=$(basename ${pkgpath})
if [ ! -z "${SIGID}" ]; then
sigpath=${pkgpath}${SIGEXT}
sigfile=${pkgfile}${SIGEXT}
msg "Signing package with ID ${SIGID}"
gpg --default-key "${SIGID}" --output ${sigpath} --detach-sig ${pkgpath} || {
error "Couldn't sign ${pkgfile}, aborting..."
exit 1
}
fi
if [ -e "${pkgpath}" ]; then
msg "Found ${pkgfile}"
canonical=""
for _repo in ${repos[@]}; do
if [ -z "$canonical" ]; then
canonical="${WORKDIR}/staging/${_repo}/${pkgfile}"
cp "${pkgpath}" "${WORKDIR}/staging/${_repo}/" || {
error "Can't put ${pkgfile} on [staging]"
exit 1
} && {
msg2 "${pkg} staged on [${_repo}]"
staged=true
}
if [ ! -z "${SIGID}" ]; then
canonical_sig="${WORKDIR}/staging/${_repo}/${pkgfile}${SIGEXT}"
cp "${sigpath}" "${WORKDIR}/staging/${_repo}/" || {
error "Can't put ${sigfile} on [staging]"
exit 1
} && {
msg2 "${pkg} signature on [${_repo}]"
}
fi
else
ln "${canonical}" "${WORKDIR}/staging/${_repo}/${pkgfile}" || {
error "Can't put ${pkgfile} on [staging]"
exit 1
} && {
msg2 "${pkg} staged on [${_repo}]"
staged=true
}
if [ ! -z "${SIGID}" ]; then
ln "${canonical_sig}" "${WORKDIR}/staging/${_repo}/${sigfile}" || {
error "Can't put ${sigfile} on [staging]"
exit 1
} && {
msg2 "${pkg} signature on [${_repo}]"
}
fi
fi
done
fi
done
done
if ! $staged ; then
error "No package was staged"
exit 1
fi
exit 0