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

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

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

  • Клиентская сторона: изменение автопрограмм в конфигурации клиента svn
  • Серверная сторона: выполните некоторую магию с фиксацией транзакций

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

Ответы

Ответ 1

Документы Subversion говорят об ошибке для изменения фиксации на стороне сервера.

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

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

Ответ 2

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

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

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

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

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

[email protected]:/tmp/testrepo/text-files$ svn --version --quiet
1.8.8

Файлы, созданные до установки свойств автообновления

[email protected]:/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
[email protected]:/tmp/testrepo/text-files$    

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

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

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

[email protected]:/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
[email protected]:/tmp/testrepo/text-files$    

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

[email protected]:/tmp/testrepo/text-files$ svn add f4.txt
A         f4.txt
[email protected]:/tmp/testrepo/text-files$ svn commit -m 'just another test' .
Adding         f4.txt
Transmitting file data .
Committed revision 5.
[email protected]:/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
[email protected]:/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
[email protected]:/tmp/testrepo/text-files$

Ответ 3

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

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

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

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

    Attention, teammates:

    On ALL the boxes you work on, please modify the file:  ~/.subversion/config 

    * under the section [miscellany], uncomment the line: 
    enable-auto-props = yes

    under the section [auto-props], add or uncomment lines so they read:

    *.py = svn:eol-style="LF";svn:executable="ON";keywords="Id";

    Note: you may test this is working by doing the following in your sandbox directory:

    touch delete.me.py
    svn add delete.me.py
    ls -al delete.me.py   # you will see:
    -rwxrwxr-x 1 krice4 krice4    0 Apr 19 12:05 delete.me.py
    svn proplist delete.me.py  # you will see:
    Properties on 'delme.py':
      svn:executable
      keywords
      svn:eol-style
    svn revert delete.me.py
    rm delete.me.py

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

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

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

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

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