On my previous post I wrote a way I used to create a CI environment that'd export the entire application to a web location after each commit. I was working then for windows. Now, I have created a setup for Linux - with addition this time the post-commit will only update those files that are actually committed. Following is the post-commit script I got on Stackoverflow:
Reference:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
REPOS="$1" | |
REV="$2" | |
# A - Item added to repository | |
# D - Item deleted from repository | |
# U - File contents changed | |
# _U - Properties of item changed; note the leading underscore | |
# UU - File contents and properties changed | |
# Files and directories can be distinguished, as directory paths are displayed with a trailing "/" character. | |
LOOK=/usr/local/svn/bin/svnlook | |
SVN=/usr/local/svn/bin/svn | |
DEV=/var/www/test | |
cd /location/to/your/svnrepo | |
for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`; | |
do | |
len=${#changes} | |
idx=`expr index "$changes" =`; | |
directory=${changes:$idx}; | |
action=${changes:0:$idx-1}; | |
if [ ${changes:len-1} = '/' ] | |
then | |
case "$action" in | |
"A" ) \ | |
mkdir --mode=775 -p $DEV/$directory; | |
chown nobody:nobody $DEV/$directory; | |
chmod 775 $DEV/$directory; | |
;; | |
"D" ) \ | |
rmdir $DEV/$directory; | |
;; | |
esac | |
else | |
case "$action" in | |
"A"|"U"|"UU" ) \ | |
$SVN export --force --non-interactive -r HEAD -q file://$REPOS/$directory; | |
BASE=`basename $directory`; | |
DIR=`dirname $directory`; | |
chown nobody:nobody $BASE; | |
chmod 775 $BASE; | |
mkdir --mode=775 -p $DEV/$DIR; | |
cp -f --preserve=ownership $BASE $DEV/$DIR; | |
unlink $BASE; | |
;; | |
"D" ) \ | |
rm -f $DEV/$directory; | |
;; | |
esac | |
fi | |
done | |
exit 0 |
Reference:
- http://stackoverflow.com/questions/446518/using-svn-post-commit-hook-to-update-only-files-that-have-been-commited
- You can check another neat tool that does similar automation using php : svn2web
No comments:
Post a Comment