bin/update
changeset 9 beb4bef2498a
parent 8 dab145ee3f81
child 10 26e789db3f72
equal deleted inserted replaced
8:dab145ee3f81 9:beb4bef2498a
    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