#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under onemake
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

absdir() { echo `cd $1 && pwd`; }

abspath() {
    if test -d "$1"; then absdir "$1";
    else echo $(absdir $(dirname "$1"))/$(basename "$1")
    fi
}

usage() {
    echo "Usage: $(basename $0) file [file...]
Synchronize the contents of each file or directory to the same absolute path on
each host in \$HOSTS.
"
    exit 1
}

test "$*" || usage

for f in $*; do FILES="$FILES $(abspath $f)" || exit 1; done

OK_FILE=`mktemp`		# Will be deleted if anything goes wrong.
trap "rm -f $OK_FILE" EXIT

for h in $HOSTS; do
    rsync -aRO --delete $FILES $h:/ || { echo "rsync to $h failed"; rm -f $OK_FILE; } &
done
wait
test -f $OK_FILE

