2011-11-22 2 views
1

Я использовал некоторые сценарий я нашел где-то: (Im общее Svn нуб, он используется для копирования файлов после их совершения в репо?)простой СВН обновление после совершения крючок реж с измененными файлами

#!/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/bin/svnlook 
SVN=/usr/bin/svn 
DEV=/usr/local/node/ 

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 

Дорожки:

Path i want to copy all the modified files after committing: 
/usr/local/node/ 

Repo location: 
/var/lib/svn/api/ 

Hook location: 
/var/lib/svn/api/hooks/post-commit 

Когда я запустить его из терминала я получаю:

Repository аргумент требуется Тип 'svnlook помощь' для использования.

Когда я сделать коммит/USR/местные/узел/не изменяется

ответ

1

Я предполагаю, что вы забыли передать этот сценарий какие-либо аргументы при запуске вручную. Первый аргумент ($1) назначен $REPOS, который используется в команде svnlook, выполненной в цикле for.

Обязательно запустите сценарий правильно - путь к репозиторию как первый аргумент, а ревизия только что передана как второй аргумент.

Обязательно, чтобы провести некоторое время с SVN book перед выполнением этого - он должен быть запущен как корень (см команды chown(1)), и это, возможно, удалить данные, которые вы заботитесь о (см команды unlink(1) и rm(1)).

+0

Есть ли какой-либо скрипт вокруг простого копирования репо после фиксации в/usr/local/node /? Мне все равно, перемещены ли и не измененные файлы, потому что я работаю только с несколькими файлами (пока). Спасибо за комментарий и предупреждение! – Writecoder

+0

Я предпочитаю ручное управление экспортом изменений в другое место, поэтому я бы рекомендовал запустить ['svn export'] (http://svnbook.red-bean.com/en/1.0/re10.html) вручную (возможно, из рецепта 'Makefile'), когда вы хотите развернуть что-то новое. Этот скрипт, который вы нашли уверенным, выглядит так, как будто он должен делать что-то подобное, но я был бы осторожен, чтобы проверить его поведение несколько раз, чтобы убедиться, что он работает так, как вы ожидаете. – sarnold

+0

Что-то не так, вместо «chmod + x post-commit» в начале я сделал что-то из своей памяти, например «chmod -x». В любом случае все работает с использованием экспорта svn, я хочу лизать ваше лицо. – Writecoder

Смежные вопросы