Хуки предварительной фиксации SVN
-
05-09-2019 - |
Вопрос
В настоящее время я пытаюсь расширить наш уже существующий (и работающий) пакетный файл перед фиксацией для фиксации в 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
Решение
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 ...
Другие советы
Это не совсем тот ответ, который вы ищете, но вы можете заблокировать все файлы *.suo с помощью глобальное игнорирование вариант.