Я хотел бы использовать крюк pre-commit, который запрещает разработчикам устанавливать svn: mergeinfo в каталогах, отличных от root. То есть, я хочу обеспечить, чтобы svn: mergeinfo мог установить только на каталоги, такие как «trunk» или «branch/branchName». Разработчикам иногда нужно «напомнить», что не рекомендуется использовать подкаталог корня в качестве цели слияния (в соответствии с передовыми методами, перечисленными here). У кого-нибудь есть такой скрипт с крючками или знаете, где я могу его найти? Я нахожусь в среде Windows, поэтому было бы предпочтительнее пакетная или powershell, но все было бы полезно.Svn pre-commit hook to disallow svn: mergeinfo в каталогах, отличных от root
ответ
Прежде всего, я бы рекомендовал использовать perl или python для выполнения задачи, так как пакет окон оставляет желать лучшего.
Вы можете использовать примерный сценарий от http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ для начала. Например, verify-po.py скрипт проверяет кодировки файлов и commit-access-control.pl.in проверяет, имеет ли автор права на фиксацию. Вероятно, вы использовали svnlook diff в своем скрипте (как в последнем), чтобы получить измененные свойства для каталогов и пройти через соответствующие пути, являются ли они ветвями или тегами, использующими регулярное выражение.
Update
Найдено enforcer pre-commit hook script, который, кажется, что вы ищете.
Что делает этот сценарий он использует svnlook заглянуть в сделке прогресс. По мере прохождения через транзакцию он вызывает набор крючков , которые позволяют администратору проверить, что происходит , и решить, приемлемо ли оно .
Он содержит несколько методов и verify_property_line_added() среди них, так как это вызывается для каждой строки, которая добавляется к свойству на файле.
Похоже, это будет наиболее вероятное решение и, таким образом, победитель награды, если кто-то еще не придумает что-то. – Charles
Кстати, после вашего вопроса я начал интересоваться svn hooks, и я собираюсь реализовать некоторые (начиная с запрещающих коммитов без сообщения журнала) и, вероятно, достигнет свойств проверки при фиксации - тогда будет добавлено еще одно обновление , – pmod
Если вы можете CPAN на сервере:
https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl
Если нет (на основе http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then
# Get list of paths which have changed
TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")
# Filter those which are allowed: /trunk, /branches/*,...
TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")
# Iterate over all paths, which are not allowed to have mergeinfo
while IFS= read -r TXN_PATH; do
ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)
MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
if [ ! "$MERGEINFO" = "" ]; then
echo " Cannot merge into directory that is not trunk or a branch:" >&2;
echo " $ELEM_PATH" >&2;
echo " Override by using [override]." >&2;
exit 1;
fi
done <<< "$TXN_PATHS"
# echo "Merge info check: OK"
fi
- 1. svnrdump попадает в svn precommit hook - как я могу решить
- 2. Длинные svn: mergeinfo в свойствах каталога SVN
- 3. Проверка определенной строки в сообщении фиксации - SVN Precommit Hook
- 4. svn property mergeinfo missing
- 5. Удалить ненужные свойства svn: mergeinfo
- 6. SVN hook/svn up/conflict
- 7. Недвижимость и филиалы SVN mergeinfo
- 8. Обратное слияние и svn: mergeinfo
- 9. SVN: доступ к истории mergeinfo
- 10. Можно ли игнорировать изменения в svn: mergeinfo после слияния SVN?
- 11. Переместить проект в svn от root to/trunk
- 12. double commit - svn hook
- 13. SVN JSHint Hook?
- 14. SVN hook mailer.py конфигурация
- 15. Избавление от .svn-файлов во всех каталогах
- 16. Проблема с SVN-соединением с свойством «svn: mergeinfo»
- 17. Can Git SVN Work Out svn mergeinfo --show-revs подходит
- 18. Что такое фактическое использование SVN в mergeinfo?
- 19. SVN Игнорировать в заблокированных каталогах
- 20. Служба svn proxy precommit (от сервера к клиенту)
- 21. svn: mergeinfo не правильно вишневый между ветвями
- 22. Ошибка: извлечение mergeinfo не поддерживается «svn: //IP.Address»?
- 23. Проверка типа файла SVN hook
- 24. svn: записи mergeinfo от до того, как была создана ветвь
- 25. Проблема с кодировкой Svn hook
- 26. Git pre-svn-dcommit hook
- 27. SVN: установить свойства только в каталогах
- 28. Обновление SVN в post-commit hook
- 29. как запустить обновление svn через svn post-commit hook
- 30. Post Commit SVN hook on MediaTemple (gs) - обновление svn
Строго любопытство - вы используете Subversion версии 1.5 или 1.6? (Я тоже пострадал от svn: mergeinfos во всех видах каталогов/файлов из-за слияния в/из не-корневых каталогов, но на 1.5) –
Мы на 1.6. Проблемы, которые возникают у меня, связаны не с старыми 1,5 ошибками, когда клиент svn устанавливает mergeinfo на все в поле зрения. Скорее, проблемы вызваны «ошибкой пользователя», когда пользователь выполняет слияние с использованием корневого каталога, такого как «trunk/mySubProject» в качестве цели слияния, поэтому задает информацию о слиянии в этом каталоге. Это закручивает последующие слияния, поскольку я уверен, что вы знаете. –
Действительно - спасибо за информацию. Мы только недавно на 1.6, так что у меня не было времени наблюдать, как все изменилось. Мне нужно решить ту же проблему. + Избранное –