#!/bin/bash
#
# sp_channel_clone
#
# (c) 2013 SUSE Linux GmbH, Germany.
# GNU Public License. No warranty.
#
# Version: 2013-09-11
#

EXE=$0

CFG="/etc/sysconfig/spock"
test -s $CFG && source $CFG

test -z "${TEMP}" && TEMP="/dev/shm/spk.$RANDOM"
test -z "${SPCMD_USER}" && SPCMD_USER="admin"
test -z "${SPCMD_PASS}" && SPCMD_PASS="suse1234"

SOURCE=$2
PARENT=$3
LABEL=$4


function help() {
	echo "usage:    $(basename $0) --list"
	echo "usage:    $(basename $0) --clone CHILDCHANNEL PARENTCHANNEL NAME"
	echo
	echo " --clone          clone parent and all child channels"
	echo " --list           list channels"
	echo " --version        show version"
	echo " --help           show help"
	echo
	echo "example:    $(basename $0) --clone sles11-sp3-updates-x86_64 my_channel my_sles11-sp3-updates-x86_64"
	echo
}


function check_cred() {
	# TODO check or use defaults?
	if [ -z $SPCMD_USER ] || [ -z $SPCMD_PASS ] ; then
		echo "Please set SPCMD_PASS and SPCMD_PASS in $CFG"
		exit 1
	fi
}


function check_parent() {
	spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listbasechannels >$TEMP 2>/dev/null
	grep $PARENT $TEMP >/dev/null 2>&1
	# TODO make check a little more easy
	if [ $(echo $?) -gt 0 ] ; then
		echo "Parent channel does not exist. The following channels are available:"
		spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listbasechannels
		rm $TEMP
		exit 1
	fi
	rm $TEMP
}


function check_child() {
	spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listchildchannels >$TEMP 2>/dev/null
	grep $SOURCE $TEMP >/dev/null 2>&1
	if [ $(echo $?) -gt 0 ] ; then
		echo "Child channel does not exist. The following channels are available:"
		function_listchildchannels
		rm $TEMP
		exit 1
	fi
	rm $TEMP
}


function create_parent() {
	spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listbasechannels >$TEMP 2> /dev/null
	grep $PARENT_CLONE $TEMP >/dev/null 2>&1
	if [ $(echo $?) -gt 0 ] ; then
		echo "Parent channel does not exist. Creating parent channel"
		spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_clone -s $SOURCE -n $LABEL -l $LABEL
	fi
}


function_listchildchannels() {
	echo "Base channels:"
	BC=$(spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listbasechannels)
	for C in $BC; do
		echo "Basechannel $C has the following childchannels: "
		spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_listchildchannels $C
		echo
	done
}


#main()
case $1 in
 -l|--list)
	check_cred
	function_listchildchannels
 ;;
 -c|--clone)
	check_cred
	if [ -z $SOURCE ] || [ -z $PARENT ] || [ -z $LABEL ] ; then
		help
 		exit 1
	fi
	if [ $PARENT = $LABEL ] ; then
		create_parent
		if [ $(echo $?) -gt 0 ] ; then
			echo "Something did not work as expected."
			echo
			help
			exit 2
		fi
	else 
		check_parent
		check_child
		spacecmd -u $SPCMD_USER -p $SPCMD_PASS -q -- softwarechannel_clone -s $SOURCE -p $PARENT -n $LABEL -l $LABEL
		if [ $(echo $?) -gt 0 ] ; then
			echo "Something did not work as expected."
			echo
			help
			exit 2
		fi
	fi
 ;;
 -v|--version)
	echo -n "$(basename $EXE) "
	head -11 $EXE | grep "^# Version: "
 ;;
 *)
	help
 ;;
esac
#
