mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/bin/sh
 | 
						||
# usage: ifchange target temporary
 | 
						||
 | 
						||
# Used in generating revision.h via Makefiles.
 | 
						||
 | 
						||
help() {
 | 
						||
    cat <<HELP
 | 
						||
usage: $0 [options] target new-file
 | 
						||
options:
 | 
						||
  --timestamp[=file] touch timestamp file. (default: prefixed with ".time".
 | 
						||
                     under the directory of the target)
 | 
						||
  --keep[=suffix]    keep old file with suffix. (default: '.old')
 | 
						||
  --empty            assume unchanged if the new file is empty.
 | 
						||
  --color[=always|auto|never] colorize output.
 | 
						||
HELP
 | 
						||
}
 | 
						||
 | 
						||
set -e
 | 
						||
timestamp=
 | 
						||
keepsuffix=
 | 
						||
empty=
 | 
						||
color=auto
 | 
						||
until [ $# -eq 0 ]; do
 | 
						||
    case "$1" in
 | 
						||
	--)
 | 
						||
	    shift
 | 
						||
	    break;
 | 
						||
	    ;;
 | 
						||
	--timestamp)
 | 
						||
	    timestamp=.
 | 
						||
	    ;;
 | 
						||
	--timestamp=*)
 | 
						||
	    timestamp=`expr \( "$1" : '[^=]*=\(.*\)' \)`
 | 
						||
	    ;;
 | 
						||
	--keep)
 | 
						||
	    keepsuffix=.old
 | 
						||
	    ;;
 | 
						||
	--keep=*)
 | 
						||
	    keepsuffix=`expr \( "$1" : '[^=]*=\(.*\)' \)`
 | 
						||
	    ;;
 | 
						||
	--empty)
 | 
						||
	    empty=yes
 | 
						||
	    ;;
 | 
						||
	--color)
 | 
						||
	    color=always
 | 
						||
	    ;;
 | 
						||
	--color=*)
 | 
						||
	    color=`expr \( "$1" : '[^=]*=\(.*\)' \)`
 | 
						||
	    ;;
 | 
						||
	--debug)
 | 
						||
	    set -x
 | 
						||
	    ;;
 | 
						||
	--help)
 | 
						||
	    help
 | 
						||
	    exit
 | 
						||
	    ;;
 | 
						||
	--*)
 | 
						||
	    echo "$0: unknown option: $1" 1>&2
 | 
						||
	    exit 1
 | 
						||
	    ;;
 | 
						||
	*)
 | 
						||
	    break
 | 
						||
	    ;;
 | 
						||
    esac
 | 
						||
    shift
 | 
						||
done
 | 
						||
 | 
						||
if [ "$#" != 2 ]; then
 | 
						||
    help
 | 
						||
    exit 1
 | 
						||
fi
 | 
						||
 | 
						||
target="$1"
 | 
						||
temp="$2"
 | 
						||
if [ "$temp" = - ]; then
 | 
						||
    temp="tmpdata$$.tmp~"
 | 
						||
    cat > "$temp"
 | 
						||
    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}m"
 | 
						||
	    msg_updated="${msg_begin}${msg_updated:-31;1}m"
 | 
						||
	    msg_reset="${msg_begin}m"
 | 
						||
	    ;;
 | 
						||
    esac
 | 
						||
    unset msg_begin
 | 
						||
fi
 | 
						||
 | 
						||
targetdir=
 | 
						||
case "$target" in */*) targetdir=`dirname "$target"`;; esac
 | 
						||
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"${targetdir}" = x -o -d "${targetdir}" ] || mkdir -p "${targetdir}"
 | 
						||
    [ x"${keepsuffix}" != x -a -f "$target" ] && mv -f "$target" "${target}${keepsuffix}"
 | 
						||
    mv -f "$temp" "$target"
 | 
						||
fi
 | 
						||
 | 
						||
if [ -n "${timestamp}" ]; then
 | 
						||
    if [ x"${timestamp}" = x. ]; then
 | 
						||
	if [ x"$targetdir" = x ]; then
 | 
						||
	    timestamp=.time."$target"
 | 
						||
	else
 | 
						||
	    timestamp="$targetdir"/.time.`basename "$target"`
 | 
						||
	fi
 | 
						||
    fi
 | 
						||
    : > "$timestamp"
 | 
						||
fi
 |