aboutsummaryrefslogtreecommitdiff
path: root/bin/statusconv
diff options
context:
space:
mode:
Diffstat (limited to 'bin/statusconv')
-rwxr-xr-xbin/statusconv50
1 files changed, 50 insertions, 0 deletions
diff --git a/bin/statusconv b/bin/statusconv
new file mode 100755
index 0000000..9bc858b
--- /dev/null
+++ b/bin/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