summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/action.source.sh94
-rw-r--r--src/lib/template.source.sh23
2 files changed, 95 insertions, 22 deletions
diff --git a/src/lib/action.source.sh b/src/lib/action.source.sh
index f3e92be..77b7f8c 100644
--- a/src/lib/action.source.sh
+++ b/src/lib/action.source.sh
@@ -23,12 +23,87 @@ run_simple_action() {
esac
}
+run_action_body_context() {
+ local name
+ local -a variable_names=(
+ VERSION
+ DEFAULTRC
+ PACKAGED_TEMPLATE_DIR
+ PACKAGED_ASSET_DIR
+ DEFAULT_TEMPLATE_DIR
+ DEFAULT_ASSET_DIR
+ SHURIKEN_SOURCE_DIR
+ SHURIKEN_OUTPUT_MODE
+ SHURIKEN_ACTIVE_GENERATION_PID
+ SHURIKEN_FORCE_GENERATE
+ SHURIKEN_CURRENT_DATE_TEXT
+ SHURIKEN_CONFIG_SOURCE
+ SHURIKEN_FINAL_DIST_DIR
+ INCOMING_DIR
+ DIST_DIR
+ TEMPLATE_DIR
+ TITLE
+ HEIGHT
+ THUMBHEIGHT
+ MAXPREVIEWS
+ IMAGE_JOBS
+ IMAGEMAGICK_TIMEOUT
+ TAR_TIMEOUT
+ ORIGINAL_BASEPATH
+ RANDOM_SEED
+ SHUFFLE
+ SPLASH_PAGE
+ TARBALL_INCLUDE
+ TARBALL_SUFFIX
+ TAR_OPTS
+ SYNC_DELETE
+ SYNC_DESTINATIONS
+ TEMPLATE_RENDER_FIELD_SPECS
+ )
+
+ for name in "${variable_names[@]}"; do
+ declare -p "$name" 2>/dev/null || true
+ done
+ declare -f
+}
+
run_action_body() {
- if [[ "$-" == *e* ]]; then
- "$@"
+ local -r action_name="$1"; shift
+ local -i status=0
+
+ if {
+ run_action_body_context
+ printf '%q "$@"\n' "$action_name"
+ } | bash -euo pipefail -s -- "$@"; then
+ status=0
+ else
+ status=$?
+ fi
+
+ return "$status"
+}
+
+run_action_body_direct() {
+ "$@"
+}
+
+run_configured_action_body() {
+ local -r action_name="$1"; shift
+ local -r runner="${SHURIKEN_ACTION_BODY_RUNNER:-run_action_body}"
+ local -i status=0
+
+ if [ "$runner" = run_action_body_direct ]; then
+ "$runner" "$action_name" "$@"
+ return
+ fi
+
+ if "$runner" "$action_name" "$@"; then
+ status=0
else
- ( set -e; "$@" )
+ status=$?
fi
+
+ return "$status"
}
load_configured_action() {
@@ -123,7 +198,7 @@ run_configured_action() {
return "$status"
fi
- run_action_body generate_staged
+ run_configured_action_body generate_staged
status=$?
if (( status != 0 )); then
return "$status"
@@ -136,7 +211,7 @@ run_configured_action() {
return "$status"
fi
- run_action_body refresh_splash
+ run_configured_action_body refresh_splash
status=$?
if (( status != 0 )); then
return "$status"
@@ -149,7 +224,7 @@ run_configured_action() {
return "$status"
fi
- run_action_body sync_dist
+ run_configured_action_body sync_dist
status=$?
if (( status != 0 )); then
return "$status"
@@ -162,7 +237,7 @@ run_configured_action() {
return "$status"
fi
- run_action_body dry_run
+ run_configured_action_body dry_run
status=$?
if (( status != 0 )); then
return "$status"
@@ -175,7 +250,7 @@ run_configured_action() {
return "$status"
fi
- run_action_body print_config
+ run_configured_action_body print_config
status=$?
if (( status != 0 )); then
return "$status"
@@ -196,7 +271,8 @@ run_action() {
fi
;;
--clean|--generate|--refresh-splash|--sync|--dry-run|--print-config)
- run_configured_action
+ SHURIKEN_ACTION_BODY_RUNNER=run_action_body_direct \
+ run_configured_action
status=$?
if (( status != 0 )); then
return "$status"
diff --git a/src/lib/template.source.sh b/src/lib/template.source.sh
index 8ab87b2..c7d9ded 100644
--- a/src/lib/template.source.sh
+++ b/src/lib/template.source.sh
@@ -296,7 +296,6 @@ source_template_file() {
local -r output_path="$1"; shift
local -r render_vars_name="$1"; shift
local context_file
- local restore_errexit=no
local -i status=0
context_file=$(mktemp)
@@ -305,18 +304,16 @@ source_template_file() {
return "$status"
fi
- if [[ "$-" == *e* ]]; then
- restore_errexit=yes
- set +e
- fi
- (
- set -e
- serialize_template_render_context "$render_vars_name"
- printf 'unset BASH_ENV\n'
- ) > "$context_file"
- status=$?
- if [ "$restore_errexit" = yes ]; then
- set -e
+ if {
+ declare -p TEMPLATE_RENDER_FIELD_SPECS
+ declare -p "$render_vars_name"
+ declare -f
+ printf 'serialize_template_render_context %q\n' "$render_vars_name"
+ printf "printf 'unset BASH_ENV\\\\n'\n"
+ } | bash -euo pipefail > "$context_file"; then
+ status=0
+ else
+ status=$?
fi
if (( status != 0 )); then
rm -f "$context_file"