lib/update.utils
author Tero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 23:52:17 +0200
branchdns-new
changeset 619 bed4765fc56f
parent 618 a756f317d083
child 621 a3734856e0fa
permissions -rw-r--r--
fix hg commit message argument passing
583
b65ce9123039 lib/update: add shebangs to make sloccount work
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
     1
#!/bin/bash
575
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
606
5a83f2abc0dd cmd: log failed command
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
    14
    "$@" || die "Failed: $@"
575
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
589
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
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: 583
diff changeset
    18
#
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
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: 583
diff changeset
    20
#
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
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: 583
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: 583
diff changeset
    23
    log_cmd "$@"
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
diff changeset
    24
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
diff changeset
    25
    "$@"
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 583
diff changeset
    26
}
578
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 575
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: 575
diff changeset
    28
#
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 575
diff changeset
    29
#   indent  "    " $cmd...
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 575
diff changeset
    30
#
a2d87cfd77e4 update: LOG_DIFF to fix -q
Tero Marttila <terom@paivola.fi>
parents: 575
diff changeset
    31
# Output is kept on stdout, exit status is that of the given command.
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
function indent () {
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    33
    local indent="$1"; shift
575
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
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    42
# Create dir if not exists.
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
function ensure_dir {
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    44
    local dir="$1"
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    46
    if [ ! -d "$dir" ]; then
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        log_warn "Creating output dir: $dir"
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    48
        cmd mkdir "$dir"
575
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
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    52
## Output absolute path
575
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
#
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    56
# XXX: improve...?
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
function abspath () {
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    58
    local path="$1"
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    60
    echo "$SRV/$path"
575
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
592
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    63
## List names of files in dir:
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    64
#
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    65
#   list_files $dir $glob
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    66
#
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    67
function list_files {
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    68
    local dir="$1"
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    69
    local glob="${2:-*}"
592
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    70
    local name=
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    71
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    72
    for file in $dir/$glob; do
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    73
        # only files
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 606
diff changeset
    74
        [ -f "$file" ] || continue
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    75
592
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    76
        # strip prefix
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    77
        name=${file#$dir/}
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    78
        name=${name%$glob}
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    79
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    80
        echo -n "$name "
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    81
    done
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    82
}
88a7683efc54 update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents: 589
diff changeset
    83
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    84
## List names of dirs in dir:
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    85
function list_dirs {
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    86
    local dir="$1"
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    87
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    88
    for file in $dir/*; do
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    89
        [ -d "$file" ] || continue
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    90
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    91
        echo -n "${file#$dir/} "
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 592
diff changeset
    92
    done
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
}
618
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 610
diff changeset
    94
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 610
diff changeset
    95
## 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: 610
diff changeset
    96
function unix_time {
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 610
diff changeset
    97
    date +'%s'
a756f317d083 update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents: 610
diff changeset
    98
}