diff options
-rw-r--r-- | deps.mk | 1 | ||||
-rwxr-xr-x | src/statusconv | 50 |
2 files changed, 51 insertions, 0 deletions
@@ -5,6 +5,7 @@ sources.sh = \ src/mkstemp \ src/now \ src/pre \ + src/statusconv \ src/tempname \ src/timestamp \ src/uuid \ diff --git a/src/statusconv b/src/statusconv new file mode 100755 index 0000000..9bc858b --- /dev/null +++ b/src/statusconv @@ -0,0 +1,50 @@ +#!/bin/sh +set -eu + + +FROM_N='' +TO_N='' +for flag in "$@"; do + case "$flag" in + *[0-9]:*[0-9]) + X="$(printf '%s' "$flag" | cut -d ':' -f1)" + Y="$(printf '%s' "$flag" | cut -d ':' -f2)" + FROM_N="$FROM_N $X" + TO_N="$TO_N $Y" + shift + ;; + *) + break + ;; + esac +done + + +if [ "$1" = '--' ]; then + shift +fi + +STATUS=0 +"$@" || STATUS=$? + +FOUND=false +I=-1 +for from in $FROM_N; do + I=$((I + 1)) + if [ "$from" = "$STATUS" ]; then + FOUND=true + break + fi +done + +if [ "$FOUND" = false ]; then + exit "$STATUS" +fi + +J=-1 +for to in $TO_N; do + J=$((J + 1)) + if [ "$J" = "$I" ]; then + exit "$to" + fi +done |