A shell script to sync between two svn server, it is not a svn server mirror.
#!/bin/bash
SRCFOLDER="[source folder]"
#use on lenny which is the [Our product] build box.
#This variable is setted for testing.
#TRUNK_G***_WCOPY="/home/roro/work/firmware/branches/merge_from_G***/"
#TRUNK_N***_WCOPY="/home/roro/work/firmware/branches/[source folder]ForTest/"
TRUNK_G***_WCOPY="/home/roro/work/[Our product]/G***/Trunk/"
TRUNK_N***_WCOPY="/home/roro/work/[Our product]/N***/trunk/src/"
#TRUNK_G***_WCOPY="/home/roro/work/[Our product]/trunk/"
#TRUNK_N***_WCOPY="/home/roro/work/firmware/trunk/src/"
HOMEDIR="/home/roro/"
CONFFILE=".syncrc"
SVN_CI_RETURN=".svncire"
TIME=`date +D%FT%T`
ReadSvnOldRev()
{
while read LINE SVN_NUM
do
if [ "$LINE" = "svn_rev_trunk_G***" ] && [ -n "$SVN_NUM" ]; then
OLD_SVN_REV_G***=$SVN_NUM
# echo "OLD_SVN_REV_G***=$OLD_SVN_REV_G***"
else
if [ "$LINE" = "svn_rev_trunk_N***" ] && [ -n "$SVN_NUM" ]; then
OLD_SVN_REV_N***=$SVN_NUM
# echo "OLD_SVN_REV_N***=$OLD_SVN_REV_N***"
else
TIME=`date +D%FT%T`
echo "[$TIME] Read unuseful data."
echo "[$TIME] Line read from $HOMEDIR$CONFFILE is that $LINE $SVN_NUM"
fi
fi
done < $HOMEDIR$CONFFILE
if [ -n "$OLD_SVN_REV_N***" ] && [ -n "$OLD_SVN_REV_G***" ]; then
TIME=`date +D%FT%T`
echo "[$TIME] Read svn revision from configure file succeed."
else
TIME=`date +D%FT%T`
echo "[$TIME] Read svn revision number from configure file failed."
echo "[$TIME] OLD_SVN_REV_G***=$OLD_SVN_REV_G***"
echo "[$TIME] OLD_SVN_REV_N***=$OLD_SVN_REV_N***"
fi
}
ReadSvnRev()
{
svn up $TRUNK_G***_WCOPY$SRCFOLDER
SVN_REV_G***=`svn info $TRUNK_G***_WCOPY$SRCFOLDER |awk '{if( $1=="Last" && $2=="Changed" && $3=="Rev:" ) print $4;}'`
TIME=`date +D%FT%T`
echo "[$TIME] SVN_REV_G***=$SVN_REV_G***"
svn up $TRUNK_N***_WCOPY$SRCFOLDER
SVN_REV_N***=`svn info $TRUNK_N***_WCOPY$SRCFOLDER |awk '{if( $1=="Last" && $2=="Changed" && $3=="Rev:" ) print $4;}'`
TIME=`date +D%FT%T`
echo "[$TIME] SVN_REV_N***=$SVN_REV_N***"
}
SyncTrunkG2N()
{
SVN_LOG_G***=`svn log -r $SVN_REV_G*** $TRUNK_G***_WCOPY$SRCFOLDER |grep -v "\-\-\-"`
echo $SVN_LOG_G***
cp -rf $TRUNK_G***_WCOPY$SRCFOLDER{,.bak}
find $TRUNK_G***_WCOPY$SRCFOLDER.bak -name .svn |xargs -i rm -rf {}
rsync -av $TRUNK_G***_WCOPY$SRCFOLDER.bak/* $TRUNK_N***_WCOPY$SRCFOLDER/
rm -rf $TRUNK_G***_WCOPY$SRCFOLDER.bak
svn ci -m "\"Merge from trunk on G*** Rev $SVN_REV_G*** which log is that '$SVN_LOG_G***' \"" $TRUNK_N***_WCOPY$SRCFOLDER > $HOMEDIR$SVN_CI_RETURN
# echo $?
# echo `-s $HOMEDIR$SVN_CI_RETURN`
if [ $? -eq 0 ] && [ -s $HOMEDIR$SVN_CI_RETURN ]; then
TIME=`date +D%FT%T`
svn up $TRUNK_N***_WCOPY$SRCFOLDER
NEW_SVN_REV_N***=`svn info $TRUNK_N***_WCOPY$SRCFOLDER |awk '{if( $1=="Last" && $2=="Changed" && $3=="Rev:" ) print $4;}'`
# echo $NEW_SVN_REV_N***
echo "[$TIME] Update trunk on N*** from G*** revision $SVN_REV_G*** successfully."
echo "[$TIME] G***[old->new]=[$OLD_SVN_REV_G***->$SVN_REV_G***],N***[old->new]=[$OLD_SVN_REV_N***->$NEW_SVN_REV_N***]."
echo -e "svn_rev_trunk_G*** $SVN_REV_G***\nsvn_rev_trunk_N*** $NEW_SVN_REV_N***" > $HOMEDIR$CONFFILE
else
cat $HOMEDIR$SVN_CI_RETURN
TIME=`date +D%FT%T`
echo "[$TIME] svn ci failed, please have a check"
fi
}
ReadSvnRev
if [ -s $HOMEDIR$CONFFILE ]; then
ReadSvnOldRev
if [ $SVN_REV_G*** -gt $OLD_SVN_REV_G*** ] && [ $SVN_REV_N*** -eq $OLD_SVN_REV_N*** ]; then
SyncTrunkG2N
else
TIME=`date +D%FT%T`
if [ $SVN_REV_G*** -eq $OLD_SVN_REV_G*** ]; then
echo "[$TIME] There is no update in trunk of G***."
fi
if [ $SVN_REV_N*** -lt $OLD_SVN_REV_N*** ]; then
echo "[$TIME] The svn resivion number read from configure file is not correct."
fi
if [ $SVN_REV_N*** -gt $OLD_SVN_REV_N*** ]; then
echo "[$TIME] The trunk of N*** has been updated since last synchronization."
echo "[$TIME] Need update from N*** to G***"
fi
echo "[$TIME] G***[old:new]=[$OLD_SVN_REV_G***:$SVN_REV_G***],N***[old:new]=[$OLD_SVN_REV_N***:$SVN_REV_N***]."
fi
else
echo "There is not configure file $CONFFILE at $HOMEDIR,Sync for first time,continue?[y/n]"
read SYNC1stTIME
if [ -z "$SYNC1stTIME" ]; then
SYNC1stTIME="n"
fi
if [ "$SYNC1stTIME" = "y" ] || [ "$SYNC1stTIME" = "Y" ]; then
SyncTrunkG2N
else
TIME=`date +D%FT%T`
echo "[$TIME] Don't update for there is no configure and User don't want to continue."
fi
fi
阅读(415) | 评论(0) | 转发(0) |