From dbec1d221b1f309f1e8981883d1d03229ba06028 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 22 Feb 2024 10:54:10 -0500 Subject: holy shit, SOURCES.bash actually almost works --- bash/SOURCES.bash | 95 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 34 deletions(-) diff --git a/bash/SOURCES.bash b/bash/SOURCES.bash index a274223..609e98e 100644 --- a/bash/SOURCES.bash +++ b/bash/SOURCES.bash @@ -4,7 +4,7 @@ source() if [[ $1 != */* ]] && ( command -v base64_embedded_source__"$1" || - command -v src/"$1" + [ -f src/"$1" ] ) >&2 # >/dev/null then rewrite_self \ @@ -17,67 +17,94 @@ source() fi } +denominate_function() +{ + declare -n func_name="$1" + local func_output_b64encoded output_hash + read -r -d '' \ + func_output_b64encoded \ + < <(base64) || [ "${func_output_b64encoded}" ] + read output_hash _ \ + < <(base64 -d <<< "$func_output_b64encoded" | sha256sum) + [ ${#output_hash} = 64 ] || return + func_name=SHA256_${output_hash:0:32} + source <(cat </dev/null + declare -n do_rewrite=do_rewrite${RANDOM} + do_rewrite= + + if [ -f "$2" ] then - ( - set +e - sha256sum <("$3") >&2 - sha256sum <(builtin source "$2" "${@:4}" && "$3") >&2 - ) - builtin source \ - <("$3") \ - "${@:4}" - return + if [ -w "$0" ] + then + do_rewrite=$(mktemp) || return + source <(stdin_to_function "$3" < "$2" | + tee "$do_rewrite") || return + else + source <(stdin_to_function "$3" < "$2") || return + fi 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" + command -v "$3" >/dev/null || return + + builtin source <("$3") "${@:4}" || return + + [ "$do_rewrite" ] || return 0 + + if sed \ + -i~"$(date -Ins)" \ + -e "1 { r ${do_rewrite}"$'\n'" }" \ + "$0" then local r=0 else local r=$? fi - rm "$tmpfile" + rm "$do_rewrite" return $r } -embed() +stdin_to_function() { cat <<. -base64_embedded_source__${1}() +${1}() { base64 -d <<. -$(base64 < "$2" && echo .) +$(base64 && echo .) } . } +embed_source() +{ + stdin_to_function "base64_embedded_source__${1}" "${@:2}" +} + 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 +r() +{ + : base64_embedded_source__rpc.bash + : base64_embedded_source__dependencies.bash + source rpc.bash +} BASH_RPC_REMOTE_DEST=localhost \\ remote_run_function \\ - source rpc.bash + r . } -- cgit v1.2.3