repository_sync.sh
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:8k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #! /bin/sh
  2. repository=mpeg4ip
  3. export CVS_RSH=cvsssh
  4. CVS_N=
  5. release=0
  6. startfrombase=0
  7. skipversion=0
  8. while getopts "rbs" opt; do
  9.     case $opt in
  10.        r ) release=1 ;;
  11.        b ) startfrombase=1 ;;
  12.        s ) skipversion=1 ;;
  13.     esac
  14. done
  15. #
  16. # original repository information.
  17. # origin_dir is local directory where to store
  18. # origin_name is username to use when checking out
  19. # origin_host is name of host where repository is stored
  20. # origin_cvsroot is location of cvs root on host where repository is stored
  21. #
  22. origin_dir=origin
  23. origin_name=wmay
  24. origin_host=buhund
  25. origin_cvsroot=/vws/pan
  26. #
  27. # destination repository information.  See origin information for details
  28. #
  29. dest_dir=sourceforge
  30. dest_name=wmaycisco
  31. dest_host=cvs.mpeg4ip.sourceforge.net
  32. dest_cvsroot=/cvsroot/mpeg4ip
  33. #
  34. # temp_dir is directory where we store files we create, logs
  35. #
  36. temp_dir=temp
  37. start_dir=`pwd`
  38. # Create temp directory
  39. if test -d $temp_dir; then
  40.   mkdir -p $temp_dir
  41.   temp_dir=$start_dir/$temp_dir
  42. fi
  43. origin_CVSROOT="$origin_name@$origin_host:$origin_cvsroot"
  44. dest_CVSROOT="$dest_name@$dest_host:$dest_cvsroot"
  45. #
  46. # create repository directory - make sure it's not appended to the end of
  47. # the directory name already
  48. #
  49. temp=`basename $origin_dir`
  50. if test $repository = $temp; then
  51.    origin_rep=$origin_dir
  52.    origin_dir=`dirname $origin_dir`
  53. else
  54.    origin_rep="$origin_dir/$repository"
  55. fi
  56. #
  57. # same with destination
  58. #
  59. temp=`basename $dest_dir`
  60. if test $repository = $temp; then
  61.    dest_rep=$dest_dir
  62.    dest_dir=`dirname $dest_dir`
  63. else
  64.    dest_rep="$dest_dir/$repository"
  65. fi
  66. # File descriptor usage
  67. # 6 messages and results
  68. # 5 log
  69. exec 5>$temp_dir/repository_updater.log
  70. exec 6>&1
  71. echo "Repository Updater log `date`" >&5
  72. echo Checking for origin repository existance  >&5
  73. echo Checking for origin repository existance  >&6
  74. #
  75. # create or update the origin repository. At this time, update
  76. # origin_dir and origin_rep to have absolute path names
  77. #
  78. if test ! -d $origin_rep; then
  79.     echo $origin_rep does not exist >&5
  80.     echo $origin_rep does not exist >&6
  81.     echo Creating $origin_dir >&5
  82.     mkdir -p $origin_dir >&5
  83.     if test ! -d $origin_dir; then
  84. exit -1
  85.     fi
  86.     echo Checking out origin cvs repository $origin_CVSROOT >&6
  87.     cd $origin_dir
  88.     origin_dir=`pwd`
  89.     cvs -d $origin_CVSROOT checkout -P -kk $repository 1>&5 2>&5
  90.     cd $repository
  91.     origin_rep=`pwd`
  92. else
  93.     cd $origin_dir
  94.     origin_dir=`pwd`
  95.     cd $repository
  96.     origin_rep=`pwd`
  97.     echo Updating origin cvs repository $origin_rep >&6
  98.     cvs update -P -kk -d 1>&5 2>&5
  99. fi
  100. #
  101. # Do version number update
  102. #
  103. if [ $skipversion = 0 ]; then
  104.    if [ $release = 1 ]; then
  105.       newver=`cat RELEASE_VERSION | tr '.' ' '`
  106.       sh util/version.sh $newver > RELEASE_VERSION
  107.       cp RELEASE_VERSION VERSION
  108.    else
  109.       if [ $startfrombase = 1 ]; then
  110.          newver=`cat RELEASE_VERSION`
  111.          newver=$newver.1
  112.          echo $newver > VERSION
  113.       else
  114.          newver=`cat VERSION | tr '.' ' '`
  115.          sh util/version.sh $newver > VERSION
  116.       fi
  117.    fi
  118.    #
  119.    # Update version file for windows
  120.    #
  121.    echo New version number is `cat VERSION` >&5
  122.    echo New version number is `cat VERSION` >&6
  123.    echo #define PACKAGE "mpeg4ip" > include/win32_ver.h
  124.    echo #define VERSION "`cat VERSION`" >> include/win32_ver.h
  125.    #
  126.    # Update configure.in version
  127.    #
  128.    awk -v VERSION=`cat VERSION` -f util/replaceversion configure.in > temp
  129.    mv temp configure.in
  130.    cvs $CVS_N commit -m 'Version bump for sync' VERSION RELEASE_VERSION include/win32_ver.h configure.in 1>&5 2>&5
  131. fi
  132. #
  133. # Tag this directory
  134. #
  135. tagvalue=`cat VERSION | tr -s '.' '_'`
  136. tagvalue1=`date +_%y%m%d_%H%M`
  137. tagvalue=VERSION_$tagvalue$tagvalue1
  138. echo Tagging source tree with $tagvalue >&5
  139. echo Tagging source tree with $tagvalue >&6
  140. cvs $CVS_N tag $tagvalue 1>&5 2>&5
  141. cd $start_dir
  142. #
  143. # checkout or update destination repository.  Update dest_dir, dest_rep
  144. # to use absolute path names, as well
  145. #
  146. if test ! -d $dest_rep; then
  147.     echo $dest_rep does not exist >&5
  148.     echo $dest_rep does not exist >&6
  149.     echo Creating $dest_dir >&5
  150.     mkdir -p $dest_dir >&5
  151.     if test ! -d $dest_dir; then
  152. exit -1
  153.     fi
  154.     echo Checking out destination cvs repository $dest_CVSROOT >&6
  155.     cd $dest_dir
  156.     dest_dir=`pwd`
  157.     cvs -d $dest_CVSROOT checkout -P -kk $repository 1>&5 2>&5
  158.     cd $repository
  159.     dest_rep=`pwd`
  160. else
  161.     cd $dest_dir
  162.     dest_dir=`pwd`
  163.     cd $repository
  164.     dest_rep=`pwd`
  165.     echo Updating dest cvs repository $dest_rep >&6
  166.     cvs update -P -kk -d 1>&5 2>&5
  167. fi
  168. echo "Creating directory lists" >&5
  169. echo "Creating directory lists" >&6
  170. cd $dest_dir
  171. find . -type d -print | grep -v "CVS$" > $temp_dir/dest_dirs
  172. cd $origin_dir
  173. find . -type d -print | grep -v "CVS$" > $temp_dir/orig_dirs
  174. echo Beginning origin to destination update >&5
  175. echo Beginning origin to destination update >&6
  176. #
  177. # Main loop.  Go through list of directories in origin, 
  178. #
  179. DIR_CNT=0
  180. FILE_CNT=0
  181. NEW_DIR_CNT=0
  182. NEW_FILE_CNT=0
  183. for orig_dir_on in `cat $temp_dir/orig_dirs`
  184. do
  185.   if test $orig_dir_on = "."; then
  186.      continue;
  187.   fi
  188.   dest_dir_on=$dest_dir/$orig_dir_on
  189.   #
  190.   # check if origin directory exists on destination
  191.   #
  192.   if test ! -d $dest_dir_on; then
  193.     echo $orig_dir_on exists in origin but not destination - creating >&5
  194.     base=`basename $dest_dir_on`
  195.     dir=`dirname $dest_dir_on`
  196.     cd $dir
  197.     mkdir $base
  198.     cvs $CVS_N add $base 1>&5 2>&5
  199.     NEW_DIR_CNT=$(($NEW_DIR_CNT + 1))
  200.   fi
  201.   #
  202.   # Now check all the files in origin directory against files on destination
  203.   #
  204.   cd $origin_dir/$orig_dir_on
  205.   #echo finding files in $orig_dir_on
  206.   find . -maxdepth 1 -type f -print > $temp_dir/orig_files
  207.   FILE_IN_DIR=0
  208.   for file in `cat $temp_dir/orig_files`
  209.   do
  210.     cd $origin_dir/$orig_dir_on
  211.     if test ! -e $dest_dir_on/$file; then
  212.        echo $dest_dir_on/$file does not exist - copying >&5
  213.        cp $file $dest_dir_on
  214.        cd $dest_dir_on
  215.        cvs $CVS_N add $file 1>&5 2>&5
  216.        NEW_FILE_CNT=$(($NEW_FILE_CNT + 1))
  217.        FILE_IN_DIR=$(($FILE_IN_DIR + 1))
  218.     else
  219.        diff=`diff --brief $file $dest_dir_on/$file`
  220.        if test ! -z "$diff"; then
  221.           echo $dest_dir_on/$file has changed - copying >&5
  222.   diff -c -w $file $dest_dir_on/$file >>$temp_dir/diffs
  223.   cp $file $dest_dir_on/$file
  224.   FILE_IN_DIR=$(($FILE_IN_DIR + 1))
  225.        fi
  226.     fi
  227.   done
  228.   FILE_CNT=$(($FILE_CNT + $FILE_IN_DIR))
  229.   if test $FILE_IN_DIR -ne 0; then
  230.     DIR_CNT=$(($DIR_CNT + 1))
  231.   fi
  232. done
  233. rm -f $temp_dir/orig_files
  234. echo Files changed: $FILE_CNT >&6
  235. echo Directories changed: $DIR_CNT >&6
  236. echo New Files added: $NEW_FILE_CNT >&6
  237. echo New Directories added: $NEW_DIR_CNT >&6
  238. echo Checking for removed files from origin >&5
  239. echo Checking for removed files from origin >&6
  240. #
  241. # Now, check for any files in the destination repository that are
  242. # no longer present in the repository.
  243. #
  244. for dest_dir_on in `cat $temp_dir/dest_dirs`
  245. do
  246.    if test $dest_dir_on = "."; then 
  247.       continue;
  248.    fi
  249.    cd $dest_dir/$dest_dir_on
  250.    if test ! -d $origin_dir/$dest_dir_on; then
  251.       echo $origin_dir/$dest_dir_on no longer exists >&5
  252.       echo $origin_dir/$dest_dir_on no longer exists >&6
  253.       rm * 1>&5 2>&5
  254.       cd ..
  255.       base=`basename $dest_dir_on`
  256.       cat > $temp_dir/commit.note <<EOF
  257. Removing directory $base from repository `date`
  258. EOF
  259.       cvs $CVS_N remove $base 1>&5 2>&5
  260.       cvs $CVS_N commit -F $temp_dir/commit.note $base 1>&5 2>&5
  261.    else
  262.       find . -maxdepth 1 -type f -print > $temp_dir/dest_files
  263.       for file in `cat $temp_dir/dest_files`
  264.       do
  265.          if test ! -e $origin_dir/$dest_dir_on/$file; then
  266.             echo $origin_dir/$dest_dir_on/$file no longer exists
  267.     rm -f $file
  268.     cvs $CVS_N remove $file 1>&5 2>&5
  269.  fi
  270.       done
  271.    fi
  272. done
  273.