Заставить svn: eol-style = native на сервере? - PullRequest
13 голосов
/ 15 апреля 2011

В настоящее время, чтобы убедиться, что для свойства subversion eol-style установлено значение native для каждого нового файла, добавляемого в наш проект, мы должны добавить его в файл ~/.subversion/config на каждой из машин наших разработчиков:

[miscellany]
enable-auto-props = yes

[auto-props]
*.java = svn:eol-style=native

Есть ли способ сделать эквивалент на сервере SVN?

Ответы [ 3 ]

9 голосов
/ 15 апреля 2011

Нет, нет.

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

Книга SVN содержит примечание о этом вопросе :

Внимание

Не пытайтесь изменить транзакцию, используя подключаемые скрипты. Типичным примером этого является автоматическая установка таких свойств, как svn:eol-style или svn:mime-type во время фиксации. Хотя это может показаться хорошей идеей, это вызывает проблемы. Основная проблема заключается в том, что клиент не знает об изменениях, внесенных скриптом ловушки, и нет способа сообщить клиенту, что оно устарело. Это несоответствие может привести к неожиданному и неожиданному поведению.

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

7 голосов
/ 04 августа 2013

Только потому, что ответ Fausto устарел после выпуска Subversion 1.8


В случае Subversion 1.8 или более поздней версии вы можете использовать на уровне хранилища (не глобально для всех хранилищ на сервере) конфигурация, определяемая хранилищем (см. Также тему в блоге Collab ), а именно - svn: авто-реквизит в корне ствола каждого репозитория

0 голосов
/ 04 августа 2013

Я не смог найти пример того, как проверить свойство svn: eol-style для исходного кода непосредственно в скрипте ловушки перед фиксацией. Наиболее близким является check-mime-type.pl, который использует свойства mime-type, чтобы определить, является ли файл текстовым файлом.

Следующий скрипт, вставленный в файл скрипта предварительной фиксации, проверит, что для всех файлов .cpp / .h, добавленных в коммит, установлено свойство svn: eol-style. (Его можно легко расширить, чтобы проверить дополнительные расширения файлов). Он также будет предоставлять сообщения, указывающие, в каких файлах отсутствует свойство svn: eol-style.

REPOS="$1"
TXN="$2"

# Get new cpp/h files
ADDFILES=$(${SVNLOOK} changed "$REPOS" -t "$TXN" | sed -n -e '/^A.*\(\.cpp\|\.h\)$/s/^A *//p')
#echo "ADDFILES=$ADDFILES" >&2

# Check files for svn:eol-style property
ESMISSING=''
for f in ${ADDFILES}
do
  if [[ "$(${SVNLOOK} pl ${REPOS} -t ${TXN} ${f})" != *svn:eol-style* ]]
  then
    # output to stderr to include message in svn commit ouput
    echo "No svn:eol-style property set on file $f" >&2
    ESMISSING=1
  fi
done

if [[ -n "$ESMISSING" ]]
then
  exit 1
fi
...