⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repository_sync.sh

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 SH
字号:
#! /bin/sh

repository=mpeg4ip

export CVS_RSH=cvsssh
CVS_N=

release=0
startfrombase=0
skipversion=0
while getopts "rbs" opt; do
    case $opt in
       r ) release=1 ;;
       b ) startfrombase=1 ;;
       s ) skipversion=1 ;;
    esac
done

#
# original repository information.
# origin_dir is local directory where to store
# origin_name is username to use when checking out
# origin_host is name of host where repository is stored
# origin_cvsroot is location of cvs root on host where repository is stored
#
origin_dir=origin
origin_name=wmay
origin_host=buhund
origin_cvsroot=/vws/pan

#
# destination repository information.  See origin information for details
#
dest_dir=sourceforge
dest_name=wmaycisco
dest_host=cvs.mpeg4ip.sourceforge.net
dest_cvsroot=/cvsroot/mpeg4ip

#
# temp_dir is directory where we store files we create, logs
#
temp_dir=temp
start_dir=`pwd`

# Create temp directory
if test -d $temp_dir; then
  mkdir -p $temp_dir
  temp_dir=$start_dir/$temp_dir
fi

origin_CVSROOT="$origin_name@$origin_host:$origin_cvsroot"
dest_CVSROOT="$dest_name@$dest_host:$dest_cvsroot"

#
# create repository directory - make sure it's not appended to the end of
# the directory name already
#
temp=`basename $origin_dir`
if test $repository = $temp; then
   origin_rep=$origin_dir
   origin_dir=`dirname $origin_dir`
else
   origin_rep="$origin_dir/$repository"
fi

#
# same with destination
#
temp=`basename $dest_dir`
if test $repository = $temp; then
   dest_rep=$dest_dir
   dest_dir=`dirname $dest_dir`
else
   dest_rep="$dest_dir/$repository"
fi

# File descriptor usage
# 6 messages and results
# 5 log

exec 5>$temp_dir/repository_updater.log
exec 6>&1

echo "Repository Updater log `date`" >&5
echo Checking for origin repository existance  >&5
echo Checking for origin repository existance  >&6

#
# create or update the origin repository. At this time, update
# origin_dir and origin_rep to have absolute path names
#
if test ! -d $origin_rep; then
    echo $origin_rep does not exist >&5
    echo $origin_rep does not exist >&6
    echo Creating $origin_dir >&5
    mkdir -p $origin_dir >&5
    if test ! -d $origin_dir; then
	exit -1
    fi
    echo Checking out origin cvs repository $origin_CVSROOT >&6
    cd $origin_dir
    origin_dir=`pwd`
    cvs -d $origin_CVSROOT checkout -P -kk $repository 1>&5 2>&5
    cd $repository
    origin_rep=`pwd`
else
    cd $origin_dir
    origin_dir=`pwd`
    cd $repository
    origin_rep=`pwd`
    echo Updating origin cvs repository $origin_rep >&6
    cvs update -P -kk -d 1>&5 2>&5
fi

#
# Do version number update
#
if [ $skipversion = 0 ]; then
   if [ $release = 1 ]; then
      newver=`cat RELEASE_VERSION | tr '.' ' '`
      sh util/version.sh $newver > RELEASE_VERSION
      cp RELEASE_VERSION VERSION
   else
      if [ $startfrombase = 1 ]; then
         newver=`cat RELEASE_VERSION`
         newver=$newver.1
         echo $newver > VERSION
      else
         newver=`cat VERSION | tr '.' ' '`
         sh util/version.sh $newver > VERSION
      fi
   fi
   #
   # Update version file for windows
   #
   echo New version number is `cat VERSION` >&5
   echo New version number is `cat VERSION` >&6
   echo \#define PACKAGE \"mpeg4ip\" > include/win32_ver.h
   echo \#define VERSION \"`cat VERSION`\" >> include/win32_ver.h
   #
   # Update configure.in version
   #
   awk -v VERSION=`cat VERSION` -f util/replaceversion configure.in > temp
   mv temp configure.in

   cvs $CVS_N commit -m 'Version bump for sync' VERSION RELEASE_VERSION include/win32_ver.h configure.in 1>&5 2>&5
fi

#
# Tag this directory
#
tagvalue=`cat VERSION | tr -s '.' '_'`
tagvalue1=`date +_%y%m%d_%H%M`
tagvalue=VERSION_$tagvalue$tagvalue1

echo Tagging source tree with $tagvalue >&5
echo Tagging source tree with $tagvalue >&6

