#!/bin/bash # 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. repourl=${REPO_URL:-archlinux@white.v.seblu.net:2222} repodir=${REPO_DIR:-incoming} shopt -s nullglob declare -a to_commit if [[ -t 0 && -t 2 ]]; then RED=$'\e''[1;31m' GREEN=$'\e''[1;32m' BLUE=$'\e''[1;34m' BOLD=$'\e''[0;1m' RESET=$'\e''[m' fi msg() { printf "$GREEN==>$BOLD $1$RESET\n" "${@:1}" } msg2() { printf "$BLUE ->$BOLD $1$RESET\n" "${@:1}" } source_pkgbuild() { [[ ! -f PKGBUILD ]] && echo 'No PKGBUILD' && exit 1 source /usr/share/devtools/makepkg-x86_64.conf [[ -r "$HOME/.makepkg.conf" ]] && source "$HOME/.makepkg.conf" source PKGBUILD [[ $(type -t pkgver) == 'function' ]] && pkgver=$(pkgver) for _pkgname in "${pkgname[@]}"; do # define filename base # handle epoch which is optional filebase="$_pkgname-" [[ -n $epoch ]] && (( $epoch > 0 )) && filebase+="$epoch:" filebase+="$pkgver-$pkgrel" for _arch in "${arch[@]}"; do filename="$filebase-$_arch$PKGEXT" [[ -f "$filename" ]] && to_commit+=("$filename") done done } # push package to remote repository push_pkg() { (( $# > 0 )) || return msg "Pushing packages into $repourl" # copy files for _pkg; do msg2 "Copying $_pkg" scp -p "./$_pkg" "scp://$repourl/$repodir" || exit 2 done } # if packages are on command line add them, otherwise look in PKGBUILD if (( $# > 0 )); then for _pkg; do [[ "$_pkg" =~ .*\.pkg\.tar\.(xz|zst) ]] && to_commit+=("$_pkg") done else # try to find those in a PKGBUILD file source_pkgbuild # when no package found, push all packages in the current directory if (( ${#to_commit[@]} == 0 )); then to_commit=(*\.pkg\.tar\.{xz,zst}) fi fi # exit early when no job if (( ${#to_commit[@]} == 0 )); then echo -e "${RED}No package to add${RESET}" >&2 exit 2 fi push_pkg "${to_commit[@]}" ssh "ssh://$repourl" -- "cd $repodir && seblu-commit" '-r' "${to_commit[@]}" # vim:set ts=2 sw=2 ft=sh noet: