]> gitweb.fluxo.info Git - scripts.git/commitdiff
Status: use getopt
authorSilvio Rhatto <rhatto@riseup.net>
Thu, 27 Jul 2017 15:38:43 +0000 (12:38 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Thu, 27 Jul 2017 15:38:43 +0000 (12:38 -0300)
status

diff --git a/status b/status
index a9a05a7c6237a7f8615fe7356f2cdc58fdc4b795..105cf75359265f5f40ce95b5f04950516b99ba0c 100755 (executable)
--- a/status
+++ b/status
@@ -4,8 +4,59 @@
 #
 
 # Parameters
-PROJECT="$1"
-DELAY="$2"
+BASENAME="`basename $0`"
+
+# Usage
+function status_usage {
+  echo "usage: $BASENAME [-l|--long] [-d|--delay N] [project]"
+
+  if [ -z "$1" ]; then
+    exit 1
+  else
+    exit $1
+  fi
+}
+
+# See https://stackoverflow.com/questions/2721946/cross-platform-getopt-for-a-shell-script#4300224
+function status_options {
+  getopt -T > /dev/null
+  if [ $? -eq 4 ]; then
+    # GNU enhanced getopt is available
+    ARGS=`getopt --name "$BASENAME" --long loop,delay: --options ld: -- "$@"`
+  else
+    # Original getopt is available (no long option names, no whitespace, no sorting)
+    ARGS=`getopt ld: "$@"`
+  fi
+
+  if [ $? -ne 0 ]; then
+    echo "$BASENAME: usage error" >&2
+    status_usage 2
+  fi
+
+  eval set -- $ARGS
+
+  while [ $# -gt 0 ]; do
+    case "$1" in
+      l|--loop)
+        LOOP="yes";;
+      d|--delay)
+        DELAY="$2"
+        shift;;
+      --)
+        shift
+        break;;
+      *)
+        status_usage
+        ;;
+    esac
+    shift
+  done
+
+  if [ $# -gt 0 ]; then
+    PROJECT="$1"
+    shift
+  fi
+}
 
 # Run status
 function status_run {
@@ -42,8 +93,11 @@ function status_run {
   fi
 }
 
+# Options
+status_options $@
+
 # Dispatch
-if [ "$PROJECT" == "--loop" ]; then
+if [ "$LOOP" == "yes" ]; then
   PROJECT=""
 
   if [ -z "$DELAY" ]; then
@@ -51,9 +105,9 @@ if [ "$PROJECT" == "--loop" ]; then
   fi
 
   while true; do
+    clear
     status_run
     sleep $DELAY
-    clear
   done
 else
   status_run