#!/bin/sh # usage: ifchange target temporary set -e timestamp= keepsuffix= empty= color=auto until [ $# -eq 0 ]; do case "$1" in --timestamp) timestamp=. ;; --timestamp=*) timestamp=`expr \( "$1" : '[^=]*=\(.*\)' \)` ;; --keep) keepsuffix=.old ;; --keep=*) keepsuffix=`expr \( "$1" : '[^=]*=\(.*\)' \)` ;; --empty) empty=yes ;; --color) color=always ;; --color=*) color=`expr \( "$1" : '[^=]*=\(.*\)' \)` ;; *) break ;; esac shift done target="$1" temp="$2" if [ "$temp" = - ]; then temp="tmpdata$$.tmp~" cat > "$temp" || exit $? trap 'rm -f "$temp"' 0 fi msg_begin= msg_unchanged= msg_updated= msg_reset= if [ "$color" = always -o \( "$color" = auto -a -t 1 \) ]; then msg_begin="[" case "`tput smso 2>/dev/null`" in "$msg_begin"*m) if [ ${TEST_COLORS:+set} ]; then msg_unchanged=`expr ":$TEST_COLORS:" : ".*:pass=\([^:]*\):"` msg_updated=`expr ":$TEST_COLORS:" : ".*:fail=\([^:]*\):"` fi msg_unchanged="${msg_begin}${msg_unchanged:-32;1}m" msg_updated="${msg_begin}${msg_updated:-31;1}m" msg_reset="${msg_begin}m" ;; esac unset msg_begin fi if [ -f "$target" -a ! -${empty:+f}${empty:-s} "$temp" ] || cmp "$target" "$temp" >/dev/null 2>&1; then echo "$target ${msg_unchanged}unchanged${msg_reset}" rm -f "$temp" else echo "$target ${msg_updated}updated${msg_reset}" [ x"${keepsuffix}" = x ] || mv -f "$target" "${target}${keepsuffix}" mv -f "$temp" "$target" fi if [ -n "${timestamp}" ]; then if [ x"${timestamp}" = x. ]; then case "$target" in */*) timestamp=`dirname "$target"`/.time.`basename "$target"` ;; *) timestamp=.time."$target" ;; esac fi : > "$timestamp" fi