lib/pvl/apply.sh
author Tero Marttila <tero.marttila@aalto.fi>
Thu, 26 Feb 2015 21:38:09 +0200
changeset 627 a81206440be2
child 628 b10ad946d01d
permissions -rw-r--r--
(none)
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
# Idempotent refreshable operations
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
apply_GETOPTS='pFn'
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     5
APPLY=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
APPLY_DIFF=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
function apply_help {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
Apply:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
    -p      show changes
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
    -F      force-updates without checking src mtime
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    -n      no-op/mock-update; don't actually change/deploy anything; implies -SpC
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
function apply_opt {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
    local opt=$1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
    local optarg="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
    case $opt in
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
        p)  APPLY_DIFF=1   ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
        F)  APPLY=1 ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
        
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
        n) 
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
            APPLY=0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
            APPLY_DIFF=1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
        ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
        *)  return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
    esac
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
. $LIB/pvl/apply/dir.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
. $LIB/pvl/apply/link.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
. $LIB/pvl/apply/cmd.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    36
. $LIB/pvl/apply/cat.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
## Compare the given output file with all given source files:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
#   check_update $out ${deps[@]} && do_update $out ... || ...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
# Returns true if the output file needs to be updated.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
function apply_check {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
    local update=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
    local out="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
    debug "$out"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
    if [ ${#@} -eq 1 ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
        debug "  update: unknown deps"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    51
        return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    52
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
    elif [ ! -e "$out" ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
        debug "  update: dest missing"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    55
        return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    56
        
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
    elif [ "$APPLY" = 1]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
        debug "  update: forced"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
        return 2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
    # check deps
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
    for dep in "${@:2}"; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
        # check
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
        if [ ! -e "$dep" ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
            warn "$out: Missing source: $dep"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    67
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    68
        elif [ "$out" -ot "$dep" ]; then
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
            debug "  update: $dep"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    70
            return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    71
        else
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    72
            debug "  check: $dep"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    73
        fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    74
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    75
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    76
    debug "  up-to-date"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    77
    return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    78
}