#!/bin/bash
#
# sp_channels_sync
#
# (c) 2012-2013 SUSE Linux GmbH, Germany.
# GNU Public License. No warranty.
#
# Version: 2013-01-29
# initial version: mh@suse.com
#
# set -e

EXE=$(basename $0)
LOG="/var/log/$EXE.log"
XML="/usr/share/susemanager/channels.xml"

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

# TODO SYNC_URL from cmdline?
test -z "${SYNC_URL}" &&\
        SYNC_URL='https://nu.novell.com/repo/\$RCE'
test -z "${SYNC_DBS}" &&\
	SYNC_DBS="/etc/init.d/oracle-xe"
test -z "${SYNC_RESTART}" &&\
	SYNC_RESTART="no"


function help() {
	echo "usage:	$(basename $0) OPTION"
	echo
	echo "sync updates from provided channels into SUSE Manager."
	echo
	echo " --subsc	sync all subscribed channels"
	echo " --basic	sync basic channels only"
	echo " --typed	sync channels, typed on cmdline. basic channels have to go first."
	echo " --list		list subscribed channels, no sync"
	echo " --version	show version"
	echo " --help		show help"
}


function write_log() {
	echo "$EXE $(date +"%Y-%m-%d %H:%M:%S") $*" >>$LOG
}


function restart_service() {
	write_log "start $FUNCNAME"
	RC=0
	case "$SYNC_RESTART" in
	 yes|YES|Yes)
		spacewalk-service stop
		$SYNC_DBS stop
		$SYNC_DBS start
		spacewalk-service start
	 ;;
	esac
	RC=$?
	write_log "end $FUNCNAME : $RC"
}


function list_channels() {
 write_log "start $FUNCNAME"
 RC=0
# write_log "start $FUNCNAME mgr-ncc-sync -s"
# mgr-ncc-sync -q -s
# RC=$?
# sleep 20
# write_log "end $FUNCNAME mgr-ncc-sync -s : $RC"

 case $1 in
	-s|--subsc)
 	# mh@suse.com:
 	# mgr-ncc-sync -l | sed -n -e 's,^[        ]*\[P\] \(.*\)$,\1,p'
		mgr-ncc-sync -l | awk '$1=="[P]" {print $2}'
	;;
	-b|--basic)
	# TODO awk pattern 
 		mgr-ncc-sync -l | grep -v "^ " | awk '$1=="[P]" {print $2}'
	;;
 esac
 RC=$?
 write_log "end $FUNCNAME : $RC"
}


function get_url() {
	# TODO ?
	fgrep 'label="'$1'"' $XML | sed -e 's,^.*source_url="\([^\"]*\)".*$,\1,'
}


function local_url() {
# mh@suse.com:
# echo "$1"|sed -e 's,https://nu.novell.com/repo/\$RCE,http://s3p3241/repositories/,'
# TODO sles pool for proxy as child of proxy? s. mail K.Frederiksen.
	echo "$1" | sed -e "s,https://nu.novell.com/repo/\$RCE,${SYNC_URL},"
}


function run_sync() {
	write_log "start $FUNCNAME $1"
	RC=0
	local _channel=$1
	local _url=$(get_url $_channel)
	local _local_url=$(local_url $_url)
	test -n "$_local_url" &&\
		spacewalk-repo-sync -c $_channel -u $_local_url
	RC=$?
	write_log "end $FUNCNAME $1 : $RC"
}


function sync_channels() {
	write_log "start $FUNCNAME $1"
	restart_service >>$LOG 2>&1

	for C in $(list_channels $1); do
		run_sync $C >>$LOG 2>&1
 	done

	restart_service >>$LOG 2>&1
	write_log "end $FUNCNAME $1 : $RC"
}


# main()

case $1 in
 -l|--list)
	list_channels -s
 ;;
 -b|--basic)
	sync_channels -b 
 ;;
 -s|--subsc*)
	sync_channels -s
 ;;
 -t|--typed)
	restart_service >>$LOG 2>&1
	shift
	while test $# -gt 0 ; do 
		run_sync $1 >>$LOG 2>&1
		shift
	done
	restart_service >>$LOG 2>&1
 ;;
 -v|--version)
	echo -n "$(basename $EXE) "
	head -11 $EXE | grep "^# Version: "
 ;;
 *)
	help
 ;;
esac
#
