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

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

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

  1. На стороне клиента: изменение autoprops в конфигурации клиента svn
  2. Серверная часть: сотвори волшебство с коммит-хуками

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

Ответы [ 3 ]

6 голосов
/ 24 февраля 2010

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

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

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

2 голосов
/ 27 октября 2016

Начиная с версии 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$
1 голос
/ 19 апреля 2013

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

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

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

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

    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: исполняемый файл ON
  • проверять svn: ключевые слова "Id"
  • проверять svn: eol-style "LF" # linux systems
  • проверить, нет вкладок в файле! (это беспорядок с разными вещами)

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

...