#!/usr/bin/env bash
#=============================================================================
# Copyright 2010-2012 Kitware, Inc.
#
# Licensed 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.
#=============================================================================

# Run this script to set up the topic stage for pushing changes.

# Project configuration instructions:
#
# - Run a Topic Stage repository next to the main project repository.
#
# - Populate adjacent "config" file with:
#    stage.url = Topic Stage repository URL
#    stage.pushurl = Topic Stage push URL if not "$url"

egrep-q() {
	egrep "$@" >/dev/null 2>/dev/null
}

die() {
	echo 1>&2 "$@" ; exit 1
}

# Make sure we are inside the repository.
cd "${BASH_SOURCE%/*}" &&

# Load the project configuration.
fetchurl_=$(git config -f config --get stage.url) &&
pushurl_=$(git config -f config --get stage.pushurl || echo "$fetchurl_") &&
remote=$(git config -f config --get stage.remote || echo 'stage') ||
die 'This project is not configured to use a topic stage.'

# Get current stage push URL.
pushurl=$(git config --get remote."$remote".pushurl ||
	  git config --get remote."$remote".url || echo '') &&

# Tell user about current configuration.
if test -n "$pushurl"; then
	echo 'Remote "'"$remote"'" is currently configured to push to

  '"$pushurl"'
' &&
	read -ep 'Reconfigure Topic Stage? [y/N]: ' ans &&
	if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
		setup=1
	else
		setup=''
	fi
else
	setup=1
fi

# Perform setup if necessary.
if test -n "$setup"; then
	echo 'Setting up the topic stage...' &&
	fetchurl="${fetchurl_}" &&
	if test -z "$pushurl"; then
		git remote add "$remote" "$fetchurl"
	else
		git config remote."$remote".url "$fetchurl"
	fi &&
	pushurl="${pushurl_}" &&
	if test "$pushurl" != "$fetchurl"; then
		git config remote."$remote".pushurl "$pushurl"
	fi &&
	echo 'Remote "'"$remote"'" is now configured to push to

  '"$pushurl"'
'
fi || die 'Could not configure the topic stage remote.'
