#!/usr/bin/env bash # Copyright (C) 2012-2013 Luke Shumaker # # License: GNU GPLv2+ # # 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, see . lockarch() { local arch=$1 lock 9 "${ABSLIBREDEST}/${arch}.lock" \ "Waiting for a lock on the ABSLibre release directory for %s" "${arch}" } unlockarch() { lock_close 9 } conf() { . libremessages . "$(librelib conf)" load_files libretools check_vars libretools "$@" || exit 1 } ################################################################################ status() { [[ -z $(git status -s .) ]] } download() { conf WORKDIR ABSLIBRERECV ABSLIBRESEND gitget -f -p "$ABSLIBRESEND" checkout "$ABSLIBRERECV" "$WORKDIR/abslibre" || return 1 } release-client() { local repo=$1 local arch=$2 conf ABSLIBREDEST local pkgbase="$(load_PKGBUILD >/dev/null; printf '%s\n' "${pkgbase:-${pkgname}}")" local pkgdir="${ABSLIBREDEST}/${arch}/${repo}/${pkgbase}" lockarch "$arch" if [[ -e $pkgdir ]]; then rm -rf -- "$pkgdir" fi mkdir -p -- "$pkgdir" git ls-files -z | xargs -0 -I{} cp -- {} "$pkgdir" } release-server() { local repo=$1 local repo=$2 conf ABSLIBREDEST local pkgbase="$(load_PKGBUILD >/dev/null; printf '%s\n' "${pkgbase:-${pkgname}}")" local pkgdir="${ABSLIBREDEST}/${arch}/${repo}/${pkgbase}" lockarch "$arch" if [[ -e $pkgdir ]]; then rm -rf -- "$pkgdir" fi mkdir -p -- "$pkgdir" cp -- * "$pkgdir" if [[ -e "${ABSLIBREDEST}/${arch}/.git" ]]; then cd "$pkgdir" git add . git commit -q -m "xbs-abslibre: Release ${repo}/${pkgbase} for ${arch} (by $(id -un))" fi local olddir for olddir in "${ABSLIBREDEST}"/*/"${repo}/${pkgbase}/PKGBUILD"; do local oldarch=${olddir#"${ABSLIBREDEST}"}; oldarch="${oldarch%%/*}" unrelease "$pkgbase" "$repo" "$oldarch" done } unrelease() { local pkgbase=$1 local repo=$2 local arch=$3 conf ABSLIBREDEST local pkgbase="$(load_PKGBUILD >/dev/null; printf '%s\n' "${pkgbase:-${pkgname}}")" local pkgdir="${ABSLIBREDEST}/${arch}/${repo}/${pkgbase}" lockarch "$arch" if [[ -f "${pkgdir}/PKGBUILD" ]]; then if [[ -e "${ABSLIBREDEST}/${arch}/.git" ]]; then git rm -qrf -- "$pkgdir" git commit -q -m "xbs-abslibre: Remove ${repo}/${pkgbase} from ${arch} (by $(id -un))" else rm -rf -- "$pkgdir" fi fi } move() { local repo_from=$1 local repo_to=$2 local pkgbase=$3 conf ABSLIBREDEST ARCHES local mv local arch for arch in "${ARCHES[@]}" any; do lockarch "$arch" local dir_from="${ABSLIBREDEST}/${arch}/${repo_from}/${pkgbase}" local dir_to="${ABSLIBREDEST}/${arch}/${repo_to}/${pkgbase}" if [[ -f "${dir_from}/PKGBUILD" ]]; then if [[ -e "${ABSLIBREDEST}/${arch}/.git" ]]; then if [[ -e "${dir_to}" ]]; then git rm -qrf -- "$dir_to" fi mkdir -p -- "${dir_to%/*}" git mv -- "$dir_from" "$dir_to" git commit -q -m "xbs-abslibre: Move ${pkgbase} from ${repo_from} to ${repo_to} on ${arch} (by $(id -un))" else rm -rf -- "$dir_to" mkdir -p -- "${dir_to%/*}" mv "$dir_from" "$dir_to" fi fi unlock arch done } releasepath() { local pkgbase=$1 local repo=$2 local arch=$3 conf ABSLIBREDEST local pkgdir="${ABSLIBREDEST}/${arch}/${repo}/${pkgbase}" lockarch "$arch" if [[ -f "${pkgdir}/PKGBUILD" ]]; then printf '%s\n' "$pkgdir" return 0 fi return 1 } case "$1" in status|download|release-client|release-server|unrelease|move|releasepath) "$@";; *) exit 127;; esac