SVN Pre Commit Hooks - PullRequest
       47

SVN Pre Commit Hooks

3 голосов
/ 19 февраля 2009

В настоящее время я пытаюсь расширить наш уже существующий (и работающий) пакетный файл предварительной фиксации для фиксации в SVN. Первая часть блокирует любой коммит, который не имеет комментариев и работает как ожидалось. Вторая часть - это attmept, чтобы блокировать фиксацию пользователями файлов 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

Ответы [ 2 ]

5 голосов
/ 19 февраля 2009

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

Не требуется пакетная обработка, даже в 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%.

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

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
3 голосов
/ 19 февраля 2009

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

...