# todo: if we cancel in the middle of a btrfs send, then run again immediately, the received subvolume doesn't get a Received UUID: field, and we won't mount it. Need to figure out a solution that will fix this.
-set -eE -o pipefail
-trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+err-bash-trace() {
+ local -i argc_index=0 frame i start=${1:-0} max_indent=8 indent
+ local source
+ local extdebug=false
+ if [[ $(shopt -p extdebug) == *-s* ]]; then
+ extdebug=true
+ fi
+ for ((frame=0; frame < ${#FUNCNAME[@]}-1; frame++)); do
+ argc=${BASH_ARGC[frame]}
+ argc_index+=$argc
+ ((frame < start)) && continue
+ if (( ${#BASH_SOURCE[@]} > 1 )); then
+ source="${BASH_SOURCE[frame+1]}:${BASH_LINENO[frame]}:"
+ fi
+ indent=$((frame-start + 1))
+ indent=$((indent < max_indent ? indent : max_indent))
+ printf "%${indent}s↳%sin \`%s" '' "$source" "${FUNCNAME[frame]}"
+ if $extdebug; then
+ for ((i=argc_index-1; i >= argc_index-argc; i--)); do
+ printf " %s" "${BASH_ARGV[i]}"
+ done
+ fi
+ echo \'
+ done
+ return 0
+}
+err-catch() {
+ set -E; shopt -s extdebug
+ _err-trap() {
+ err=$?
+ exec >&2
+ set +x
+ echo "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: \`$BASH_COMMAND' returned $err"
+ err-bash-trace 2
+ set -e # err trap does not work within an error trap
+ "${_errcatch_cleanup[@]:-:}" # note :-: is to be compatible with set -u
+ echo "$0: exiting with code $err"
+ exit $err
+ }
+ trap _err-trap ERR
+ set -o pipefail
+}
+err-catch
+
[[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@"
die() { printf "$pre %s\n" "$*" >&2; exit 1; }
# latest $MAIL_HOST
-if [[ -e /b/bash_unpublished/source-semi-priv ]]; then
- source /b/bash_unpublished/source-semi-priv
+if [[ -e /b/bash_unpublished/source-state ]]; then
+ source /b/bash_unpublished/source-state
fi
# note q is owned by root:1000
if ping -q -c1 -w1 iank.vpn.office.fsf.org &>/dev/null; then
home=iank.vpn.office.fsf.org
else
- home=$HOME_DOMAIN
+ home=b8.nz
fi
;;&
kw)