summaryrefslogtreecommitdiff
path: root/src/abslibre-tools/librerelease
diff options
context:
space:
mode:
Diffstat (limited to 'src/abslibre-tools/librerelease')
-rwxr-xr-xsrc/abslibre-tools/librerelease53
1 files changed, 48 insertions, 5 deletions
diff --git a/src/abslibre-tools/librerelease b/src/abslibre-tools/librerelease
index 643bfb8..51cf6de 100755
--- a/src/abslibre-tools/librerelease
+++ b/src/abslibre-tools/librerelease
@@ -51,7 +51,6 @@ readonly rsync_flags=(
--partial
--human-readable
--progress
- -e ssh
)
# Functions ####################################################################
@@ -181,7 +180,50 @@ main() {
return 6
fi
- REPODEST+='/staging/'
+ 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]}
+ else
+ REPODEST_ok=false
+ fi
+
+ [[ $REPODEST_scheme == ssh ]] || REPODEST_ok=false
+ [[ -n $REPODEST_authority ]] || REPODEST_ok=false
+ [[ -n $REPODEST_path ]] || REPODEST_ok=false
+ [[ -n $REPODEST_userhost ]] || 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 6
+ 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 6
+ fi
+ fi
+ if [[ "$REPODEST_host" = '['*']' ]]; then
+ REPODEST_host=${REPODEST_HOST#'['}
+ REPODEST_host=${REPODEST_HOST#']'}
+ fi
+ REPODEST_userhost="${REPODEST_userinfo:+${REPODEST_userinfo%%:*}@}${REPODEST_host}"
"$mode"
}
@@ -237,11 +279,12 @@ release_packages() {
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%%:*}" "$(printf 'mkdir -p -- %q && cd %q && xargs -0r mkdir -pv --' "${REPODEST#*:}"{,})"
+ xargs -0r -a "$file_list" dirname -z | ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "$(printf 'mkdir -p -- %q && cd %q && xargs -0r mkdir -pv --' "${REPODEST_path}"{,})"
if ! rsync ${dryrun} "${rsync_flags[@]}" \
+ -e "ssh ${REPODEST_port:+-p $REPODEST_port}" \
-0 --files-from="$file_list" \
"${WORKDIR}/staging" \
- "${REPODEST}/"
+ "$REPODEST_userhost:$REPODEST_path/"
then
error "Sync failed, try again"
return 1
@@ -254,7 +297,7 @@ release_packages() {
fi
msg "Running db-update on repos"
- ssh "${REPODEST%%:*}" "$(printf 'STAGING=%q db-update' "${REPODEST#*:}")"
+ ssh ${REPODEST_port:+-p "$REPODEST_port"} "${REPODEST_userhost}" "$(printf 'STAGING=%q db-update' "$REPODEST_path")"
if [[ -n $HOOKPOSTRELEASE ]]; then
msg "Running HOOKPOSTRELEASE..."