equal
deleted
inserted
replaced
42 -h display this help text |
42 -h display this help text |
43 |
43 |
44 -q quiet |
44 -q quiet |
45 -v verbose |
45 -v verbose |
46 -D debug |
46 -D debug |
|
47 -C debug commands |
47 |
48 |
48 -d show changes |
49 -p show changes |
49 |
50 |
50 -F force-updates without checking src mtime |
51 -F force-updates without checking src mtime |
51 -n no-op/mock-update; do not actually change anything; implies -S |
|
52 -S do not update serial |
52 -S do not update serial |
|
53 -n no-op/mock-update; do not actually change anything; implies -Sp |
53 END |
54 END |
54 } |
55 } |
55 |
56 |
56 function parse_args { |
57 function parse_args { |
57 OPTIND=1 |
58 OPTIND=1 |
58 |
59 |
59 while getopts 'hqvDdFnS' opt "$@"; do |
60 while getopts 'hqvDCpFSn' opt "$@"; do |
60 case $opt in |
61 case $opt in |
61 h) |
62 h) |
62 help_args $1 |
63 help_args $1 |
63 exit 0 |
64 exit 0 |
64 ;; |
65 ;; |
65 |
66 |
66 q) LOG= ;; |
67 q) LOG= ;; |
67 v) LOG_INFO=y ;; |
68 v) LOG_INFO=y ;; |
68 D) |
69 D) LOG_DEBUG=y ;; |
69 LOG_DEBUG=y |
70 C) LOG_CMD=y ;; |
70 LOG_CMD=y |
71 p) UPDATE_DIFF=y ;; |
71 |
|
72 ;; |
|
73 |
|
74 d) UPDATE_DIFF=y ;; |
|
75 F) UPDATE_FORCE=y ;; |
72 F) UPDATE_FORCE=y ;; |
76 S) SERIAL_NOUPDATE=y ;; |
73 S) SERIAL_NOUPDATE=y ;; |
77 |
74 |
78 n) |
75 n) |
79 # implies -S |
|
80 UPDATE_NOOP=y |
76 UPDATE_NOOP=y |
|
77 # implies -Sp |
|
78 UPDATE_DIFF=y |
81 SERIAL_NOUPDATE=y |
79 SERIAL_NOUPDATE=y |
82 ;; |
80 ;; |
83 |
81 |
84 |
82 |
85 ?) |
83 ?) |
183 ## functions |
181 ## functions |
184 function check_update { |
182 function check_update { |
185 # target |
183 # target |
186 local dst=$1; shift |
184 local dst=$1; shift |
187 |
185 |
188 log_debug "$dst:" |
186 log_debug "check_update: $dst" |
189 |
187 |
190 # need update? |
188 # need update? |
191 local update= |
189 local update= |
192 |
190 |
193 if [ ! -e $dst ] || [ $UPDATE_FORCE ]; then |
191 if [ ! -e $dst ] || [ $UPDATE_FORCE ]; then |
216 |
214 |
217 function do_update { |
215 function do_update { |
218 local dst=$1; shift |
216 local dst=$1; shift |
219 local tmp=$dst.new |
217 local tmp=$dst.new |
220 |
218 |
221 log_debug " update: $dst" |
219 log_debug "update: $dst" |
222 cmd "$@" > $tmp |
220 cmd "$@" > $tmp |
223 |
221 |
224 # compare |
222 # compare |
225 if [ -e $dst ] && [ $UPDATE_DIFF ]; then |
223 if [ -e $dst ] && [ $UPDATE_DIFF ]; then |
226 log_debug " changes:" |
224 log_debug " changes:" |
229 indent " " diff --unified=1 $dst $tmp |
227 indent " " diff --unified=1 $dst $tmp |
230 fi |
228 fi |
231 |
229 |
232 if [ $UPDATE_NOOP ]; then |
230 if [ $UPDATE_NOOP ]; then |
233 # cleanup |
231 # cleanup |
234 log_debug " no-op:" |
232 log_debug " no-op" |
235 |
233 |
236 cmd rm $tmp |
234 cmd rm $tmp |
237 else |
235 else |
238 # commit |
236 # commit |
239 log_debug " done:" |
237 log_debug " update" |
240 |
238 |
241 cmd mv $tmp $dst |
239 cmd mv $tmp $dst |
242 fi |
240 fi |
243 } |
241 } |
244 |
242 |
304 |
302 |
305 |
303 |
306 if check_update $dst $src; then |
304 if check_update $dst $src; then |
307 log_info "Copying zone $zone.$part..." |
305 log_info "Copying zone $zone.$part..." |
308 |
306 |
309 do_update $output cat $src |
307 do_update $dst cat $src |
310 else |
308 else |
311 log_info "Copying zone $zone.$part: not changed" |
309 log_info "Copying zone $zone.$part: not changed" |
312 fi |
310 fi |
313 } |
311 } |
314 |
312 |