VisualSVN commit-hook добавить ревизию в файл в репо - PullRequest
1 голос
/ 28 марта 2012

У нас есть проект PHP под управлением SVN (VisualSVN).

Почему-то мне нужно обновить файл в репо с текущим номером ревизии. Так что, когда основной сайт будет обновлен / оформлен, мы сможем показать номер сборки svn (эта часть не проблема).

возможно ли это сделать с помощью pre / post-commit-hook?

Ответы [ 4 ]

2 голосов
/ 29 мая 2012

Похоже, вам нужно решение для сборки, а не ловушка для предварительной фиксации.Используя систему сборки, такую ​​как Apache Ant, вы можете получить последний номер ревизии из репозитория при подготовке решения для рабочей среды.

Редактировать: фактически ответить на ваш вопрос "возможно ли досовершить зацепку? "да, это технически возможно, но, как уже предлагалось, этого следует избегать.

2 голосов
/ 28 марта 2012

pre и post-commit-hooks ведут себя по-разному (см. Документацию в SVN red book о хуках и особенно в части о реализации хуков ):

  • pre-commit: Проверьте, разрешен ли коммит. Таким образом, хук pre-commit вообще не может ничего изменить в коммите.
  • post-commit: Уведомляет об успешном коммите.

Так что нет упоминания о возможности что-либо изменить. Вместо этого в разделе «реализация хуков» есть параграф:

В то время как скрипты ловушек могут делать почти все, есть одно измерение в авторы сценариев хуков должны проявлять сдержанность: не изменять совершать транзакции с использованием скриптов хуков Хотя это может быть заманчиво использовать скрипты ловушек для автоматического исправления ошибок, недостатков или Нарушения политики, присутствующие в файлах, которые принимаются вызвать проблемы. Subversion хранит кэши на стороне клиента определенных битов данные хранилища, и если вы измените транзакцию фиксации таким образом, эти кэши становятся неоправданно устаревшими. Это несоответствие может привести к удивительное и неожиданное поведение. Вместо изменения транзакции, вы должны просто подтвердить транзакцию в предварительно зафиксировать хук и отклонить коммит, если он не соответствует желаемому требования. В качестве бонуса ваши пользователи узнают ценность осторожных, ориентированные на соблюдение привычки работы.

Поэтому я бы сказал, что это невозможно или, по крайней мере, рекомендуется делать.

0 голосов
/ 28 марта 2012

Как насчет того, чтобы разработчики сами обновляли файл, а затем использовали сценарий предварительной фиксации, чтобы отказаться от коммитов, если обновление некорректно?Возможно, вставка номера редакции является обязанностью, которая лучше включена в редактор или сценарий процесса сборки / развертывания.

0 голосов
/ 28 марта 2012

Пока Млибелт цитировал правильный текст, он сделал неверный вывод.Даже дважды:

  • Это должно быть сделано в ловушке после фиксации
  • Невозможно сделать в ловушке

Второе утверждение

Если перехват фиксации перезапишет файл , не включенный в этот коммит , это будет совершенно корректная операция, которая ничего не сломала.

Первое утверждение

Это решение явно плохое по многим причинам:

  • , которые вы включаете в репозиторий (чтобы ссылаться позжена нем) данные, которые зависят от общих изменений данных репозитория, но: при каждом изменении данных в этом файле также изменяется состояние данных репозитория .Классический порочный круг
  • вы увеличиваете сумму требуется ревизий дважды : после каждой "ревизии данных" вы должны выполнять "слежение-ревизию"
  • вы хотите, чтобы VCS был связан с проблемами других, более применимыми к инструментам сборки-развертывания, для VCS с этими данными достаточно

Репозиторий (или рабочая копия) как таковая содержит информацию о последней ревизии в ней (svn info, svnversion, svn log -r HEAD), хранение ее внутри данных нарушает Raroz из Occam.Вы извлекаете данные только тогда, когда вы «публикуете» данные для использования за пределами репозитория.

Какие инструменты и способы их использования сильно зависят от: развертывания рабочего процесса, ОС (у вас нет gawk-grep-sed наобычный Win-box), только некоторые подсказки:

  • SubWCRev (только для Win) из TortoiseSVN может проверять рабочие копии и обрабатывать файлы-шаблоны, заменяя специальные ключевые слова SubWCRev действительными значениями.У SubWCRev есть родственные проекты для Linux-мира.Использование этих инструментов предполагает хранение файла шаблона где-то (внутри или вне репо) и сохранение обработанного результата внутри подготовленного к использованию дерева проектов.
  • svnversion и svnlook можно использовать в любой ОС (для WC).-path и путь к репозиторию соответственно)

И наконец

  • Вы можете использовать ключевые слова Subversion для хранения номера ревизии внутри репо , только не забывайте, что $ Revision $, используемый внутри файла, отражает ревизию последних изменений в этом файле и имеет предопределенный формат после расширения
...