SVN Pre Commit Hooks
-
05-09-2019 - |
Frage
Ich versuche zur Zeit für die Begehung zu SVN unsere bereits bestehenden (und arbeitet) vor commit Batch-Datei zu erweitern. Die ersten Teilblöcke verpflichten alle, dass keine Kommentare hat und funktioniert wie erwartet. Der zweite Teil ist ein attmept Benutzer begehen SUO Dateien zu blockieren, aber dies derzeit alle Commits blockieren.
Mein Verständnis von DOs Scripting ist nicht groß, so dass ich vermute, dass es meine Nutzung des FindStr sein kann?
Kann mir jemand helfen?
"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
Lösung
findstr 0 zurück, wenn etwas gefunden wurde, und 1, wenn nichts gefunden wurde. Sie Ihren Scheck gerade umgekehrt ist.
Kein Batch-foo erforderlich, auch unter Windows die Shell interaktiv ist, so dass Sie es heraus lebendig ausprobieren können:
>dir | findstr ".sln"
15.01.2009 16:37 33.844 Project.sln
>echo %ERRORLEVEL%
0
>dir | findstr ".slngimpf"
>echo %ERRORLEVEL%
1
Btw, es einfacher zu schreiben
if errorlevel 0 andthencontinuewithwhatever
Auf diese Weise kann Skript ist auch stabil gegenüber dem ominösen:
set errorlevel=0
die dann jeden künftigen Versuch zerstört in einem richtigen Weg, um die Errorlevel mit% Errorlevel% auszudrucken.
( Bearbeiten ) Wichtiger Hinweis: ich habe vergessen zu sagen, dass die if errorlevel
Syntax überprüft, ob die Errorlevel größer oder gleich auf den Wert zu sein getestet. So, um es richtig zu nutzen, müssen Sie immer zu überprüfen, für den höchsten Fehler zuerst, wie:
someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...
Andere Tipps
Nicht genau die Antwort, die Sie suchen, aber Sie können alle blockieren * .suo Dateien mit der global-ignores Option.