# HG changeset patch # User Tero Marttila # Date 1332240931 -7200 # Node ID b2ac0fd8582833df848e51b69a87e65eab2ba34d # Parent ef5bcc4145deca176e519ed12961104a60360924 update: log_force/update/noop/skip, implemented for update_serial diff -r ef5bcc4145de -r b2ac0fd85828 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 }