Using SVN post-commit hook to update only files that have been committed

前端 未结 4 1183
有刺的猬
有刺的猬 2020-12-08 02:49

I am using an SVN repository for my web development work. I have a development site set up which holds a checkout of the repository.

I have set up an SVN post-commi

4条回答
  •  难免孤独
    2020-12-08 03:46

    #!/bin/bash
    
    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 /var/tmp/svn
      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
    

提交回复
热议问题