#!/bin/sh
# Rails upgrade tool by Francisco R. Santos <frsantos@gmail.com>
#
# This script upgrades a frozen rails calling the rake tasks 
# rails:free:gems and rails:update. The script is subversion aware, so 
# it adds to a changelist named "Upgrade rails to version <new_rails_version>"
# all files changes in the process under the vendor/rails directory.
#   TODO: add also to the changelist all files changed when calling the
#   rails:update task

if [ ! -d vendor ]; then
    echo "vendor directory not found"
    exit 1
fi

if [ ! -d vendor/rails -o ! -d vendor/rails/.svn ]; then
    echo "Rails is NOT under subversion. Using standard procedure"
	rake rails:freeze:gems
	rake rails:update
else
    echo "Rails under subversion. Using detailed procedure"

	# Backup old rails before freezing
	cd vendor
	mv -f rails rails_old

	# Freeze rails and get back to old version
	rake rails:freeze:gems
	mv -f rails rails_new
	mv -f rails_old rails

	# Sync changes from new rails to old
	echo "Updating rails"
	rsync -avC -q --delete rails_new/ rails
	rm -rf rails_new

	# Do a "svn add" of new files and "svn del" of removed files
	echo "Marking added and removed files"
	svn st rails | egrep ^\\? | awk {'print $2'} | xargs -i svn add -q {}
	svn st rails | egrep ^\\! | awk {'print $2'} | xargs -i svn del -q {}

	# Add all modified under rails directory files to a new changelist
	NEW_VERSION=`../script/about 2> /dev/null | grep "Rails version" | awk {'print $3'}`
	CHANGELIST="Upgrade rails to version ${NEW_VERSION}"
	echo "Setting modified files in changelist \"${CHANGELIST}\""
	#svn cl -q -R ${CHANGELIST} rails # svn cl -R seems buggy
	svn st rails | egrep '^[ADM]' | awk {'print $2'} | xargs -i svn cl -q ${CHANGELIST} {}

	# Let rails update scripts and other files
	echo "Updating rails scripts"
	cd ..
	rake rails:update
fi
