File download_latest_svn of Package yawn

#!/bin/bash
#
# TODO
# This script cannot read mind of all developers
# So it will assume that Version: SOMENUMBERr%{revision} 
# is updated manually for base version (SOMENUMBER) so please don't expect
# mirracles :)
#
#### Setup few variables
MYCWD=$PWD
SVN_INFO_TMPFILE=$(mktemp /tmp/svn_infoXXXXX)
SPEC_FILE=$(ls *.spec)
SVN_EXPORT_FOLDER=$(mktemp -d /tmp/svn_export_folderXXXXX)
SVN_REVISION=$(grep -E '%(define|global) revision' $SPEC_FILE | sed -re 's/%(global|define) revision\s*//g')
SVN_URL=$(grep "URL: " $SPEC_FILE | sed 's/.*URL:\s*//')
SVN_INFO_REVISION=""
PACKAGE_NAME=$(egrep "[nN]ame:" $SPEC_FILE | sed -e 's/[nN]ame:\s*//g')
export SVN_INFO_TMPFILE SVN_REVISION SVN_URL SVN_INFO_REVISION SPEC_FILE
### End of setup

# All function that do some interesting stuff :)

function _fetch_svn_info() {
	if [ -z $SVN_URL ] ; then
		echo "ERROR: missing repo url"
		exit -1
	fi
	svn info $SVN_URL >> $SVN_INFO_TMPFILE
	SVN_INFO_REVISION=$(grep "Revision:" $SVN_INFO_TMPFILE | cut -d" " -f 2)
	export SVN_INFO_REVISION
}

function _svn_info() {
	while read line ;do
		echo "# ${line}" >> ${SVN_INFO_TMPFILE}.WITH_COMMENTS
	done < $SVN_INFO_TMPFILE
}

function _package_svn_source() {
	cd $SVN_EXPORT_FOLDER
	svn export $SVN_URL ${PACKAGE_NAME} > $MYCWD/${PACKAGE_NAME}_svn_export_$(date +"%Y%m%d").log
	tar jcf $MYCWD/${PACKAGE_NAME}.tar.bz2 .
}

function _update_specfile() {
	#set -x
	_svn_info
	cd $MYCWD
	LINES=$(cat $SPEC_FILE | wc -l)
	START=$(grep -n -e '# SVN_INFO_START' $SPEC_FILE | cut -d : -f 1)
	END=$(grep -n -e '# SVN_INFO_END' $SPEC_FILE | cut -d : -f 1)
	TAIL=$(($LINES-$END+1))
	
	head -n $START $SPEC_FILE > ${SPEC_FILE}.$$
	cat ${SVN_INFO_TMPFILE}.WITH_COMMENTS >> ${SPEC_FILE}.$$
	tail -n $TAIL ${SPEC_FILE}  >> ${SPEC_FILE}.$$
	sed -i ${SPEC_FILE}.$$ -re "s/%(define|global) revision.*/%\1 revision ${SVN_INFO_REVISION}/g"
	mv ${SPEC_FILE}.$$ ${SPEC_FILE}
}

# Main
#
echo "OK: Fetching latest svn info"
_fetch_svn_info
if [  $? -ne 0 ] ; then
	echo "ERROR: Could not fetch latest svn infomation from URL provided in $(ls *.spec)"
	exit -1
fi
echo "OK: Fetched latest svn info"

if [ $SVN_REVISION == $SVN_INFO_REVISION ] ; then
	echo "OK: No changes to repo not updating"
	exit 0
fi
echo "OK: Repository changed from last run updating"
_package_svn_source
echo "OK: Updated tar.bz file"
_update_specfile
echo "OK: Updated spec file"

# cleanup
rm -rf $SVN_INFO_TMPFILE $SVN_EXPORT_FOLDER ${SVN_INFO_TMPFILE}.WITH_COMMENTS
openSUSE Build Service is sponsored by