summaryrefslogtreecommitdiff
path: root/src/abslibre-tools
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2020-07-14 09:45:44 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2020-11-20 22:53:30 -0500
commit3c86b7cd19def6c0b9c41ab8868ff3c07bf742a3 (patch)
tree29cd8e5419d68afb45b13bed691ef030f5e78cfb /src/abslibre-tools
parentd3a4b74c817fc8aa7fbcc67195ac2af3f1c7d66b (diff)
whitespace
Diffstat (limited to 'src/abslibre-tools')
-rwxr-xr-xsrc/abslibre-tools/librerelease434
1 files changed, 217 insertions, 217 deletions
diff --git a/src/abslibre-tools/librerelease b/src/abslibre-tools/librerelease
index c8518fb..83898af 100755
--- a/src/abslibre-tools/librerelease
+++ b/src/abslibre-tools/librerelease
@@ -47,266 +47,266 @@ setup_traps
dryrun=""
upload_only=false
readonly rsync_flags=(
- --no-group
- --no-perms
- --copy-links
- --hard-links
- --partial
- --human-readable
- --progress
+ --no-group
+ --no-perms
+ --copy-links
+ --hard-links
+ --partial
+ --human-readable
+ --progress
)
# Functions ####################################################################
list0_files() {
- find -L "${WORKDIR}/staging" -type f -not -name '*.lock' \
- -exec realpath -z --relative-to="${WORKDIR}/staging" {} +
+ find -L "${WORKDIR}/staging" -type f -not -name '*.lock' \
+ -exec realpath -z --relative-to="${WORKDIR}/staging" {} +
}
# This function is taken almost verbatim from makepkg
create_signature() {
- local ret=$EXIT_SUCCESS
- local filename="$1"
- msg "Signing package..."
+ local ret=$EXIT_SUCCESS
+ local filename="$1"
+ msg "Signing package..."
- local SIGNWITHKEY=()
- if [[ -n $GPGKEY ]]; then
- SIGNWITHKEY=(-u "${GPGKEY}")
- fi
+ local SIGNWITHKEY=()
+ if [[ -n $GPGKEY ]]; then
+ SIGNWITHKEY=(-u "${GPGKEY}")
+ fi
- gpg --detach-sign --use-agent "${SIGNWITHKEY[@]}" --no-armor "$filename" &>/dev/null || ret=$EXIT_FAILURE
+ gpg --detach-sign --use-agent "${SIGNWITHKEY[@]}" --no-armor "$filename" &>/dev/null || ret=$EXIT_FAILURE
- if (( ! ret )); then
- msg2 "Created signature file %s." "$filename.sig"
- else
- error "Failed to sign package file."
- return $ret
- fi
+ if (( ! ret )); then
+ msg2 "Created signature file %s." "$filename.sig"
+ else
+ error "Failed to sign package file."
+ return $ret
+ fi
}
sign_packages() {
- IFS=$'\n'
- local files=($(find "${WORKDIR}/staging/" -type f -not -iname '*.sig' -print))
- local file
- for file in "${files[@]}"; do
- if [[ -f "${file}.sig" ]]; then
- msg2 "File signature found, verifying..."
-
- # Verify that the signature is correct, else remove for re-signing
- if ! gpg --quiet --verify "${file}.sig" >/dev/null 2>&1; then
- error "Failed! Re-signing..."
- rm -f "${file}.sig"
- fi
- fi
-
- if ! [[ -f "${file}.sig" ]]; then
- create_signature "$file" || return
- fi
- done
+ IFS=$'\n'
+ local files=($(find "${WORKDIR}/staging/" -type f -not -iname '*.sig' -print))
+ local file
+ for file in "${files[@]}"; do
+ if [[ -f "${file}.sig" ]]; then
+ msg2 "File signature found, verifying..."
+
+ # Verify that the signature is correct, else remove for re-signing
+ if ! gpg --quiet --verify "${file}.sig" >/dev/null 2>&1; then
+ error "Failed! Re-signing..."
+ rm -f "${file}.sig"
+ fi
+ fi
+
+ if ! [[ -f "${file}.sig" ]]; then
+ create_signature "$file" || return
+ fi
+ done
}
# Clean everything if not in dry-run mode
clean_files() (
- local file_list=$1
-
- local rmcmd=(rm -fv)
- if [[ -n "${dryrun}" ]]; then
- rmcmd=(printf "$(_ "removed '%s' (dry-run)")\n")
- fi
-
- msg "Removing files from local staging directory"
- cd "${WORKDIR}/staging"
- xargs -0r -a "$file_list" "${rmcmd[@]}"
- find . -depth -mindepth 1 -type d \
- -exec rmdir --ignore-fail-on-non-empty -- '{}' +
+ local file_list=$1
+
+ local rmcmd=(rm -fv)
+ if [[ -n "${dryrun}" ]]; then
+ rmcmd=(printf "$(_ "removed '%s' (dry-run)")\n")
+ fi
+
+ msg "Removing files from local staging directory"
+ cd "${WORKDIR}/staging"
+ xargs -0r -a "$file_list" "${rmcmd[@]}"
+ find . -depth -mindepth 1 -type d \
+ -exec rmdir --ignore-fail-on-non-empty -- '{}' +
)
################################################################################
usage() {
- print "Usage: %s [OPTIONS]" "${0##*/}"
- print 'Upload packages in $WORKDIR/staging to the Parabola server'
- echo
- print "Options:"
- flag '-c' 'Clean; delete packages in $WORKDIR/staging'
- flag '-l' "List; list packages but not upload them"
- flag '-u' "Upload-only; do not run db-update on the server"
-
- flag '-n' "Dry-run; don't actually do anything"
- flag '-h' "Show this message"
+ print "Usage: %s [OPTIONS]" "${0##*/}"
+ print 'Upload packages in $WORKDIR/staging to the Parabola server'
+ echo
+ print "Options:"
+ flag '-c' 'Clean; delete packages in $WORKDIR/staging'
+ flag '-l' "List; list packages but not upload them"
+ flag '-u' "Upload-only; do not run db-update on the server"
+
+ flag '-n' "Dry-run; don't actually do anything"
+ flag '-h' "Show this message"
}
main() {
- if [[ -w / ]]; then
- error "This program should be run as regular user"
- return $EXIT_NOPERMISSION
- fi
-
- # Parse options
- local mode="release_packages"
- while getopts 'clunh' arg; do
- case $arg in
- c) mode=clean ;;
- l) mode=pretty_print_packages ;;
- u) upload_only=true ;;
- n) dryrun="--dry-run" ;;
- h) mode=usage ;;
- *) usage >&2; return $EXIT_INVALIDARGUMENT ;;
- esac
- done
- shift $((OPTIND - 1))
- if [[ $# != 0 ]]; then
- usage >&2
- return $EXIT_INVALIDARGUMENT
- fi
-
- if [[ $mode == usage ]]; then
- usage
- return $EXIT_SUCCESS
- fi
-
- declare -i ret=0
- load_conf makepkg.conf GPGKEY || ret=$?
- load_conf libretools.conf WORKDIR REPODEST DBSCRIPTS_CONFIG || ret=$? # and HOOK{PRE,POST}RELEASE, which are optional
- [[ $ret = 0 ]] || exit $ret
-
- local re_url='^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$'
- local re_authority='^(([^@]*)@)?([^][@:]*|\[[^]]*\])(:([0-9]*))?$'
- local REPODEST_ok=false
- if [[ "$REPODEST" =~ $re_url ]]; then
- REPODEST_ok=true
-
- REPODEST_scheme=${BASH_REMATCH[2]}
- REPODEST_authority=${BASH_REMATCH[4]}
- REPODEST_path=${BASH_REMATCH[5]}
- REPODEST_query=${BASH_REMATCH[7]}
- REPODEST_fragment=${BASH_REMATCH[9]}
-
- if [[ "$REPODEST_authority" =~ $re_authority ]]; then
- REPODEST_userinfo=${BASH_REMATCH[2]}
- REPODEST_host=${BASH_REMATCH[3]}
- REPODEST_port=${BASH_REMATCH[5]}
-
- if [[ "$REPODEST_host" = '['*']' ]]; then
- REPODEST_host=${REPODEST_HOST#'['}
- REPODEST_host=${REPODEST_HOST#']'}
- fi
- else
- REPODEST_ok=false
- fi
-
- [[ $REPODEST_scheme == ssh ]] || REPODEST_ok=false
- [[ -n $REPODEST_host ]] || REPODEST_ok=false
- [[ -n $REPODEST_path ]] || REPODEST_ok=false
- fi
- if ! $REPODEST_ok; then
- error 'The format of libretools.conf:REPODEST has changed.'
- plain 'Merge the /etc/libretools.conf.pacnew file!'
- return $EXIT_NOTCONFIGURED
- fi
- if [[ "$REPODEST_path" = '/~'* ]]; then
- if [[ "$REPODEST_path" = '/~/'* ]]; then
- REPODEST_path=${REPODEST_path#'/~/'}
- else
- error 'Unfortunately, `~user` home-directory expansion is not (yet?) supported in libretools.conf:REPODEST'
- return $EXIT_NOTCONFIGURED
- fi
- fi
- REPODEST_userhost="${REPODEST_userinfo:+${REPODEST_userinfo%%:*}@}${REPODEST_host}"
-
- "$mode"
+ if [[ -w / ]]; then
+ error "This program should be run as regular user"
+ return $EXIT_NOPERMISSION
+ fi
+
+ # Parse options
+ local mode="release_packages"
+ while getopts 'clunh' arg; do
+ case $arg in
+ c) mode=clean ;;
+ l) mode=pretty_print_packages ;;
+ u) upload_only=true ;;
+ n) dryrun="--dry-run" ;;
+ h) mode=usage ;;
+ *) usage >&2; return $EXIT_INVALIDARGUMENT ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+ if [[ $# != 0 ]]; then
+ usage >&2
+ return $EXIT_INVALIDARGUMENT
+ fi
+
+ if [[ $mode == usage ]]; then
+ usage
+ return $EXIT_SUCCESS
+ fi
+
+ declare -i ret=0
+ load_conf makepkg.conf GPGKEY || ret=$?
+ load_conf libretools.conf WORKDIR REPODEST DBSCRIPTS_CONFIG || ret=$? # and HOOK{PRE,POST}RELEASE, which are optional
+ [[ $ret = 0 ]] || exit $ret
+
+ local re_url='^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$'
+ local re_authority='^(([^@]*)@)?([^][@:]*|\[[^]]*\])(:([0-9]*))?$'
+ local REPODEST_ok=false
+ if [[ "$REPODEST" =~ $re_url ]]; then
+ REPODEST_ok=true
+
+ REPODEST_scheme=${BASH_REMATCH[2]}
+ REPODEST_authority=${BASH_REMATCH[4]}
+ REPODEST_path=${BASH_REMATCH[5]}
+ REPODEST_query=${BASH_REMATCH[7]}
+ REPODEST_fragment=${BASH_REMATCH[9]}
+
+ if [[ "$REPODEST_authority" =~ $re_authority ]]; then
+ REPODEST_userinfo=${BASH_REMATCH[2]}
+ REPODEST_host=${BASH_REMATCH[3]}
+ REPODEST_port=${BASH_REMATCH[5]}
+
+ if [[ "$REPODEST_host" = '['*']' ]]; then
+ REPODEST_host=${REPODEST_HOST#'['}
+ REPODEST_host=${REPODEST_HOST#']'}
+ fi
+ else
+ REPODEST_ok=false
+ fi
+
+ [[ $REPODEST_scheme == ssh ]] || REPODEST_ok=false
+ [[ -n $REPODEST_host ]] || REPODEST_ok=false
+ [[ -n $REPODEST_path ]] || REPODEST_ok=false
+ fi
+ if ! $REPODEST_ok; then
+ error 'The format of libretools.conf:REPODEST has changed.'
+ plain 'Merge the /etc/libretools.conf.pacnew file!'
+ return $EXIT_NOTCONFIGURED
+ fi
+ if [[ "$REPODEST_path" = '/~'* ]]; then
+ if [[ "$REPODEST_path" = '/~/'* ]]; then
+ REPODEST_path=${REPODEST_path#'/~/'}
+ else
+ error 'Unfortunately, `~user` home-directory expansion is not (yet?) supported in libretools.conf:REPODEST'
+ return $EXIT_NOTCONFIGURED
+ fi
+ fi
+ REPODEST_userhost="${REPODEST_userinfo:+${REPODEST_userinfo%%:*}@}${REPODEST_host}"
+
+ "$mode"
}
# The different modes (sans 'usage') ###########################################
pretty_print_packages() {
- find "$WORKDIR/staging/" -mindepth 1 -maxdepth 1 -type d -not -empty | sort |
- while read -r path; do
- msg2 "${path##*/}"
- cd "$path"
- find -L . -type f -not -name '*.lock' | sed 's|^\./| |' | sort
- done
+ find "$WORKDIR/staging/" -mindepth 1 -maxdepth 1 -type d -not -empty | sort |
+ while read -r path; do
+ msg2 "${path##*/}"
+ cd "$path"
+ find -L . -type f -not -name '*.lock' | sed 's|^\./| |' | sort
+ done
}
clean() {
- lock 8 "${WORKDIR}/staging.lock" \
- 'Waiting for an exclusive lock on the staging directory'
+ lock 8 "${WORKDIR}/staging.lock" \
+ 'Waiting for an exclusive lock on the staging directory'
- local file_list
- file_list="$(mktemp -t "${0##*/}.XXXXXXXXXX")"
- trap "rm -f -- ${file_list@Q}" EXIT
- list0_files > "$file_list"
+ local file_list
+ file_list="$(mktemp -t "${0##*/}.XXXXXXXXXX")"
+ trap "rm -f -- ${file_list@Q}" EXIT
+ list0_files > "$file_list"
- lock_close 8
+ lock_close 8
- clean_files "$file_list"
+ clean_files "$file_list"
}
release_packages() {
- if [[ -n $HOOKPRERELEASE ]]; then
- msg "Running HOOKPRERELEASE..."
- (
- PS4=" \\[$BOLD\\]\$\\[$ALL_OFF\\] "
- eval -- "set -x; $HOOKPRERELEASE"
- )
- fi
-
- lock 8 "${WORKDIR}/staging.lock" \
- 'Waiting for an exclusive lock on the staging directory'
-
- sign_packages || return
-
- # Make the permissions of the packages 644 otherwise the user will get access
- # denied error when they try to download (rsync --no-perms doesn't seem to
- # work).
- find "${WORKDIR}/staging" -type f -exec chmod 644 {} +
- find "${WORKDIR}/staging" -type d -exec chmod 755 {} +
-
- local file_list="$(mktemp -t ${0##*/}.XXXXXXXXXX)"
- trap "rm -f -- ${file_list@Q}" EXIT
- list0_files > "$file_list"
-
- lock_close 8
-
- msg "%s to upload" "$(cd "${WORKDIR}/staging" && du -hc --files0-from="$file_list" | sed -n '$s/\t.*//p')"
- msg "Uploading packages..."
- xargs -0r -a "$file_list" dirname -z | ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "mkdir -p -- ${REPODEST_path@Q} && cd ${REPODEST_path@Q} && xargs -0r mkdir -pv --"
- if ! rsync ${dryrun} "${rsync_flags[@]}" \
- -e "ssh ${REPODEST_port:+-p $REPODEST_port}" \
- -0 --files-from="$file_list" \
- "${WORKDIR}/staging" \
- "$REPODEST_userhost:$REPODEST_path/"
- then
- error "Sync failed, try again"
- return $EXIT_FAILURE
- fi
-
- clean_files "$file_list"
-
- if $upload_only; then
- return $EXIT_SUCCESS
- fi
-
- msg "Running db-update on repos"
- ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "STAGING=${REPODEST_path@Q} DBSCRIPTS_CONFIG=${DBSCRIPTS_CONFIG@Q} db-update"
-
- if [[ -n $HOOKPOSTRELEASE ]]; then
- msg "Running HOOKPOSTRELEASE..."
- (
- PS4=" \\[$BOLD\\]\$\\[$ALL_OFF\\] "
- eval -- "set -x; $HOOKPOSTRELEASE"
- )
- fi
-
- # notify pbot of the excellent work we have done
- local packages=$(grep -E '\.pkg\.tar\.[^\.]+$' ${file_list} | sed 's|.*/\([^/ ]*\)/[^\ ]*$|\1|' | xargs)
- local login=${REPODEST_userinfo:-somebody} ; login=${login%%:*} ;
- local pbot_say_cmd="which pbot-say && pbot-say ${login} just published: ${packages}"
- ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "${pbot_say_cmd}"
-
- return $EXIT_SUCCESS
+ if [[ -n $HOOKPRERELEASE ]]; then
+ msg "Running HOOKPRERELEASE..."
+ (
+ PS4=" \\[$BOLD\\]\$\\[$ALL_OFF\\] "
+ eval -- "set -x; $HOOKPRERELEASE"
+ )
+ fi
+
+ lock 8 "${WORKDIR}/staging.lock" \
+ 'Waiting for an exclusive lock on the staging directory'
+
+ sign_packages || return
+
+ # Make the permissions of the packages 644 otherwise the user will get access
+ # denied error when they try to download (rsync --no-perms doesn't seem to
+ # work).
+ find "${WORKDIR}/staging" -type f -exec chmod 644 {} +
+ find "${WORKDIR}/staging" -type d -exec chmod 755 {} +
+
+ local file_list="$(mktemp -t ${0##*/}.XXXXXXXXXX)"
+ trap "rm -f -- ${file_list@Q}" EXIT
+ list0_files > "$file_list"
+
+ lock_close 8
+
+ msg "%s to upload" "$(cd "${WORKDIR}/staging" && du -hc --files0-from="$file_list" | sed -n '$s/\t.*//p')"
+ msg "Uploading packages..."
+ xargs -0r -a "$file_list" dirname -z | ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "mkdir -p -- ${REPODEST_path@Q} && cd ${REPODEST_path@Q} && xargs -0r mkdir -pv --"
+ if ! rsync ${dryrun} "${rsync_flags[@]}" \
+ -e "ssh ${REPODEST_port:+-p $REPODEST_port}" \
+ -0 --files-from="$file_list" \
+ "${WORKDIR}/staging" \
+ "$REPODEST_userhost:$REPODEST_path/"
+ then
+ error "Sync failed, try again"
+ return $EXIT_FAILURE
+ fi
+
+ clean_files "$file_list"
+
+ if $upload_only; then
+ return $EXIT_SUCCESS
+ fi
+
+ msg "Running db-update on repos"
+ ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "STAGING=${REPODEST_path@Q} DBSCRIPTS_CONFIG=${DBSCRIPTS_CONFIG@Q} db-update"
+
+ if [[ -n $HOOKPOSTRELEASE ]]; then
+ msg "Running HOOKPOSTRELEASE..."
+ (
+ PS4=" \\[$BOLD\\]\$\\[$ALL_OFF\\] "
+ eval -- "set -x; $HOOKPOSTRELEASE"
+ )
+ fi
+
+ # notify pbot of the excellent work we have done
+ local packages=$(grep -E '\.pkg\.tar\.[^\.]+$' ${file_list} | sed 's|.*/\([^/ ]*\)/[^\ ]*$|\1|' | xargs)
+ local login=${REPODEST_userinfo:-somebody} ; login=${login%%:*} ;
+ local pbot_say_cmd="which pbot-say && pbot-say ${login} just published: ${packages}"
+ ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "${pbot_say_cmd}"
+
+ return $EXIT_SUCCESS
}
main "$@"