#!/bin/sh

# work_dir :  repertoire ou seront creees les sandboxes temporaires
# dest_dir : repertoire ou seront stockes les plugins
# dest_xml : repertoire ou sera stocke l'export xml
work_dir="/tmp/work"
dest_dir="/tmp/"
dest_xml="/tmp/"

#plugins : liste des plugins separes par un retour chariot
# chaque ligne contient urldusvn
#Exemple : https://dcplugins.googlecode.com/svn/includesubcats
# Si le plugin a un nom different du repertoire (ex: trunk, ajouter #nomduplugin a la fin)
#Exemple : https://dcplugins.googlecode.com/svn/gallery/trunk#gallery
#
plugins="
https://svn.dotclear.net/lab/plugins/gallery/trunk#gallery
https://svn.dotclear.net/lab/plugins/includesubcats
https://svn.dotclear.net/lab/plugins/mymeta/trunk#mymeta
"
themes="
https://svn.dotclear.net/lab/themes/freshy2
"

module_info=`dirname $0`/load_module.php
cd `dirname $0`

if [ ! -d $dest_dir ]; then
	echo "No dest directory"
	exit 1
fi

if [ ! -d $dest_xml ]; then
	echo "No dest xml directory"
	exit 1
fi


build_module()
{
	module_url="$1"
	module=`echo $module_url | sed 's/^.*#//'`
	if [ "$module_url" = "$module" ]
	then
		module=`basename $module_url`
	else
		module_url=`echo $module_url | sed 's/#.*$//'`
	fi
	module_work_dir="$2"
	prefix="$3"
	module_dest_dir="$4"
	with_screen="$5"
	
	#module_url=$svn_url/$module
	module_co=$module_work_dir/$module
	
	if [ ! -d $module_work_dir ]; then
		mkdir $module_work_dir
	fi
	
	# Get revision and svn export
	plug_rev=`LANG=C svn info $module_url | grep -i 'last changed rev' | cut -f4 -d' '`
	svn export -r $plug_rev $module_url $module_co
	
	# Set module version with revision number
	$module_info $module_co $plug_rev > $module_work_dir/tmp.xml
	plug_version=`grep '<version>' $module_work_dir/tmp.xml | perl -pe 's/(.*<version>)(.+?)(<\/version>.*)/$2/g'`
	
	module_dest=$module_dest_dir/$prefix-$module-$plug_version.zip
	module_screen=$module_dest_dir/$module-$plug_version.jpg
	
	# XML File
	module_id='"'`basename $module`'"'
	echo "<module id=$module_id>" >> "$module_work_dir/dist.xml"
	echo "<file>`basename $module_dest`</file>" >> "$module_work_dir/dist.xml"
	cat $module_work_dir/tmp.xml >> "$module_work_dir/dist.xml"
	echo "</module>" >> "$module_work_dir/dist.xml"
	rm "$module_work_dir/tmp.xml"
	
	if [ -f $module_dest ]; then
		return
	fi
	
	echo "Building module: $module - $plug_rev"
	
	oldpwd=$PWD
	cd $module_work_dir && zip -r9 $module.zip $module
	cd $oldpwd
	
	if [ "$?" = "0" ]; then
		/bin/rm -f $module_dest_dir/$prefix-$module-*
		/bin/cp "$module_work_dir/$module.zip" "$module_dest"
	fi
	
	# Screenshot
	if [ "$with_screen" = "1" ] && [ -f "$module_work_dir/$module/screenshot.jpg" ]; then
		/bin/cp "$module_work_dir/$module/screenshot.jpg" "$module_screen"
	fi
}

create_xml_file()
{
	src_file=$1
	dest_file=$2
	
	echo '<?xml version="1.0" encoding="UTF-8"?>' > "$dest_file~"
	echo "<modules>" >> "$dest_file~"
	cat "$src_file" >> "$dest_file~"
	echo "</modules>" >> "$dest_file~"
	mv "$dest_file~" "$dest_file"
}

if [ ! -d $work_dir ]; then
	mkdir -p $work_dir
fi

for i in $plugins; do
	build_module "$i" "$work_dir/plugins" "plugin" "$dest_dir"
done
create_xml_file "$work_dir/plugins/dist.xml" "$dest_xml/modules_plugins.xml"

for i in $themes; do
	build_module "$i" "$work_dir/themes" "theme" "$dest_dir" 1
done
create_xml_file "$work_dir/themes/dist.xml" "$dest_xml/modules_themes.xml"

/bin/rm -rf $work_dir


