SVN Pré Commit Hooks
-
05-09-2019 - |
Pergunta
Atualmente, estou tentando estender a nossa já existente (e trabalho) pré cometer arquivo de lote para cometer a SVN. Os primeiros blocos de parte qualquer cometer esse não tem comentários e funciona como esperado. A segunda parte é uma attmept para bloquear usuários que cometem arquivos SUO, no entanto, isso está bloqueando todos os commits.
O meu entendimento de DOs scripting não é grande, então eu suspeito que pode ser meu uso do FINDSTR?
alguém pode ajudar?
"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
Solução
retornos FINDSTR 0 se algo foi encontrado, e 1 se nada foi encontrado. Você só invertida seu cheque.
No lote-foo obrigados, mesmo no Windows o shell é interativo, assim você pode experimentá-lo vivo:
>dir | findstr ".sln"
15.01.2009 16:37 33.844 Project.sln
>echo %ERRORLEVEL%
0
>dir | findstr ".slngimpf"
>echo %ERRORLEVEL%
1
Btw, mais fácil escrever
if errorlevel 0 andthencontinuewithwhatever
Desta forma, você script também é estável contra o sinistro:
set errorlevel=0
que irá destruir qualquer tentativa futura para imprimir o errorlevel com% errorlevel% de forma correta.
( Editar ) Nota importante: eu esqueci de dizer que o if errorlevel
verificações de sintaxe se o errorlevel é maior ou igual para o valor ser testado para. Então, para usá-lo corretamente, você deve sempre verificar o maior erro em primeiro lugar, como:
someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
Outras dicas
Não exatamente a resposta que você está procurando, mas você pode bloquear todos os arquivos * .suo com o -ignora globais opção.