summaryrefslogtreecommitdiff
path: root/src/abslibre-tools
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2013-06-01 19:23:19 -0600
committerLuke Shumaker <LukeShu@sbcglobal.net>2013-06-05 20:01:05 -0600
commit8e5744170c30d50ef1f3e3a3e52c595870c6e50a (patch)
tree797e4d33a4e0da370e68ebcd9a80b9daa0d7fa52 /src/abslibre-tools
parentabac8a47a9e8bbccb7eb866c2fa0796cc5c39edc (diff)
librestage: clean up, add unit tests
Contained the text "# TODO refactor this", and I can't just stick to that fragment of code, can I? I actually didn't change too much, despite what the diff looks like. - move everything into a main() routine - redo the usage() text - rename a few variables - fix where "${#repos}" should have been "${#repos[@]}" - use [[...]] instead of [...] - use "if A; then B; else C; fi" instead of "A || C && B" - use CARCH instead of looping over every possible architecture. - only look for files that match PKGEXT, as set in makepkg.conf - pull out duplicate code for error handling - don't warn when creating "staging/REPONAME"
Diffstat (limited to 'src/abslibre-tools')
-rwxr-xr-xsrc/abslibre-tools/librestage201
1 files changed, 89 insertions, 112 deletions
diff --git a/src/abslibre-tools/librestage b/src/abslibre-tools/librestage
index 528a0be..52e761a 100755
--- a/src/abslibre-tools/librestage
+++ b/src/abslibre-tools/librestage
@@ -1,137 +1,114 @@
#!/bin/bash
# LibreStage
-# Prepares packages for upload into [staging]
-
-# Copyright 2010 Nicolás Reynolds
-
-# ---------- GNU General Public License 3 ----------
+# Prepares packages for upload
+# Copyright 2010-2011 Nicolás Reynolds
+# Copyright 2013 Luke Shumaker
+#
# 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 <http://www.gnu.org/licenses/>.
-
. libremessages
. $(librelib conf.sh)
-load_files libretools
-check_vars libretools ARCHES WORKDIR || exit 1
-
-if [ -w / ]; then
- error "This script should be run as regular user"
- exit 1
-fi
-
-
-# End Config
+cmd=${0##*/}
usage() {
- cat <<EOU
-LibreStage Copyright (C) 2011 Nicolás Reynolds
-This program comes with ABSOLUTELY NO WARRANTY.
-This is free software, and you are welcome to redistribute it
-under the terms of the GNU General Public License version 3 or later.
-
-
-Usage: $(basename $0) <repo> [<repo2> ... ]
-
-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
+ print "Usage: %s REPO [REPO2 REPO3...]" "$cmd"
+ print "Stages the package(s) build by ./PKGBUILD for upload."
+ echo
+ print "The package(s) are staged for the named repositories."
+ print "It is in general a bad idea to stage a package on multiple"
+ print "repositories, but it supported by this tool."
}
-# Source the needed files
-load_files makepkg
-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}-$(get_full_version "${pkg}")-${_arch}${PKGEXT}")
-
- [[ -z ${pkgpath} ]] && continue
-
- pkgfile=$(basename ${pkgpath})
-
- # TODO refactor this
- if [ -e "${pkgpath}" ]; then
- msg "Found ${pkgfile}"
-
- canonical=""
- for _repo in ${repos[@]}; do
-
- if [ ! -d "${WORKDIR}/staging/${_repo}" ]; then
- warning "[${_repo}] didn't exist, creating..."
- mkdir -p "${WORKDIR}/staging/${_repo}"
- fi
-
- 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
- }
-
- else
- ln "${canonical}" "${WORKDIR}/staging/${_repo}/${pkgfile}" || {
- error "Can't put ${pkgfile} on [staging]"
- exit 1
- } && {
- msg2 "${pkg} staged on [${_repo}]"
- staged=true
- }
-
- fi
- done
+main() {
+ # Parse options, set up
+ while getopts 'h' arg; do
+ case $arg in
+ h) usage; return 0;;
+ *) usage >/dev/stderr; return 1;;
+ esac
+ done
+ repos=("$@")
+ if [[ ${#repos[@]} == 0 ]]; then
+ usage >>/dev/stderr
+ return 1;
+ fi
+
+ if [[ -w / ]]; then
+ error "This script should be run as regular user"
+ return 1
+ fi
+
+ [[ ! -e ./PKGBUILD ]] && {
+ error "PKGBUILD not found"
+ return 1
+ }
+
+ # Load configuration
+
+ load_files libretools
+ check_vars libretools WORKDIR || return 1
+
+ load_files makepkg
+
+ # Load the PKGBUILD
+ source ./PKGBUILD
+ if [[ $arch == 'any' ]]; then
+ CARCH='any'
+ fi
+
+ # Now for the main routine.
+ staged=false
+ for _pkgname in "${pkgname[@]}"; do
+ pkgfile=${_pkgname}-$(get_full_version $_pkgname)-${CARCH}${PKGEXT}
+ pkgpath="$(find . "$PKGDEST" -maxdepth 1 -type f -name "$pkgfile"|sed 1q)"
+
+ if [[ ! -f "${pkgpath}" ]]; then
+ continue
+ else
+ pkgpath="$(readlink -f "$pkgpath")"
fi
+
+ msg "Found ${pkgfile}"
+
+ canonical="" # is empty for the first iteration, set after that
+ for repo in "${repos[@]}"; do
+ mkdir -p "${WORKDIR}/staging/${repo}"
+ if [[ -z $canonical ]]; then
+ canonical="${WORKDIR}/staging/${repo}/${pkgfile}"
+ cmd=(cp "$pkgpath" "$canonical")
+ else
+ cmd=(ln "$canonical" "${WORKDIR}/staging/${repo}/${pkgfile}")
+ fi
+ if "${cmd[@]}"; then
+ msg2 "%s staged on [%s]" "$_pkgname" "$repo"
+ staged=true
+ else
+ error "Can't put %s on [%s]" "$_pkgname" "$repo"
+ return 1
+ fi
+ done
done
-done
-if ! $staged ; then
- error "No package was staged"
- exit 1
-fi
+ if $staged ; then
+ return 0
+ else
+ error "No package was staged"
+ return 1
+ fi
+}
-exit 0
+main "$@"