#!/bin/bash

checkout(){
	echo -en "$c_l"
	fc1="$(mktemp)"
	clear
	ologo
	i=0
	COUNT=0

	if [ -d "$svndir" ]
	then
		rm -rf "$svndir"
		printf "$p_l\n  $txt_delete oscam-svn $re_\n"
	else
		printf "$p_l\n  $txt_no oscam-svn $txt_found\n$re_"
	fi

	printf "$w_l  SVN TrunkURL  : $g_l$trunkurl$re_"
	[ ! -z "$1" ] && [ $(($1)) -gt 6999 ] && opt_="-r$1" && mac_="($txt_selected)" || opt_=''

	printf "\n$w_l  SVN FileCount : "
	svn info -R "$trunkurl" |grep '^URL' |uniq |wc -l >"$fc1"
	n=$(cat "$fc1")
	printf "$g_l""$txt_found $n"
	printf "\n$w_l  SVN checkout  : "

	while read line filename
	do
		counter=$(( 100*(++i)/n))
		tput cup 10 18
		[ "$counter" -lt "100" ] && echo -en "$g_l""$counter%$re_" || echo -e "$g_l""100%$re_"
	done < <( svn co "$trunkurl" $opt_ "$svndir" |sed "s|$svndir/||g")

	tput cup 10 18;
	echo -e "$g_l""100%$re_"

	if [ -f "$svndir/config.sh" ]
	then
		tput cup 11 0;
		printf "$w_l  SVN Revision  :$y_l $("$svndir/config.sh" -r) $b_l$mac_$re_\n$w_l  SVN UserPath  :$y_l $svndir"
	fi

	[ -f "$svndir/config.h" ]&& reset_="$("$svndir/config.sh" -R)"
	rm -rf "$fc1"
	_nl
	[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED"
	[ -f "$workdir/EMU_ON" ] && rm -f "$workdir/EMU_ON"
	tarsvn
}

svnrestore(){
	clear
	echo -en "$c_l"
	ologo

	if [ "$1" == "list" ]
	then
		cd "$bsvn"
		bfiles="$(find . -type f |sed 's|./||' |sed 's|.tar.gz||')"
		bcount=$(echo "$bfiles" |wc -w)

		if [ "$bcount" -gt "0" ]
		then
			echo -e "\n$c_l    $bcount$w_l svn backups found\n    ____________________$re_\n"
			for b in $bfiles
			do
				echo -e "$c_l    --> $w_l$b"
			done
			_nl
		else
			echo -e "\n$r_l    $bcount$w_l svn backups found\n    ____________________$re_\n"
		fi

		exit
	fi

	if [ -d "$svndir" ]
	then
		rm -rf "$svndir"
		printf "$p_l\n  $txt_delete $txt_existing oscam-svn $re_\n"
	else
		printf "$p_l\n  $txt_no oscam-svn $txt_found\n$re_"
	fi
	_nl
	untarsvn $1
	#[ -f "$svndir/config.h" ]&& printf "$w_l""  SVN Revision  : $y_l""$("$svndir/config.sh" -r) restored\n\n$re_"
	printf "\e[1A\t\t\t$y_l""restored\n\n$re_"
	[ -L "$workdir/lastbuild.log" ]&& rm "$workdir/lastbuild.log";
	[ -L "$workdir/lastpatch.log" ]&& rm "$workdir/lastpatch.log";
	[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED";
	[ -f "$workdir/EMU_ON" ] && rm -f "$workdir/EMU_ON";
}

quicksvnrestore(){
	printf "$1 \n"
	untarsvn $1
}

svnup(){
	printf "$c_l"
	clear
	ologo
	i=1

	if [ -d "$svndir" ]
	then
		printf "$p_l\n  $txt_update oscam-svn $re_\n"
	else
		checkout
		return
	fi

	printf "\n$w_l  SVN TrunkURL  : $g_l""$trunkurl""$re_"
	svn co "$trunkurl" "$svndir" -q

	if [ -f "$svndir/config.sh" ]
	then
		tput cup 10 2
		printf "\n$w_l  SVN Revision  : ""$y_l$("$svndir/config.sh" -r) $b_l$mac_$re_\n$w_l  SVN UserPath  : $y_l""$svndir\n$re_"
	fi

	if [ -f "$svndir/config.h" ]
	then
		reset_="$("$svndir/config.sh" -R)"
	fi
}

svnpatch(){
	if [ ! -f "$workdir/SVN-IS-PATCHED" ]
	then
		clear
		printf $C
		ologo
		unset patchlist
		cd "$pdir"
		patchlist=(*.patch)

		if [ "$(ls -A "$pdir"/*.patch 2>/dev/null)" ]
		then
			touch "$workdir/SVN-IS-PATCHED"
			for p in "${patchlist[@]}"
			do
				echo -e $WH"\n    -> $p <-"$W
				sleep .5
				patch -d$svndir/ -p0 < "$pdir/$p" |sed -e "s/^patching file/$G patching > $WH/g;s/^Hunk/$P Hunk     > $Y/g;s/FAILED/$R FAILED/g; ;s/-- saving/$Y -- saving/g;"
			done
		else
			printf $WH"    $txt_no patch $txt_found"
		fi

	else
		clear
		printf $C
		ologo
		printf $WH"    already patched"
	fi
	echo -e $W
}

_dialog_checkout(){
	upc="$(mktemp)"
	(printf " $txt_verify_syscheck "
	[ "$sanity" == "1" ] && printf "ok\n" && sleep 1;

	if [ "${s3cfg_vars[NO_SVN_AUTOUPDATE]}" == "0" ]
	then
		printf  " $txt_verify_svn "
		if [ -f "$svndir/config.sh" ]
		then
			printf "ok\n"
			sleep 1
			printf " $txt_update_svn $txt_wait\n"
			cd "$svndir"
			svn -q update
			echo 1 >"$upc"
			sleep 1
		fi
	fi;) | "$gui" "$st_" "$bt_" "$title_" "$pb_" 5 52

	if [ "${s3cfg_vars[NO_SVN_AUTOUPDATE]}" == "0" ]
	then
		upc1=$(cat "$upc" 2>/dev/null)
		rm -f "$upc"
		[ ! "$upc1" == "1" ] && _dialog_checkout1

		if [ -f "$svndir/config.sh" ]
		then
			reset_="$("$svndir/config.sh" -R)"
		fi
		_get_config_menu
	fi

	if [ -n "$1" ]
	then
		if [ -f "$tccfgdir/$1" ] && [ -f "$svndir/config.sh" ]
		then
			source "$tccfgdir/$1"
			if [ ! -f "$tcdir/$_toolchainname/bin/$_compiler""gcc" ]
			then
				first="$1"
				_toolchain_gui_install
			fi
			loadprofile="yes"
			_toolchain_build_menu "$1"
		else
			_select_menu
		fi
	fi
	_select_menu
}

_dialog_checkout1(){
	rm -rf "$svndir" 2>/dev/null
	COUNT=0
	[ -z "$1" ] && rn=0 || rn="$1"
	if [ "$rn" -ge "7000" ]
	then
		_rev="-r $rn"
		sc_text="Revision: $rn"
	else
		_rev=''
		sc_text="$txt_latest"
	fi
	(printf "$txt_prepare_svn $txt_wait";)| "$gui" "$st_" "$bt_" "$title_" "$pb_" 3 55
	nnn="$(svn info $_rev -R "$trunkurl" |grep "^URL: " |uniq |wc -l)"
	"$gui" "$st_" "$bt_" "$title_" --title " -[ SVN Checkout $sc_text ]- " --gauge "  $txt_wait" 6 75 < <(while read line filename;do ((++i));PCT=$(( 100*i/(nnn+1) ))
cat <<EOF
XXX
$PCT
  $line
XXX
EOF
done < <(svn co "$trunkurl" "$svndir" $_rev| sed "s@$svndir@@g"| awk '{print $2}'
	cd "$svndir"
	if [ -f "$svndir/config.sh" ]
	then
		reset_="$("$svndir/config.sh" -R)"
		printf "Revision: $(REVISION) done..."
		[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED"
		[ -f "$workdir/EMU_ON" ] && rm -f "$workdir/EMU_ON"
		_get_config_menu
	fi;))
}

REVISION(){
	[ -d "$svndir" ] && cd "$svndir" && svnversion -n . 2>/dev/null| sed 's/[^0-9]//g' || printf " nosvn "
}