Автоматически добавлять свойства ключевых слов svn для новых файлов (на стороне сервера)

Я хочу добавить свойства SVN (например, svn:keyword=Id Date Rev Author) к файлам при фиксации новых файлов.

Для этого может быть два основных варианта:

  1. На стороне клиента: изменение autoprops в конфигурации клиента SVN
  2. Серверная сторона: сделайте немного магии с коммит-хуками

Клиентская сторона не всегда желательна, так как необходим контроль над настройкой клиента. Я хочу решить это на сервере. Как это может быть сделано.

3 ответа

Решение

Документы Subversion говорят, что плохая идея модифицировать коммит на стороне сервера.

Вместо этого вы можете периодически делать что-то вроде настраиваемой версии скрипта svn_apply_autoprops через cron (или даже на сервере, запускаемом фиксацией). Сценарий svn_apply_autoprops немного более общий, чем вам нужно, но он должен быть простым для настройки соответствующего файла конфигурации.

На данный момент веб-сайт subversion мигрирует под apache.org, и я не смог найти документы для инструментов contrib.

Начиная с версии 1.8 можно использовать конфигурацию, заданную в репозитории объектов, для автоматической установки свойств на стороне сервера.

Из автоматической настройки свойства:

[...] набор определений свойств, которые все подключающиеся клиенты автоматически учитывают при работе с рабочими копиями, извлеченными с данного сервера. Subversion 1.8 и более новые клиенты поддерживают такую ​​функциональность через svn:auto-props наследуемое имущество.

Обратите внимание, что вам нужен только достаточно новый клиент. Ниже вы найдете полный пример, где я использовал клиент командной строки svn 1.8.8. с svn сервером 1.6.11.

svn клиент версии 1.8+ требуется

jani@dev:/tmp/testrepo/text-files$ svn --version --quiet
1.8.8

Файлы, созданные до установки свойства auto-props

jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
jani@dev:/tmp/testrepo/text-files$    

Установить авто реквизит

jani@dev:/tmp/testrepo/text-files$ svn propset svn:auto-props "*.txt = svn:eol-style=LF" .
property 'svn:auto-props' set on '.'
jani@dev:/tmp/testrepo/text-files$ svn proplist -v --recursive
Properties on '.':
  svn:auto-props
    *.txt = svn:eol-style=LF
jani@dev:/tmp/testrepo/text-files$    

Создайте новый файл f4.txt с разделителями строк CRLF

jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
f4.txt: UTF-8 Unicode text, with CRLF line terminators
jani@dev:/tmp/testrepo/text-files$    

Терминаторы строки в f4.txt изменяются после коммита

jani@dev:/tmp/testrepo/text-files$ svn add f4.txt
A         f4.txt
jani@dev:/tmp/testrepo/text-files$ svn commit -m 'just another test' .
Adding         f4.txt
Transmitting file data .
Committed revision 5.
jani@dev:/tmp/testrepo/text-files$ file f?.txt
f1.txt: UTF-8 Unicode text
f2.txt: UTF-8 Unicode text, with CRLF line terminators
f3.txt: ASCII text, with CRLF line terminators
f4.txt: UTF-8 Unicode text
jani@dev:/tmp/testrepo/text-files$ svn proplist -v --recursive
Properties on '.':
  svn:auto-props
    *.txt = svn:eol-style=LF

Properties on 'text-files/f4.txt':
  svn:eol-style
    LF
jani@dev:/tmp/testrepo/text-files$

Каждый раз, когда у вас появляется несколько человек, у вас, вероятно, возникают противоречивые конфиги subversion.

Решите эту проблему дважды, как вы говорите, на уровне клиента и на уровне сервера:

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

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

    Внимание, товарищи по команде:

    На ВСЕХ коробках, над которыми вы работаете, пожалуйста, измените файл:  ~/.subversion/config 

    * в разделе [разное] раскомментируйте строку: 
    enable-auto-props = да

    в разделе [auto-props] добавьте или раскомментируйте строки, чтобы они выглядели так:

    *.py = svn:eol-style="LF";svn: исполняемый файл ="ON"; ключевые слова ="Id";

    Примечание. Вы можете проверить, работает ли это, выполнив в каталоге с песочницей следующее:

    коснитесь delete.me.py
    svn добавить delete.me.py
    ls -al delete.me.py   # вы увидите:
    -rwxrwxr-x 1 крис4 крис4    0 19 апр. 12:05 delete.me.py
    svn proplist delete.me.py  # вы увидите:
    Свойства на "delme.py":
      SVN: исполняемый файл
      ключевые слова
      SVN: EOL-стиль
    svn вернуться delete.me.py
    rm delete.me.py

3.После отправки электронного письма пришло время добавить пояс к этим подтяжкам, потому что некоторые разработчики забудут сделать то, что они должны делать. Таким образом, создавайте раздражающее предупреждение каждый раз, когда кто-то совершает коммит без правильной настройки реквизита.

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

"Глупый пользователь, Кевин, просто добавил файл с вкладками в нем!"

  • проверить SVN: исполняемый файл ON
  • проверить svn: ключевые слова "Id"
  • проверить svn: eol-стиль "LF" # linux системы
  • проверить нет вкладок в файле! (это беспорядок с разными вещами)

Как написать один из этих хуков фиксации, смотрите: http://wordaligned.org/articles/a-subversion-pre-commit-hook

Другие вопросы по тегам