cvs $CVS_N tag $tagvalue 1>&5 2>&5
cd $start_dir
#
# checkout or update destination repository.  Update dest_dir, dest_rep
# to use absolute path names, as well
#
if test ! -d $dest_rep; then
    echo $dest_rep does not exist >&5
    echo $dest_rep does not exist >&6
    echo Creating $dest_dir >&5
    mkdir -p $dest_dir >&5
    if test ! -d $dest_dir; then
	exit -1
    fi
    echo Checking out destination cvs repository $dest_CVSROOT >&6
    cd $dest_dir
    dest_dir=`pwd`
    cvs -d $dest_CVSROOT checkout -P -kk $repository 1>&5 2>&5
    cd $repository
    dest_rep=`pwd`
else
    cd $dest_dir
    dest_dir=`pwd`
    cd $repository
    dest_rep=`pwd`
    echo Updating dest cvs repository $dest_rep >&6
    cvs update -P -kk -d 1>&5 2>&5
fi

echo "Creating directory lists" >&5
echo "Creating directory lists" >&6
cd $dest_dir
find . -type d -print | grep -v "CVS$" > $temp_dir/dest_dirs

cd $origin_dir
find . -type d -print | grep -v "CVS$" > $temp_dir/orig_dirs


echo Beginning origin to destination update >&5
echo Beginning origin to destination update >&6

#
# Main loop.  Go through list of directories in origin, 
#

DIR_CNT=0
FILE_CNT=0
NEW_DIR_CNT=0
NEW_FILE_CNT=0
for orig_dir_on in `cat $temp_dir/orig_dirs`
do
  if test $orig_dir_on = "."; then
     continue;
  fi
  dest_dir_on=$dest_dir/$orig_dir_on
  #
  # check if origin directory exists on destination
  #
  if test ! -d $dest_dir_on; then
    echo $orig_dir_on exists in origin but not destination - creating >&5
    base=`basename $dest_dir_on`
    dir=`dirname $dest_dir_on`
    cd $dir
    mkdir $base
    cvs $CVS_N add $base 1>&5 2>&5
    NEW_DIR_CNT=$(($NEW_DIR_CNT + 1))
  fi

  #
  # Now check all the files in origin directory against files on destination
  #
  cd $origin_dir/$orig_dir_on
  #echo finding files in $orig_dir_on
  find . -maxdepth 1 -type f -print > $temp_dir/orig_files
  FILE_IN_DIR=0
  for file in `cat $temp_dir/orig_files`
  do
    cd $origin_dir/$orig_dir_on
    if test ! -e $dest_dir_on/$file; then
       echo $dest_dir_on/$file does not exist - copying >&5
       cp $file $dest_dir_on
       cd $dest_dir_on
       cvs $CVS_N add $file 1>&5 2>&5
       NEW_FILE_CNT=$(($NEW_FILE_CNT + 1))
       FILE_IN_DIR=$(($FILE_IN_DIR + 1))
    else
       diff=`diff --brief $file $dest_dir_on/$file`
       if test ! -z "$diff"; then
          echo $dest_dir_on/$file has changed - copying >&5
	  diff -c -w $file $dest_dir_on/$file >>$temp_dir/diffs
	  cp $file $dest_dir_on/$file
	  FILE_IN_DIR=$(($FILE_IN_DIR + 1))
       fi
    fi
  done
  FILE_CNT=$(($FILE_CNT + $FILE_IN_DIR))
  if test $FILE_IN_DIR -ne 0; then
    DIR_CNT=$(($DIR_CNT + 1))
  fi
done
rm -f $temp_dir/orig_files

echo Files changed: $FILE_CNT >&6
echo Directories changed: $DIR_CNT >&6
echo New Files added: $NEW_FILE_CNT >&6
echo New Directories added: $NEW_DIR_CNT >&6

echo Checking for removed files from origin >&5
echo Checking for removed files from origin >&6

#
# Now, check for any files in the destination repository that are
# no longer present in the repository.
#
for dest_dir_on in `cat $temp_dir/dest_dirs`
do
   if test $dest_dir_on = "."; then 
      continue;
   fi
   cd $dest_dir/$dest_dir_on

   if test ! -d $origin_dir/$dest_dir_on; then
      echo $origin_dir/$dest_dir_on no longer exists >&5
      echo $origin_dir/$dest_dir_on no longer exists >&6
      rm * 1>&5 2>&5
      cd ..
      base=`basename $dest_dir_on`
      cat > $temp_dir/commit.note <<EOF
Removing directory $base from repository `date`
EOF
      cvs $CVS_N remove $base 1>&5 2>&5
      cvs $CVS_N commit -F $temp_dir/commit.note $base 1>&5 2>&5
   else
      find . -maxdepth 1 -type f -print > $temp_dir/dest_files
      for file in `cat $temp_dir/dest_files`
      do
         if test ! -e $origin_dir/$dest_dir_on/$file; then
            echo $origin_dir/$dest_dir_on/$file no longer exists
	    rm -f $file
	    cvs $CVS_N remove $file 1>&5 2>&5
	 fi
      done
   fi
done
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -