#!/bin/sh
#
# slitaz-release - SliTaz stable and cooking release helper. The script
# will check hostname to handle host specific release tasks (marmite, pangolin,
# mirror, local)
#
# Copyright (C) 2017 SliTaz GNU/Linux - BSD License
#
#. /lib/libtaz.sh # Is not installed on pangolin & mirror (slitaz 4.0)

version="$1"

# Parse cmdline options and store values in a variable.
for opt in "$@"; do
	opt_name="${opt%%=*}"
	opt_name="$(echo -n "${opt_name#--}" | tr -c 'a-zA-Z0-9' '_')"
	case "$opt" in
		--*=*)	export  $opt_name="${opt#*=}" ;;
		--*)	export  $opt_name="yes" ;;
	esac
done

# --repos=/path/to/local/repos
if [ "$repos" ]; then
	local_repos="$repos"
else
	local_repos="$HOME/Projects"
fi

help() {
	cat << EOT

$(colorize 38 "Usage:")	slitaz-release [version] [--options]

$(colorize 38 "Options:")
	--repos=
	--now

$(colorize 033 "Local repos   :") $local_repos
$(colorize 033 "Documentation :") http://www.slitaz.org/en/devel/release.php

EOT
}

# Colorize message
colorize() {
	: ${color=$1}
	shift
	case "$color" in
		0*) echo -e "\\033[${color:-38}m$@\\033[39m" ;;
		*)  echo -e "\\033[1;${color:-38}m$@\\033[0;39m" ;;
	esac; unset color
}

title() {
	echo ""; colorize 033 "$@"
}

check_string() {
	if [ "$slitaz_release" != "$version" ]; then
		read=1
		colorize 031 "Wrong string: $slitaz_release"
		echo " * $1"
	else
		ready=0
		colorize 031 "SliTaz release: $version"
	fi
}

#
# Handle commands
#
case "$1" in

	info)
		echo -n "Hostname:"; hostname ;;
		
	"") help; exit 0 ;;
	
esac

#
# Handle host specific tasks
#
case "$(hostname)" in

	marmite)
		# Build host with chroots and built ISOs
		slitaz="/home/slitaz"
		;;
	
	mirror) 
		# Host packages and official ISOs
		packages=""
		;;
	
	pangolin) 
		# Host all Hg repositories
		repos="/home/slitaz/repos"
		backups="/home/slitaz/backups"
		
		# Stable wok
		title "Checking repo: wok-stable" 
		cd ${repos}/wok-stable; hg up
		slitaz_release=$(hg parents --template '{latesttag}')
		check_string "stable wok is not yet tagged to $version"
		
		# Cooking wok
		title "Checking repo: wok"
		cd ${repos}/wok; hg up
		slitaz_release=$(hg parents --template '{latesttag}')
		check_string "cooking wok is not yet ready to be copied"
		
		# Ready for --now ?
		if [ "$now" ] && [ "$ready" = 0 ]; then
			echo "Releasing SliTaz: $version"
			cd ${repos}/wok-stable; hg up
			previous_release=$(hg parents --template '{latesttag}')
			echo "Previous release string: $previous_release"
			
			echo "Archiving current wok-stable..."
			cd ${repos}
			tar czf wok-stable-${previous_release}.tar.gz wok-stable
			mv wok-stable-${previous_release}.tar.gz ${backups}
			
			echo "Copying current wok to wok-stable"
			rm -rf wok-stable && cp -a wok wok-stable
			
		else
			echo "Not yet ready to release SliTaz $version on $(hostname)"
		fi
		
		echo "" ;;
	
	*)
		# Local Hg repos: set stable string and Hg tags
		for repo in slitaz-base-files slitaz-doc wok; do
			if [ ! -d "$local_repos/$repo" ]; then
				echo ""
				colorize 031 "Missing repos: $local_repos/$repo"
				help; exit 1
			fi
		done
		
		# /etc/slitaz-release
		title "Checking file: /etc/slitaz-release" 
		base_files="$local_repos/slitaz-base-files/rootfs"
		slitaz_release=$(cat $base_files/etc/slitaz-release)
		check_string "slitaz-base-files must be modified and wok updated"
		
		# isolinux.cfg
		title "Checking file: isolinux.cfg" 
		isolinux_cfg="$local_repos/wok/syslinux/stuff/isolinux.cfg"
		slitaz_release=$(grep "MENU TITLE" $isolinux_cfg | cut -d " " -f 6)
		check_string "syslinux package must be modified and wok updated"
		
		# slitaz-doc
		title "Checking repo: slitaz-doc" 
		cd ${local_repos}/slitaz-doc
		slitaz_release=$(hg parents --template '{latesttag}')
		check_string "slitaz-doc should provide relnotes and be tagged"
		
		# wok: the current cooking wok will be copied to wok-stable on
		# Hg server and then it will continue its own life with security updates.
		# Tagging the wok lets us have the initial state of the new release.
		title "Checking repo: wok" 
		cd ${local_repos}/wok
		slitaz_release=$(hg parents --template '{latesttag}')
		check_string "the wok should be tagged to $version"
		echo ""
		
		if [ "$ready" = 0 ]; then
			echo "Ready to release SliTaz $version :-)"
		else
			echo "Not yet ready to release SliTaz $version"
		fi
		
		echo "" ;;
esac

exit 0
