author | Tero Marttila <terom@paivola.fi> |
Sun, 22 Dec 2013 18:22:37 +0200 | |
changeset 622 | 934aab83b769 |
parent 621 | a3734856e0fa |
permissions | -rw-r--r-- |
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 | 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 | 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 | 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 | 44 |
local dir="$1" |
575
b68b8615c512
update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
|
608 | 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 | 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 | 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 | 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 | 58 |
local path="$1" |
575
b68b8615c512
update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
|
605 | 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 |
|
621
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
63 |
function _list { |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
64 |
local glob="$1" |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
65 |
local test="$2" |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
66 |
local prefix="$3" |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
67 |
|
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
68 |
for file in $glob; do |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
69 |
[ $test "$file" ] || continue |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
70 |
[ -n "$prefix" ] && file="${file#$prefix}" |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
71 |
|
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
72 |
echo -n "$file " |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
73 |
done |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
74 |
} |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
75 |
|
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
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:
618
diff
changeset
|
77 |
function list { |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
78 |
_list "$1/*" '-e' ${2:-$1/} |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
79 |
} |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
80 |
|
592
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
81 |
## List names of files in dir: |
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
82 |
# |
621
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
83 |
# list_files $dir |
592
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
84 |
# |
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
85 |
function list_files { |
621
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
86 |
_list "$1/*" '-f' ${2:-$1/} |
592
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
87 |
} |
88a7683efc54
update: list_files to copy all DHCP_CONFS..
Tero Marttila <terom@paivola.fi>
parents:
589
diff
changeset
|
88 |
|
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
|
89 |
## List names of dirs in dir: |
605 | 90 |
function list_dirs { |
621
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
91 |
_list "$1/*" '-d' ${2:-$1/} |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
92 |
} |
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
|
93 |
|
621
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
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:
618
diff
changeset
|
95 |
function expand_files { |
a3734856e0fa
use hosts/dhcp/%** to create dhcp hosts configs
Tero Marttila <terom@paivola.fi>
parents:
618
diff
changeset
|
96 |
_list "$1 $1/**" '-f' '' |
575
b68b8615c512
update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
} |
618
a756f317d083
update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents:
610
diff
changeset
|
98 |
|
a756f317d083
update: commit before update, and use the hg commit timestamp as the serial
Tero Marttila <terom@paivola.fi>
parents:
610
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:
610
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:
610
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:
610
diff
changeset
|
102 |
} |