2013-03-12 2 views
0

Я использую этот пост-фиксационный скрипт (это не моя работа, у меня оно есть отсюда).Сценарий пост-фиксации не экспортирует файлы, начинающиеся с «@»

#!/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=/var/www/my_web 

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 www-data:www-data $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 www-data:www-data $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 

Скрипт работает отлично - добавление/удаление файлов, папок, настройки разрешения, но если я совершаю файл с именем, например, «@ layout.latte» Я могу видеть этот файл в SVN дерева на моем сервере (так совершают работы отлично), но сценарий post-commit не копирует этот файл в папку my/var/www/my_web.

Кто-нибудь знает, почему? Большое спасибо! Я везде искал, но мне не повезло.

EDIT: Он также не работает для файлов типа "[email protected]". Это из-за «@», но я не знаю, как это исправить. Я думаю, что что-то вроде ускользания может помочь, но я действительно не «парень-баш» :)

ответ

1

В URL-адресах Subversion имеет особое значение - но только для окончательного @. Вам необходимо URL-кодировать @ как% 40 в URL-адресе или добавить конечный @ к URL-адресу.

+0

Можете ли вы дать мне пример кода? Я использую TortoiseSVN для передачи файлов с моего ПК в мой SVN-репозиторий на моем сервере с Debian, а затем скрипт пост-фиксации SVN. Я не знаю, где в этой процедуре есть какой-то URL. Благодаря! –

+0

Нет, вам нужно сделать это в скрипте hook, который вы разместили выше. 'file: // $ REPOS/$ directory' - ваш URL. – alroc

+0

Ну, я просто после 'file: // $ REPOS/$ directory;' добавьте '@' like 'file: // $ REPOS/$ directory @;' и он работает 'Большое спасибо! :) –

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