2009-02-19 11 views
3

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

Мое понимание сценариев DOS невелика, поэтому я подозреваю, что это может быть использование 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 

ответ

5

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 

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

if errorlevel 0 andthencontinuewithwhatever 

Таким образом, вы скрипт также является стабильным против зловещего:

set errorlevel=0 

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

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

someCommand 
if errorlevel 10 ... 
if errorlevel 9 ... 
if errorlevel 0 ... 
3

Не совсем ответ, который вы ищете, но вы можете блокировать все * .suo файлы с опцией global-ignores.

+0

Проголосовало, определенно не заслуживает -1. –

+0

global-ignores также намного лучший способ справиться с проблемой, чем перехватывать фиксации. Хотя реальное решение заключается в том, чтобы надуть ваших разработчиков ключом к четырем, пока они не узнают. См. Http://sirhc.us/journal/2007/07/27/oscon-2007-subversion-worst-practices/ –