Задать вопрос

SVN: как напсиать php-скрипт для вызыва update'a через браузер

Как написать скрипт на PHP (который можно вызывать через браузер). Так чтобы он корректно вызывал команду SVN Update, для обновления проекта на сервере до текущей версии репозитария?

Пробные реализации вызывают проблемы с правами и в итоге неуспешны.
В сети много информации по подобной проблеме, но решения найти так и не удалось.
  • Вопрос задан
  • 3306 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Наше решение на сервере проектов быстрое и наколенное — в репозитарии настраивается post-commit hook, который создает пустой файл-флаг с именем проекта (имя проекта и папка, где лежит сам сайт одинаковы). По крону запускается скрипт, который считывает файлы-флаги из папки, детает cd /data/folder-with-sites/<project-name> и запускает svn update. Возможно данная система при большом количестве разработчиков потребует какой-либо блокировки, чтобы если предыдущий процесс апдейта затянется, то новый процесс не стартовал.

post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
echo $1 $2 $3 $4 $5 > `echo $1 | sed 's/repos/repos\/.need-to-update/'`

(каталог svn-репозитария /data/svn/repos/<project-name>)

cron-script.sh
#!/bin/sh
dir=/data/svn/repos/.need-to-update/

for rep in `find $dir -type f`
do
    web=`echo $rep | sed 's/svn\/repos\/.need-to-update/web/'`
    subj=`echo $web | sed 's/\/data\/web\///'`
    echo `date '+%Y-%m-%d %H:%M'` - $subj  >>/root/scripts/post-commit-cron.log
    cd $web
    /usr/local/bin/svn --username <svn-user> --password <svn-user-passwd> --no-auth-cache update >>/root/scrip
    /usr/local/bin/svn info >>rev.log
    echo >>rev.log
    /bin/chmod -R a+rwX ./
    /usr/sbin/chown -R www:www ./
    rm $rep
#    echo ' ' | mail -s "U $subj" root
    echo >>/root/scripts/post-commit-cron.log
done

(каталог с сайтом /data/web/<project-name>)
Ответ написан
@Longer
Ещё вариант, написать простого демона, использующего локальные сокеты и запущенного под правами того, от кого нужно сделать svn update.
Я как-то так сделал для решения похожей задачи. Но там надо было на 2х серваках одновременно делать svn up. На втором поднял своего демона слушающего какой-то там порт и если на него приконнектится, то делается svn up и сразу разрыв. Тут как вариант можно применить аналогичное решение, но т.к. нужно внутри одного сервака это делать, заюзать локальные сокеты.
Ответ написан
Комментировать
anycolor
@anycolor
Можно при каждом коммите делать через пост-коммит svn up. Или такой вариант не подходит/не нравится?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы