author | Tero Marttila <terom@paivola.fi> |
Sun, 22 Dec 2013 15:33:32 +0200 | |
changeset 98 | a3734856e0fa |
parent 95 | a756f317d083 |
permissions | -rw-r--r-- |
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 | 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 | 27 |
## Execute command, prefixing its output on stdout with given indent prefix. |
28 |
# |
|
29 |
# indent " " $cmd... |
|
30 |
# |
|
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 | 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 | 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 | 44 |
local dir="$1" |
52
b68b8615c512
update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
|
85 | 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 | 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 | 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 | 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 | 58 |
local path="$1" |
52
b68b8615c512
update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
|
82 | 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 | 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 |
} |