Хуки предварительной фиксации SVN

В настоящее время я пытаюсь расширить наш уже существующий (и работающий) пакетный файл предварительной фиксации для фиксации в SVN. Первая часть блокирует любую фиксацию без комментариев и работает должным образом. Вторая часть — это попытка заблокировать пользователей, фиксирующих файлы SUO, однако в настоящее время это блокирует все фиксации.

Мое понимание сценариев DO невелико, поэтому я подозреваю, что это может быть мое использование FindStr?

Кто-нибудь может помочь?

"C:\Program Files\VisualSVN Server\bin\svnlook.exe" log -t %2 %1 | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo "Commit Comments are Required" >&2
exit 1
:OK
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" diff -t %2 %1 | FindStr /R "[a-zA-Z]\.suo"
IF %ERRORLEVEL% EQU 0 exit 0
echo "SUO files cannot be committed" >&2
exit 1

person Dean    schedule 19.02.2009    source источник


Ответы (2)


findstr возвращает 0, если что-то было найдено, и 1, если ничего не найдено. Вы только что перевернули свой чек.

Пакетный foo не требуется, даже в Windows оболочка интерактивна, поэтому вы можете попробовать ее вживую:

>dir | findstr ".sln"
15.01.2009  16:37            33.844 Project.sln

>echo %ERRORLEVEL%
0

>dir | findstr ".slngimpf"

>echo %ERRORLEVEL%
1

Кстати, проще написать

if errorlevel 0 andthencontinuewithwhatever

Таким образом, ваш сценарий также устойчив к зловещим угрозам:

set errorlevel=0

что затем уничтожит любую будущую попытку правильно распечатать уровень ошибки с помощью %errorlevel%.

(изменить) Важное примечание. Я забыл сказать, что синтаксис if errorlevel проверяет, является ли уровень ошибки больше или равным проверяемому значению. Поэтому, чтобы правильно использовать его, вы всегда должны сначала проверять наибольшую ошибку, например:

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
person gimpf    schedule 19.02.2009

Не совсем тот ответ, который вы ищете, но вы можете заблокировать все файлы *.suo с помощью глобально игнорирует опцию.

person Christian Studer    schedule 19.02.2009
comment
Проголосовал, определенно не заслуживает -1. - person Daniel Sloof; 19.02.2009
comment
global-ignores также гораздо лучший способ справиться с проблемой, чем перехватчики pre-commit. Хотя реальное решение состоит в том, чтобы шлепнуть ваших разработчиков подсказкой на четыре, пока они не научатся. См. sirhc.us/journal/2007/07/ 27/ - person Ronny Vindenes; 19.02.2009