Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99999
  • 博文数量: 64
  • 博客积分: 2570
  • 博客等级: 少校
  • 技术积分: 605
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 11:00
文章分类

全部博文(64)

文章存档

2011年(1)

2010年(25)

2009年(38)

我的朋友

分类: LINUX

2009-11-27 14:36:59

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) |
给主人留下些什么吧!~~