336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. Windows 환경과 Linux 환경의 차이

Linux에서 Comment 강제 처리는 저장소의 hook 폴더 아래 스크립트 언어로 pre-hook 파일을 작성하는 반면 Windows 환경에서는 pre-hook.bat 배치 파일을 작성한다.

2. pre-hook.bat 예제

@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 REPOS=%1
set TXN=%2
set PATH=%PATH%;C:\Program Files\BitNami Redmine Stack\subversion\bin

rem check for an empty log message
svnlook log %REPOS% -t %TXN% | findstr . > nul
if %errorlevel% gtr 0 (goto err)
svnlook log %REPOS% -t %TXN% | findstr "refs references IssueID Issue fixes closes closed" > nul
if %errorlevel% gtr 0 (goto err2)
exit 0

:err
echo. 1>&2
echo 커밋 실행 도중 에러가 발생 되었습니다. 1>&2
echo 로그 메세지와 이슈 상태를 체크 하여 처리 해 주시기 바랍니다. 1>&2
echo 감사합니다. 1>&2
exit 1

:err2
echo. 1>&2
echo 커밋 실행 도중 에러가 발생 되었습니다. 1>&2
echo 이슈 처리 설정 후 다시 커밋해 주시기 바랍니다. 1>&2
echo 감사합니다. 1>&2
exit 1


3. 설명

svn에서 커밋이 발생 되면 아래의 절차가 수행된다.

1. 저장소 hook 폴더 안에 pre-hook.bat 파일 확인 및 호출
2. 매개변수로 저장소 정보(REPOS)와 트랜잭션 ID 전달(TXN)

환경변수 PATH가 재설정된다.

SVN 포럼을 살펴보면 스크립트 수행 시 보안 이슈로 환경변수 PATH 초기화 한다는 점을 발견 할 수 있다.

그래서 SVN이 설치된 위치의 PATH를 스크립트 수행시 재설정 해 줘야 한다.

코멘트 유무를 확인 하기 위해 svnlook을 사용한다.

svnlook log %REPOS% -t %TXN% | findstr . > nul 은 SVN 마지막 요청에서 코멘트가 포함 되어 있는 지 확인하는 명령어인데, %ERRORLEVEL% 변수를 확인하여 커밋 요청을 처리 할지 결정한다.

svnlook log %REPOS% -t %TXN% | findstr "refs references IssueID Issue fixes closes closed" > nul은 redmine에서 사용하는 키워드들(refs, fixes 등)이 코멘트에 포함 되어 있는 지 확인하는 명령이다. 

코멘트가 없다면 커밋하지 않는다.

:err 아래 구문들이 에러라고 볼 수 있는데 눈여겨 볼 것은 echo.과 1>&2가 될 것이다
echo.은 에코를 활성화 하여 문자열을 콘솔이나 기타 표준 출력에 출력한다는 의미이다.
그리고 1>&2는 1(표준 출력)을 2(표준 에러로) >&(전달) 한다는 뜻이다.

4. 정리

위에서 언급한 각각의 배치 파일의 역할을 이해한다면 확장된 기능들을 구현 할 수 있으리라 생각한다.

+ Recent posts