Снова нас интересуют хуки. На этот раз нам нужен post-commit (то есть тот, который выполняется после окончания коммита).
Создаем для него bash скрипт
Bash
#!/bin/sh
# отсюда берем рабочий код
trunk=svn://localhost/repos/flex/trunk
# отсюда берем стабильную версию
stable=svn://localhost/repos/flex/tags/stable
# куда кладем итоговый архив
place=/var/www/storage/File
# удаляем временный каталог для экспорта, если таковой почему-то существует
rm -rf /tmp/svn
# создаем временный каталог для экспорта
mkdir --mode=0700 /tmp/svn
# экспортируем код из trunk ветки в подкаталог tmp/upload
svn export --force $trunk /tmp/svn/tmp/upload
# переходим в подкаталог tmp
cd /tmp/svn/tmp
# получаем из файлов номер версии
version=`grep -o '[0-9]\+\.[0-9]\+' ./upload/kernel/install/version.php`
# и номер ревизии
revision=`grep -o '[0-9]\+.1' ./upload/kernel/install/revision.php`
# так как номер ревизии представляет собой выражение,
# то делаем так, чтобы оно выполнилось
revision=$(($revision))
# а вот и наш номер версии
t_ver=$version'.'$revision
# создаем текстовый файл с номером версии в названии
touch 'version_'$t_ver'.txt'
# упаковываем все подготовленные файлы в архив
zip -r /tmp/svn/labcms_trunk_full.zip *
# проделываем аналогичные манипуляции для стабильной версии
...
# переносим полученные архивы на сайт
mv -f /tmp/svn/*.zip $place
# удаляем временный каталог
rm -rf /tmp/svn
exit 0
Готово, теперь у нас на сайте выложены актуальные версии кода, оформленные соответсвующим образом. Осталось дело за малым - надо обновить информацию о версии на странице загрузки. Страница загрузки хранится в БД и в кэше. Лезть в БД из консоли а потом оттуда же очищать кэш мне показалось не лучшей идеей. Поэтому был написан простенький модуль, который принимал в качестве параметров номера версий, вносил исправления в БД и сбрасывал кэш. Чтобы всякие шутники не баловались обновлением версий, обновление срабатывает только по паролю. Добавляем в конец скрипта вызов специальной страницы и передаем ей номера версий
Bash
...
wget -O /dev/null -q 'http://labcms.ru/secret/path/?trunk='$t_ver'&relese='$r_ver'&secret=password'
exit 0
Что из этого получилось, можно увидеть здесь.
Аналогичным образом можно было бы добавить размер файла или еще какую-нибудь бесполезную но, безусловно, занимательную информацию
