#!/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 '') &&
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...' &&
	if test -z "$pushurl"; then
		git remote add "$remote" "$fetchurl"
	else
		git config remote."$remote".url "$fetchurl"
	fi &&
	pushurl="${pushurl_}" &&
	git config remote."$remote".pushurl "$pushurl" &&
	echo 'Remote "'"$remote"'" is now configured to push to

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