Подтвердить что ты не робот

Сила svn: eol-style = native на сервере?

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

[miscellany]
enable-auto-props = yes

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

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

4b9b3361

Ответ 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