Newer
Older
# Copyright © Sébastien Luttringer
#
# This program 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 2
# of the License, or (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
repo_32="$repo/i686"
repo_64="$repo/x86_64"
[[ -r /etc/makepkg.conf ]] && source /etc/makepkg.conf
[[ -r "$HOME/.makepkg.conf" ]] && source "$HOME/.makepkg.conf"
if [[ -t 0 && -t 2 ]]; then
GREEN='1;32m'
BLUE='1;34m'
BOLD='0;1m'
RESET='m'
fi
printf "$BLUE ->$BOLD $1$RESET\n" "${@:1}"
}
usage() {
echo "usage: ${0##*/} [options] pkg ..." >&2
echo 'options:' >&2
echo " -r: remove package after addition" >&2
exit 2
# usage : in_array( $needle, $haystack )
# return : 0 - found
# 1 - not found
in_array() {
local needle=$1; shift
local item
for item in "$@"; do
[[ $item = $needle ]] && return 0 # Found
done
return 1 # Not Found
}
# $1: srouce
# $2: destination
cp_acl() {
rm -f "$2"
touch "$2"
cat < "$1" > "$2"
}
sign_pkg() {
msg 'Sign packages'
for _pkg; do
if [[ ! -f "$_pkg.sig" ]]; then
msg2 "Signing $_pkg"
gpg --detach-sign "$_pkg" || exit 1
fi
done
}
# add pkg ($2..$n) in argument into repo $1
add_pkg() {
(( $# > 1 )) || return
local repo="$1"
shift
# copy files
for _pkg; do
msg2 "Copying $_pkg"
cp_acl "$_pkg" "$repo/$_pkg" || exit 2
cp_acl "$_pkg.sig" "$repo/$_pkg.sig" || exit 2
while getopts 'hr' opt; do
case $opt in
r) remove=1;;
*) usage;;
esac
done
shift $((OPTIND - 1));
(( $# >= 1 )) || usage
for _pkg; do
case "$_pkg" in
*-i686$PKGEXT) to_32+=("$_pkg");;
*-x86_64$PKGEXT) to_64+=("$_pkg");;
*-any$PKGEXT) to_32+=("$_pkg"); to_64+=("$_pkg");;
esac
done
if (( ${#to_32[@]} + ${#to_64[@]} == 0 )); then
echo 'No package to add' >&2
exit 2
fi
sign_pkg "${to_32[@]}" "${to_64[@]}"
# add i686 packages
add_pkg "$repo_32" "${to_32[@]}"
# add x86_64 packages
add_pkg "$repo_64" "${to_64[@]}"
# delete packages
for _pkg in "${to_32[@]}" "${to_64[@]}"; do
rm -f "$_pkg" "$_pkg.sig"
done
# harlinking
if type -P hardlink >/dev/null; then
hardlink -c "$repo" >/dev/null
fi