SVN Server를 관리하는 입장에서는 사용자들의 일부 비정상적인 커밋이 금지될 수 있도록 통제하고 싶을 때가 있습니다. 이럴 때 활용할 수 있는 방법이 바로 pre-commit hook 을 사용하는 방법인데요. VisualSVN을 사용하는 경우에는 이 hook 스크립트를 윈도우즈 스크립트 스타일로 짜야 하기 때문에, 리눅스 환경에 익숙한 분들에겐 영 어색하고 여간 귀찮은 일이 아닐 수 없습니다.
그래서 이번 포스팅에서는 제가 활용하기 위해 작성한 스크립트를 공유하고자 합니다. 많지 않은 분들이시겠지만, 아직 VisualSVN을 활용하고 계신 분들은 참고하시면 좋을 것 같습니다. 이 스크립트에서 커밋 이전에 체크하는 사항들은 아래와 같습니다.
- 커밋 메세지를 입력하였는지
- 커밋 메세지에 이슈번호를 입력하였는지
- 삭제 커밋이 포함되어 있는지 (삭제 커밋이 있는 경우 커밋 금지)
여기에서 다소 특이한 부분은 관리자 권한을 가진 특정 사용자들은 삭제 커밋을 포함한 모든 커밋을 자유롭게 할 수 있도록 하였습니다.
- 관리자 권한을 가진 유저는 모든 커밋을 자유롭게 할 수 있음
VisualSVN pre-commit hook 예시
@echo off
:: Stops commits that have empty log messages.
@echo off
setlocal
rem Subversion sends through the path to the repository and transaction id
set REPO=%1
set TXN=%2
set SVNLOOK="%VISUALSVN_SERVER%\bin\svnlook.exe"
:: Logging Settings
set LOGFILE="D:\log\pre-commit-%date%.log"
echo ====%date%====%time%==== >> %LOGFILE%
echo REPO: %REPO% >> %LOGFILE%
echo TXN : %TXN% >> %LOGFILE%
:: Debugging....
echo [SVNLOOK changed] >> %LOGFILE%
%SVNLOOK% changed %REPO% -t %TXN% >> %LOGFILE%
echo [SVNLOOK log] >> %LOGFILE%
%SVNLOOK% log %REPO% -t %TXN% >> %LOGFILE%
echo [SVNLOOK author]>> %LOGFILE%
%SVNLOOK% author %REPO% -t %TXN% >> %LOGFILE%
:: Checking... isAdministrator
%SVNLOOK% author %REPO% -t %TXN% | findstr "adminuser_a adminuser_b" >> %LOGFILE%
if %errorlevel% equ 0 (goto NORMAL_EXIT)
:: Checking... empty comment
%SVNLOOK% log %REPO% -t %TXN% | findstr . >> %LOGFILE%
if %errorlevel% gtr 0 (goto ERROR_TOO_SHORT)
:: Checking... issue number
:: %SVNLOOK% log %REPOS% -t %TXN% | findstr /r /c:"#[0-9]" >> %LOGFILE%
:: if %errorlevel% gtr 0 (goto ERROR_ISSUE)
:: Checking... DELETE commit
%SVNLOOK% changed %REPO% -t %TXN% | findstr /b /c:"D " >> %LOGFILE%
if %errorlevel% gtr 0 (goto NORMAL_EXIT) else (goto ERROR_DELETE)
:ERROR_TOO_SHORT
echo Your commit has been blocked because your log message was too 1>&2
echo short. Please write a log message describing the purpose of your 1>&2
echo changes and then try committing again. Thanks! 1>&2
echo 커밋메시지를 반드시 입력하셔야 합니다. 1>&2
goto ERROR_EXIT
:ERROR_ISSUE
echo empty issue, please fill issue number 1>&2
echo changes and then try committing again. Thanks! 1>&2
echo example : #000 hello world 1>&2
goto ERROR_EXIT
:ERROR_DELETE
echo You cannot delete resources. contact admin please. 1>&2
echo 삭제 커밋은 불가능합니다. 관리자에게 문의하십시오. 1>&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
:NORMAL_EXIT
exit 0
참고사항
VisualSVN Server 3.9 이상의 버전을 사용하시는 분들이라면, 커밋 메시지의 길이를 체크하기 위해 아래와 같이 VisualSVN 사에서 제공하는 [VisualSVNServerHooks.exe] 프로그램을 활용할 수도 있습니다.
"%VISUALSVN_SERVER%\bin\VisualSVNServerHooks.exe" ^
check-logmessage "%1" -t "%2" ^
--min-size <min-size>
IF ERRORLEVEL 1 exit /b 1
자세한 사항은 VisualSVN 사의 공식 설명을 참고하시기 바랍니다.
https://www.visualsvn.com/support/topic/00140/
'IT 라이프' 카테고리의 다른 글
공인 쿠버네티스 자격증 알아보기 (CKA, CKAD, CKS, KCNA) (1) | 2022.04.04 |
---|---|
MySQL 마이너 버전 업그레이드 방법 (5.7버전, 수작업 기준) (0) | 2022.03.07 |
신형 맥북 프로 16형에 탑재!? 애플 M1X - 유출 정보 총정리 (0) | 2020.12.24 |
[Python] 판다스 (Pandas) 기초 - 데이터프레임(DataFrame) (0) | 2020.10.21 |
Vue.js 슬롯(Slot) 사용하기 : v-slot 디렉티브 (0) | 2019.06.06 |