#!/bin/bash source() { if [[ $1 != */* ]] && ( command -v base64_embedded_source__"$1" || command -v src/"$1" ) >&2 # >/dev/null then rewrite_self \ "$1" \ src/"$1" \ base64_embedded_source__"$1" \ "${@:2}" else builtin source "$@" fi } rewrite_self() { # TODO: Check if version in src/ updates this version # by checking for its hash in a record kept in the source # file in src/ if command -v "$3" >/dev/null then ( set +e sha256sum <("$3") >&2 sha256sum <(builtin source "$2" "${@:4}" && "$3") >&2 ) builtin source \ <("$3") \ "${@:4}" return fi [ -f "$2" -a -r "$2" ] || return declare -n tmpfile=tmpfile${RANDOM} tmpfile=$(mktemp) || return if embed "$1" "$2" > "$tmpfile" && builtin source "$tmpfile" && command -v "$3" >/dev/null && builtin source <("$3") "${@:4}" && [ -w "$0" ] && sed \ -i~"$(date -Ins)" \ -e "1 { r ${tmpfile}"$'\n'" }" \ "$0" then local r=0 else local r=$? fi rm "$tmpfile" return $r } embed() { cat <<. base64_embedded_source__${1}() { base64 -d <<. $(base64 < "$2" && echo .) } . } print_test_script_for_SOURCES.bash() { cat <<. #!/bin/bash source SOURCES.bash source SOURCES.bash source rpc.bash : base64_embedded_source__rpc.bash : base64_embedded_source__dependencies.bash BASH_RPC_REMOTE_DEST=localhost \\ remote_run_function \\ source rpc.bash . } setup_test_dir() { ( set -e mkdir -p test_SOURCES.bash cd test_SOURCES.bash mkdir -p src ln -sf -t src \ ../../SOURCES.bash \ ../../src/{rpc,dependencies}.bash print_test_script_for_SOURCES.bash > test-SOURCES.bash ) } run_test() { ( set -ex cd test_SOURCES.bash PATH=$PWD/src:$PATH bash test-SOURCES.bash || true PATH=$PWD/src:$PATH bash test-SOURCES.bash ) } bootstrap_SOURCES.bash() { setup_test_dir && run_test } [ "$0" = 'bootstrap_SOURCES.bash' ] && bootstrap_SOURCES.bash