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