#!/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