update: log_force/update/noop/skip, implemented for update_serial
authorTero Marttila <terom@paivola.fi>
Tue, 20 Mar 2012 12:55:31 +0200
changeset 566 b2ac0fd85828
parent 565 ef5bcc4145de
child 567 8f49e2f51c0d
update: log_force/update/noop/skip, implemented for update_serial
bin/update
--- a/bin/update	Tue Mar 20 12:43:51 2012 +0200
+++ b/bin/update	Tue Mar 20 12:55:31 2012 +0200
@@ -43,7 +43,9 @@
 
 LOG_WARN=y
 LOG=y
-LOG_INFO=y
+LOG_FORCE=y
+LOG_UPDATE=y
+LOG_NOOP=y
 LOG_SKIP=
 LOG_DEBUG=
 LOG_CMD=
@@ -51,7 +53,10 @@
 UPDATE_FORCE=
 UPDATE_NOOP=
 UPDATE_DIFF=
-SERIAL_NOUPDATE=
+
+SERIAL_NOOP=
+SERIAL_FORCE=
+
 COMMIT_SKIP=
 COMMIT_FORCE=
 COMMIT_MSG=' '
@@ -78,6 +83,7 @@
     -p      show changes
     -F      force-updates without checking src mtime
     -S      do not update serial
+    -s      update serials
     -n      no-op/mock-update; don't actually change anything; implies -SpC
 
 Commit    
@@ -90,7 +96,7 @@
 function parse_args {
     OPTIND=1
 
-    while getopts 'hd:qvDVpFSnCcm:' opt "$@"; do
+    while getopts 'hd:qvDVpFSsnCcm:' opt "$@"; do
         case $opt in
             h)  
                 help_args $0
@@ -102,6 +108,9 @@
             q)  
                 LOG= 
                 LOG_WARN=
+                LOG_UPDATE=
+                LOG_FORCE=
+                LOG_NOOP=
                 ;;
 
             v)  LOG_SKIP=y ;;
@@ -111,9 +120,10 @@
                 ;;
             V)  LOG_CMD=y ;;
 
-            p)  UPDATE_DIFF=y ;;
-            F)  UPDATE_FORCE=y ;;
-            S)  SERIAL_NOUPDATE=y ;;
+            p)  UPDATE_DIFF=y   ;;
+            F)  UPDATE_FORCE=y  ;;
+            S)  SERIAL_NOOP=y   ;;
+            s)  SERIAL_FORCE=y  ;;
  
             n)  
                 UPDATE_NOOP=y 
@@ -163,8 +173,16 @@
     [ $LOG ] && log_msg "$*" || true
 }
 
-function log_info {
-    [ $LOG_INFO ] && log_color '36' "  $*" || true
+function log_force {
+    [ $LOG_FORCE ] && log_color '2;33' "  $*" || true
+}
+
+function log_update {
+    [ $LOG_UPDATE ] && log_color '36' "  $*" || true
+}
+
+function log_noop {
+    [ $LOG_NOOP ] && log_color '2;34' "  $*" || true
 }
 
 function log_skip {
@@ -219,14 +237,6 @@
     "$@" || die "Failed"
 }
 
-function run_cmd {
-    local msg=$1; shift
-
-    log_info "$msg... "
-
-    cmd "$@"
-}
-
 function indent () {
     local indent=$1; shift
 
@@ -288,6 +298,11 @@
 
 
 ## functions
+
+## Dependency-based updates
+# Compare the given output file with all given source files.
+#
+# Returns true if the output file needs to be updated.
 function check_update {
     # target
     local dst=$1; shift
@@ -361,38 +376,7 @@
     fi
 }
 
-function update {
-    local dst=$1; shift;
-    local msg=$1; shift
-
-    local sep=
-    local dep=()
-    local cmd=()
-
-    for arg in "$@"; do
-        if [ $arg == '--' ]; then
-            sep=y
-        fi
-
-        if [ $sep ]; then
-            cmd=("${cmd[@]:-}" "$arg")
-        else
-            dep=("${dep[@]:-}" "$arg")
-        fi
-    done
-
-    [ ! $sep ] && fail "Invalid args given: $@"
-
-    if check_update $dst "${dep[@]}"; then
-        log_info "$msg..."
-
-        do_update $dst "${cmd[@]}"
-    else
-        log_skip "$msg: not changed"
-
-    fi
-}
-
+# links
 function check_link {
     local lnk=$1
     local tgt=$2
@@ -414,7 +398,7 @@
     local base=$2
 
     if check_update $zone $base; then
-        log_info "Copying hosts $zone <- $base..."
+        log_update "Copying hosts $zone <- $base..."
 
         do_update $zone \
             cat $ROOT/$base
@@ -429,7 +413,7 @@
     local base=$1; shift
 
     if check_update $zone $base; then
-        log_info "Generating hosts $zone <- $base..."
+        log_update "Generating hosts $zone <- $base..."
 
         do_update $zone \
             $BIN/process-zone $PROCESS_ARGS $ROOT/$base "$@"
@@ -461,14 +445,19 @@
     local serial=$SERIALS/$zone.serial
 
     # test
-    if ! check_update $serial "$@"; then
+    if [ $SERIAL_FORCE ]; then
+        log_force "Updating $serial: forced"
+
+        do_update_serial $serial
+
+    elif ! check_update $serial "$@"; then
         log_skip "Updating $serial: not changed"
 
-    elif [ $SERIAL_NOUPDATE ]; then
-        log_skip "Updating $serial: skipped"
+    elif [ $SERIAL_NOOP ]; then
+        log_noop "Updating $serial: skipped"
 
     else
-        log_info "Updating $serial..."
+        log_update "Updating $serial..."
 
         do_update_serial $serial
     fi
@@ -482,7 +471,7 @@
     local tgt=$SERIALS/$base.serial
 
     if check_link $lnk $tgt; then
-        log_info "Linking $lnk -> $tgt..."
+        log_update "Linking $lnk -> $tgt..."
 
         do_link $lnk $tgt
 
@@ -501,7 +490,7 @@
     local src=$DATA/$base
 
     if check_update $out $src; then
-        log_info "Copying $out <- $src..."
+        log_update "Copying $out <- $src..."
 
         do_update $out \
             cat $ROOT/$src
@@ -522,7 +511,7 @@
     local serial=$SERIALS/$base.serial
 
     if check_update $out $src $serial; then
-        log_info "Generating $out <- $src..." 
+        log_update "Generating $out <- $src..." 
 
         do_update $out \
             $BIN/expand-zone $ROOT/$src \
@@ -547,7 +536,7 @@
     done
 
     if check_link $out $tgt; then
-        log_info "Linking $out -> $tgt..."
+        log_update "Linking $out -> $tgt..."
 
         do_link $out $tgt
     else
@@ -605,13 +594,13 @@
     local repo=$REPO
 
     if hg_modified; then
-        log_info "Commit changes in $repo:"
+        log_update "Commit changes in $repo:"
 
         indent "    " hg_diff
 
         hg_commit "$COMMIT_MSG"
     else
-        log_info "Commit changes in $repo: no changes"
+        log_skip "Commit changes in $repo: no changes"
     fi
 }