diff options
author | Bryan Drewery <bryan@shatow.net> | 2022-09-14 02:56:32 +0300 |
---|---|---|
committer | Bryan Drewery <bryan@shatow.net> | 2022-11-05 18:47:57 +0300 |
commit | a34e2134cc11af2c88333495bd572f0627443462 (patch) | |
tree | 4682f0c674ca47a99bdc9bc04182bd4c8ccfab5b | |
parent | 6563105c7d3e7d128bc749e22a2d3b3aca75abf8 (diff) |
decode_args_vars: Slightly optimize with case
-rw-r--r-- | src/share/poudriere/include/util.sh | 18 | ||||
-rw-r--r-- | test/encode_args.sh | 15 |
2 files changed, 27 insertions, 6 deletions
diff --git a/src/share/poudriere/include/util.sh b/src/share/poudriere/include/util.sh index ee1919d0..c301fafe 100644 --- a/src/share/poudriere/include/util.sh +++ b/src/share/poudriere/include/util.sh @@ -97,7 +97,7 @@ decode_args_vars() { local -; set +x -f [ $# -ge 2 ] || eargs decode_args_vars data var1 [var2... varN] local encoded_args_data="$1" - local _value _var _vars IFS + local _value _var IFS shift local _vars="$*" @@ -105,15 +105,21 @@ decode_args_vars() { set -- ${encoded_args_data} unset IFS for _value; do + # Select the next var to populate. _var="${_vars%% *}" - _vars="${_vars#${_var} }" - if [ "${_var}" = "${_vars}" ]; then + case "${_vars}" in + # Last one - set all remaining to here + ${_var}) setvar "${_var}" "$*" break - else + ;; + *) setvar "${_var}" "${_value}" - fi - shift + # Pop off the var + _vars="${_vars#${_var} }" + shift + ;; + esac done } diff --git a/test/encode_args.sh b/test/encode_args.sh index 67e27883..c53a35eb 100644 --- a/test/encode_args.sh +++ b/test/encode_args.sh @@ -109,6 +109,16 @@ assert "1" "$1" "decode 3 trailing arguments argument 1" assert "" "$2" "decode 3 trailing arguments argument 2" assert "" "$3" "decode 3 trailing arguments argument 3" assert "" "$4" "decode 3 trailing arguments argument 4" +one=bad +two=bad +three=bad +four=bad +decode_args_vars "${data}" one two three four +assert 0 "$?" "decode_args_vars" +assert "1" "$one" "decode 2 argument argument 1" +assert "" "$two" "decode 2 argument argument 2" +assert "" "$three" "decode 2 argument argument 3" +assert "" "$four" "decode 2 argument argument 4" # Test trailing empty arguments with data encode_args data "1" "" "" "x" @@ -158,6 +168,11 @@ assert "*" "$two" "decode 3 trailing arguments x argument 2" assert " * " "$three" "decode 3 trailing arguments x argument 3" assert " 4" "$four" "decode 3 trailing arguments x argument 4" +decode_args_vars "${data}" one two +assert 0 "$?" "decode_args_vars" +assert "1" "$one" "decode 3 trailing arguments x argument 1" +assert "* * 4" "$two" "decode 3 trailing arguments x argument 2" + # Test parsing safety # $() |