#!/bin/bash
# Copyright (C) 2004 Networks Associates Technology Inc. All rights reserved.
shopt -s extglob	# fancy globbing
shopt -s dotglob	# globbing * includes .*

eng_dir=${1}	# directory to install in
ts=${2}		# identifier from av-update
shift 2
englist=( "$@" )

StampOut()	# print args with timestamp
{
    printf "$(date '+%Y-%m-%d%a%T%z'): %s\n" "$@"
}

SendLog()	# send stuff to syslog and echo to stdout
{
    local saverr=$?	# save previous error
    [[ $# -gt 0 ]] || return 0	# nothing to send
    printf '%s\n' "$@" | logger -t "$me[$$]"
    StampOut "$@"
    return $saverr	# return saved error
}

[[ -d "$eng_dir/backup" ]] && (	
	# clean out all but last 2 backups
	cd "$eng_dir/backup" || exit 0
	set -- $(find */ -prune -exec rmdir {} \; -o -print 2>/dev/null)
	while [[ $# -gt 2 ]]; do
	    SendLog "removing $eng_dir/backup/$1"
	    rm -rf "$1"
	    shift
	done
    )

eng_tmp="$eng_dir/tmp.$ts.$$"		# tmp dir in $eng_dir filesystem
eng_bak="$eng_dir/backup/$ts.$$"	# new backup dir
[[ -d "$eng_bak" ]] || mkdir -p "$eng_bak" || exit 1
mkdir -p "$eng_tmp" || exit 1

# for each engine file
for lib in "${englist[@]}"
do	
	mv -f "eng/$lib" "$eng_tmp/." || exit 1
	[[ -f "$eng_dir/$lib" ]] || continue	# check for old file
	ln -f "$eng_dir/$lib" "$eng_bak/." || exit 1

	for l in "$eng_dir"/!("$lib")
	do	
	    # find other linked files
	    [[ "$l" -ef "$eng_dir/$lib" ]] || continue
	    mv "$l" "$eng_bak/." || exit 1
	done
done

mv "$eng_tmp"/* "$eng_dir/." || exit 1
rm -rf $eng_tmp
exit 0
