lib/pvl/apply.sh
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 23:31:13 +0200
changeset 738 3104fdf7ea26
parent 718 f1c352644c2a
permissions -rw-r--r--
pvl.hosts.hosts: drop support for instanced ip.* in favor of improved interface:ip.* =
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=
674
a5b712cd0273 lib/pvl: fix -nF to skip apply_check's but still not actually apply_cmd
Tero Marttila <terom@paivola.fi>
parents: 629
diff changeset
     6
APPLY_FORCE=
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
APPLY_DIFF=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
function apply_help {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
    cat <<END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
Apply:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
    -p      show changes
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    -F      force-updates without checking src mtime
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
    -n      no-op/mock-update; don't actually change/deploy anything; implies -SpC
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
END
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
function apply_opt {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
    local opt=$1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
    local optarg="$2"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
    case $opt in
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
        p)  APPLY_DIFF=1   ;;
674
a5b712cd0273 lib/pvl: fix -nF to skip apply_check's but still not actually apply_cmd
Tero Marttila <terom@paivola.fi>
parents: 629
diff changeset
    24
        F)  APPLY_FORCE=1  ;;
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
        
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
        n) 
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
            APPLY=0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
            APPLY_DIFF=1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
        ;;
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
        *)  return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    31
    esac
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
}
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    34
. $LIB/pvl/apply/dir.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
. $LIB/pvl/apply/link.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    36
. $LIB/pvl/apply/cmd.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
. $LIB/pvl/apply/cat.sh
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    39
## Compare the given output file with all given source files:
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
#   check_update $out ${deps[@]} && do_update $out ... || ...
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
#
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
# Returns true if the output file needs to be updated.
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
function apply_check {
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
    local update=
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
    local out="$1"
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    48
    log_debug           "$out"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
    if [ ${#@} -eq 1 ]; then
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    51
        log_changed     "  update: empty deps"
714
e0a651547bd2 lib/pvl/apply: empty deps -> always update
Tero Marttila <tero.marttila@aalto.fi>
parents: 674
diff changeset
    52
        return 2
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
    elif [ ! -e "$out" ]; then
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    55
        log_changed     "  update: dest missing"
628
b10ad946d01d update: refactor into modularized lib/pvl/**.sh layout
Tero Marttila <tero.marttila@aalto.fi>
parents: 627
diff changeset
    56
        return 2
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
        
674
a5b712cd0273 lib/pvl: fix -nF to skip apply_check's but still not actually apply_cmd
Tero Marttila <terom@paivola.fi>
parents: 629
diff changeset
    58
    elif [ "$APPLY_FORCE" = 1 ]; then
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    59
        log_changed     "  update: forced"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
        return 2
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
    fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
    # check deps
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
    for dep in "${@:2}"; do
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
        # check
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
        if [ ! -e "$dep" ]; then
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    67
            warn        "$out: Missing source: $dep"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    68
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
        elif [ "$out" -ot "$dep" ]; then
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    70
            log_changed "   changed: $dep"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    71
            return 1
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    72
        else
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    73
            log_debug   "  check: $dep"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    74
        fi
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    75
    done
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    76
718
f1c352644c2a lib/pvl/apply: log_changed in apply_check
Tero Marttila <tero.marttila@aalto.fi>
parents: 714
diff changeset
    77
    log_debug           "  up-to-date"
627
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    78
    return 0
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    79
}