summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@vps-18a7a2b7.vps.ovh.ca>2024-01-26 14:52:54 -0500
committerroot <root@vps-18a7a2b7.vps.ovh.ca>2024-01-26 14:52:54 -0500
commit632a9ca792c51218e7ea4382cc4d8bf7387a3b3b (patch)
tree16b39604273469e569b71fa9518ee2f805e74cfa
parent95ef1b369941cbf0c7c86634d3b2e4aa44a94141 (diff)
improve error reporting
-rw-r--r--wordpress/export-json.bash53
1 files changed, 28 insertions, 25 deletions
diff --git a/wordpress/export-json.bash b/wordpress/export-json.bash
index f146c19..714946e 100644
--- a/wordpress/export-json.bash
+++ b/wordpress/export-json.bash
@@ -65,34 +65,33 @@
65arg1_to_env0() 65arg1_to_env0()
66{ 66{
67 case "$1" in 67 case "$1" in
68 *[^a-zA-Z0-9_=]* | *=*=* ) 68 *=*=* )
69 echo "Error: invalid variable: '$1'" >&2 69 set -- "${1#*=}"
70 echo "Error: invalid variable: ${1@Q}" >&2
71 return 30
72 ;;
73 *[^a-zA-Z0-9_=]* )
74 echo "Error: invalid variable: ${1@Q}" >&2
70 return 10 75 return 10
71 ;; 76 ;;
72 [a-zA-Z_]* ) 77 [a-zA-Z_]* )
73 set -- "${1#*=}" "${1%%=*}"
74 ;; 78 ;;
75 * ) 79 * )
76 echo "Error: invalid variable: '$1'" >&2 80 echo "Error: invalid variable: ${1@Q}" >&2
77 return 20 81 return 20
78 ;; 82 ;;
79 esac 83 esac
84 set -- "${1##*=}" "${1%%=*}"
80 if [ -v "$2" ] 85 if [ -v "$2" ]
81 then 86 then
82 printf '%s=%s\0' "$1" "${!2}" 87 printf '%s=%s\0' "$1" "${!2}"
83 else 88 else
84 echo "Warning: ignoring unset variable: '$2'" >&2 89 echo "Warning: ignoring unset variable: ${2@Q}" >&2
85 fi 90 fi
86} 91}
87 92
88# for_each - environmentally-hygienic loop 93# Hygienic loop. Doesn't touch the shell
89# 94# environment.
90# The first argument is de-quoted as a command
91# evaluated once against each of the other
92# supplied arguments, in order, aborting if the
93# command returns an error.
94#
95# Doesn't touch the bash environment.
96for_each() 95for_each()
97{ 96{
98 while [ $# -ge 2 ] 97 while [ $# -ge 2 ]
@@ -102,11 +101,6 @@ for_each()
102 done 101 done
103} 102}
104 103
105export_to_env0()
106{
107 for_each arg1_to_env0 "$@"
108}
109
110to_JSON_all() 104to_JSON_all()
111{ 105{
112 jq -s 'add' < \ 106 jq -s 'add' < \
@@ -190,11 +184,20 @@ json_encode_string()
190 184
191to_JSON() 185to_JSON()
192{ 186{
193 case $# in 187 case "$#$1" in
194 0) 188 0 )
195 to_JSON_all -a 189 printf \
190 '%s\n' \
191 'usage: to_JSON -a' \
192 ' to_JSON -A' \
193 ' to_JSON <variable name> [...]' \
194 >&2
195 return -1
196 ;; 196 ;;
197 *) 197 1-a | 1-A )
198 to_JSON_all $1
199 ;;
200 * )
198 for_each to_JSON1 "$@" 201 for_each to_JSON1 "$@"
199 ;; 202 ;;
200 esac 203 esac
@@ -229,7 +232,7 @@ export_JSON_unsafe()
229{ 232{
230 ( 233 (
231 set -o pipefail 234 set -o pipefail
232 export_to_env0 "$@" | env0_to_JSON 235 for_each arg1_to_env0 "$@" | env0_to_JSON
233 ) 236 )
234} 237}
235 238
@@ -237,7 +240,7 @@ safety_pipe()
237{ 240{
238 [ $# -ge 2 ] || return 241 [ $# -ge 2 ] || return
239 set -- "$(mktemp)" "$@" || return 242 set -- "$(mktemp)" "$@" || return
240 if (shift 2; "$@") > "$1" 243 if "${@:3}" > "$1"
241 then 244 then
242 "$2" < "$1" 245 "$2" < "$1"
243 else 246 else
@@ -247,7 +250,7 @@ safety_pipe()
247 250
248export_JSON() 251export_JSON()
249{ 252{
250 safety_pipe env0_to_JSON export_to_env0 "$@" 253 safety_pipe env0_to_JSON for_each arg1_to_env0 "$@"
251} 254}
252 255
253filter_vars() 256filter_vars()