Сила svn: eol-style = native на сервере?
В настоящее время для обеспечения того, чтобы свойство subversion eol-style
было установлено на native
для каждого нового файла, добавленного в наш проект, мы должны добавить его в файл ~/.subversion/config
на каждой из наших машин-разработчиков:
[miscellany]
enable-auto-props = yes
[auto-props]
*.java = svn:eol-style=native
Есть ли способ сделать эквивалент на сервере svn?
Ответы
Ответ 1
Нет. Нет.
Вы можете использовать скрипты hook для поиска установленного свойства или нет, но, кроме того, это невозможно. Subversion, иначе, чем CVS, не может изменить содержимое кода, исходящего из фиксации.
В книгу SVN включена заметка о этот вопрос:
Внимание!
Не пытайтесь изменить транзакцию с помощью скриптов hook. Общим примером этого является автоматическое определение свойств, таких как svn:eol-style
или svn:mime-type
во время фиксации. Хотя это может показаться хорошей идеей, это создает проблемы. Основная проблема заключается в том, что клиент не знает об изменениях, сделанных с помощью hook script, и нет способа сообщить клиенту, что он устарел. Эта несогласованность может привести к неожиданному и неожиданному поведению.
Вместо того, чтобы пытаться изменить транзакцию, гораздо лучше проверить транзакцию в привязке до фиксации и отклонить фиксацию, если она не соответствует требуемым требованиям.
Ответ 2
Просто потому, что ответ Fausto теперь устарел после выпуска Subversion 1.8
В случае Subversion 1.8 или более поздней версии вы можете использовать на уровне репозитория (не глобально для всех репозиториев на сервере) прописанную конфигурацию репозитория (см. также тема в блоге Collab), а именно - svn: auto-props в корне багажника каждого репозитория
Ответ 3
Я не смог найти пример того, как напрямую проверить свойство svn: eol-style для исходного кода в крюке pre-commit script. Ближайшим является check-mime-type.pl, который использует свойства типа mime, чтобы определить, является ли файл текстовым файлом.
Следующий script, вставленный в файл pre-commit script, проверяет, что все файлы .cpp/.h, добавленные в commit, имеют свойство svn: eol-style. (Его можно легко расширить, чтобы проверить дополнительные расширения файлов). Он также будет предоставлять сообщения, указывающие, в каких файлах отсутствует свойство svn: eol.
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