lib/update.utils
author Tero Marttila <terom@paivola.fi>
Sun, 22 Dec 2013 15:33:32 +0200
changeset 98 a3734856e0fa
parent 95 a756f317d083
permissions -rw-r--r--
use hosts/dhcp/%** to create dhcp hosts configs
60
b65ce9123039 lib/update: add shebangs to make sloccount work
Tero Marttila <terom@paivola.fi>
parents: 58
diff changeset
     1
#!/bin/bash
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
#
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
# Utility functions
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
### Command execution
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
## Execute command, possibly logging its execution.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
#
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
#   cmd     $cmd...
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
#
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
# Fails if the command returns an error exit code.
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
function cmd {
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
    log_cmd "$@"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
83
5a83f2abc0dd cmd: log failed command
Tero Marttila <terom@paivola.fi>
parents: 82
diff changeset
    14
    "$@" || die "Failed: $@"
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
66
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    17
## Execute command as a test, logging its execution at log_cmd
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    18
#
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    19
#   cmd_test $cmd... && ... || ...
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    20
#
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    21
# Fails if the command returns an error exit code.
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    22
function cmd_test {
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    23
    log_cmd "$@"
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    24
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    25
    "$@"
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 60
diff changeset
    26
}
55
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
    27
## Execute command, prefixing its output on stdout with given indent prefix.
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
    28
#
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
    29
#   indent  "    " $cmd...
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
    30
#
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 52
diff changeset
    31
# Output is kept on stdout, exit status is that of the given command.
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
function indent () {
85
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 83
diff changeset
    33
    local indent="$1"; shift
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    "$@" | sed "s/^/$indent/"
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
    return ${PIPESTATUS[0]}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
### FS utils
82
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 69
diff changeset
    42
# Create dir if not exists.
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
function ensure_dir {
85
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 83
diff changeset
    44
    local dir="$1"
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
85
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 83
diff changeset
    46
    if [ ! -d "$dir" ]; then
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        log_warn "Creating output dir: $dir"
85
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 83
diff changeset
    48
        cmd mkdir "$dir"
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
    fi
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
82
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 69
diff changeset
    52
## Output absolute path
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
#
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
#   abspath $path
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
#
82
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 69
diff changeset
    56
# XXX: improve...?
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
function abspath () {
85
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 83
diff changeset
    58
    local path="$1"
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
82
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 69
diff changeset
    60
    echo "$SRV/$path"
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
}
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
98
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    63
function _list {
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    64
    local glob="$1"
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    65
    local test="$2"
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    66
    local prefix="$3"
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    67
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    68
    for file in $glob; do
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    69
        [ $test "$file" ] || continue
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    70
        [ -n "$prefix" ] && file="${file#$prefix}"
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    71
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    72
        echo -n "$file "
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    73
    done
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    74
}
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    75
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    76
## List names of all files in dir
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    77
function list {
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    78
    _list "$1/*" '-e' ${2:-$1/}
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    79
}
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    80
69
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    81
## List names of files in dir:
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    82
#
98
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    83
#   list_files $dir
69
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    84
#
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    85
function list_files {
98
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    86
    _list "$1/*" '-f' ${2:-$1/}
69
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    87
}
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 66
diff changeset
    88
87
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 85
diff changeset
    89
## List names of dirs in dir:
82
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 69
diff changeset
    90
function list_dirs {
98
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    91
    _list "$1/*" '-d' ${2:-$1/}
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    92
}
87
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 85
diff changeset
    93
98
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    94
## List names of any files underneath dir or file:
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    95
function expand_files {
a3734856e0fa use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents: 95
diff changeset
    96
    _list "$1 $1/**" '-f' ''
52
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
}
95
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 87
diff changeset
    98
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 87
diff changeset
    99
## Get current unix (utc) timestamp
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 87
diff changeset
   100
function unix_time {
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 87
diff changeset
   101
    date +'%s'
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 87
diff changeset
   102
}