Sfoglia il codice sorgente

Implement support for sub-command hooks

Add section like this to hook.ini:

    [hook.mycomm]
        pre = echo $SATURNIN_SUBCOMMAND will run soon
        pre = echo $SATURNIN_SUBCOMMAND is almost running
        post = echo $SATURNIN_SUBCOMMAND has finished now
Alois Mahdal 9 anni fa
parent
commit
a0d7664f08
1 ha cambiato i file con 27 aggiunte e 11 eliminazioni
  1. 27
    11
      src/bin/saturnin.skel

+ 27
- 11
src/bin/saturnin.skel Vedi File

@@ -52,6 +52,29 @@ version_info() {
52 52
     exit $FFOO_EXIT_OK
53 53
 }
54 54
 
55
+run_hook() {
56
+    saturnin conf -p hook.$SATURNIN_SUBCOMMAND.$1 \
57
+      | debug_pipe hook_$1 \
58
+      | bash
59
+}
60
+
61
+subcommand() {
62
+    local sc_es=0   # future exit (return) status
63
+    local lexpath="$SATURNIN_LIBEXEC/saturnin-$SATURNIN_SUBCOMMAND"
64
+    debug -v lexpath
65
+    debug "\$*='$*'"
66
+    test -x "$lexpath" || {
67
+        warn "invalid sub-command: $SATURNIN_SUBCOMMAND"
68
+        print_help
69
+        return $FFOO_EXIT_USAGE
70
+    }
71
+    run_hook pre
72
+    "$lexpath" "$@" || return $?
73
+    sc_es=$?
74
+    run_hook post
75
+    return $sc_es
76
+}
77
+
55 78
 while true; do case $1 in
56 79
     -d|--debug)     export FFOO_DEBUG=true; shift   ;;
57 80
     -v|--verbose)   export FFOO_VERBOSE=true; shift ;;
@@ -67,18 +90,11 @@ esac done
67 90
 debug -v FFOO_PATH SATURNIN_LIBEXEC FFOO_CONFIG_PATH
68 91
 debug "\$*='$*'"
69 92
 
70
-SATURNIN_SUBCOMMAND="$1"
93
+export SATURNIN_SUBCOMMAND="$1"
71 94
 shift
72 95
 
73 96
 case "$SATURNIN_SUBCOMMAND" in
74
-    conf)   inigrep "$@"; exit $? ;;
75
-    help)  print_help; exit $FFOO_EXIT_OK ;;
76
-    *)
77
-        lexpath="$SATURNIN_LIBEXEC/saturnin-$SATURNIN_SUBCOMMAND"
78
-        debug -v lexpath
79
-        debug "\$*='$*'"
80
-        test -x "$lexpath" && exec "$lexpath" "$@"
81
-        warn "invalid sub-command: $SATURNIN_SUBCOMMAND"
82
-        print_help; exit $FFOO_EXIT_USAGE
83
-        ;;
97
+    conf)   inigrep "$@"    ;;
98
+    help)   print_help      ;;
99
+    *)      subcommand "$@" ;;
84 100
 esac