몇가지 설정 작업을 통해서 SVN에서 커밋할 때마다
자동으로 Mantis 이슈에 이슈노트를 등록하게 할 수 있다.
먼저 Mantis 설정 방법부터 살펴보자.
SVN 로그 메시지 저장을 담당할 계정을 하나 생성하고
(기존 계정을 이용해도 됨)
Mantis 설치 폴더의 config_inc.php 파일에 다음 구문을 추가한다.
$g_source_control_regexp = '/\b(?:bug|issue)\s*[#]{0,1}(\d+)\b/i';
$g_source_control_notes_view_status = VS_PRIVATE;
$g_source_control_account 는 이슈 노트를 등록할 때 사용되는 아이디로
이때 사용할 계정의 등급은 최소 '개발자' 이상이어야 한다.
$g_source_control_regexp 은 로그 메시지 중에서 특정 이슈번호를 뽑아낼 때 사용되는
정규식으로 기본 설정된 정규식은 "/\bissue [#]{0,1}(\d+)\b/i" 으로
로그중에 'issue #이슈번호'라는 단어가 있으면 해당 이슈에 이슈 노트를 생성한다.
특별히 다른 단어를 사용하지 않을것이라면 추가하지 않아도 된다.
나는 인터넷에서 구한(-_-) 정규식을 설정했는데 issue 외에 bug 란 단어도 이슈 노트를 생성하게 한다.
$g_source_control_notes_view_status 는 등록되는 이슈노트의 상태를 설정하는 것으로
기본은 비공개(VS_PRIVATE)로 설정 되어있다. 공개로 바꾸려면 VS_PUBLIC으로 설정한다.
추가적으로, 각 이슈노트가 등록될 때 특정 문구가 있으면 자동으로 이슈가 닫히게 할 수도 있는데
config_inc.php 파일에 다음 구문도 추가하면 된다.
$g_source_control_set_resolution_to = FIXED;
$g_source_control_fixed_regexp = '/\bfix(?:ed|es)\s+(?:bug|issue)?\s*[#]{0,1}(\d+)\b/i';
$g_source_control_fixed_regexp 에 설정된 정규식으로 검출된 이슈는
$g_source_control_set_status_to 에서 설정한 상태로 변경되는데
RESOLVED 나 CLOSED 등의 상태로 바꿀 수 있다. OFF를 설정하면 상태가 바뀌지 않는다.
상태가 변경될 때 해결상태 역시 $g_source_control_set_resolution_to 에 설정한 값으로 바뀌게 된다.
참고로, $g_source_control_fixed_regexp 값은 기본값이 $g_source_control_regexp와 같다.
이쯤에서 테스트를 한번 해보자.
mantis에 접속해서 아무 프로젝트나 하나 만들고 이슈를 등록한다. 이때 이슈 번호를 잘 기억하자.
그리고 자신의 계정에 SSH로 접속해서 mantis 설치 디렉토리의 core 디렉토리로 이동 후
다음과 같이 입력한다.
제대로 설정되었다면 이슈에 이슈노트가 추가된 것을 확인할 수 있을 것이다.

이번엔 이슈가 닫히는지 확인해보자. 다시 SSH에서 다음과 같이 입력한다.
mantis에 접속해서 확인해보면 이슈노트가 등록되고 해당 이슈가 닫힌것을 확인할 수 있다.

이제 SVN 설정을 변경할 차례다.
SVN에서 제공하는 hook 스크립트 중에서 post-commit 훅 스크립트를 수정한다.
(없으면 생성해야됨..)
SVN 저장소 디렉토리에 보면 hooks란 디렉토리가 있는데
해당 디렉토리에 각 훅 스크립트의 템플릿이 있다.
post-commit.tmpl 파일을 복사하여 복사본의 이름을 post-commit 으로 바꾸자.
post-commit 파일을 다음과 같이 수정한다.
export LANG=ko_KR.UTF-8
REPOS="$1"
REV="$2"
auth=$(svnlook author -r $REV $REPOS)
dt=$(svnlook date -r $REV $REPOS)
changed=$(svnlook changed -r $REV $REPOS)
log=$(svnlook log -r $REV $REPOS)
n=$'\n'
php -q ~/mantis설치폴더/core/checkin.php <<< "Changeset [${REV}] by $auth, $dt$n$log$n$changed"
그리고 post-commit 파일의 속성을 실행가능하게 변경한다.
SSH로 접속해서 svn저장소/hooks 디렉토리로 이동한 후 다음 명령을 실행한다.
이제 svn 커밋이 있을때마다 로그에 이슈 번호만 제대로 적어준다면 자동으로 mantis 이슈노트가 등록될 것이다.
하지만 매번 로그에 issue # ~~ 라고 적기도 귀찮다..
svn에서 제공하는 bugtraq 속성을 이용하면 이것도 쉽게 할 수 있다.
TortoiseSVN을 사용한다고 치고, 체크아웃 받은 디렉토리에서
마우스 우클릭 - TotoiseSVN - Properties 를 선택한다.
다음 그림과 같이 속성들을 추가한다.

속성을 추가할 때 Apply property recursively에 체크하는 것을 잊지말자.
이제 커밋을 하려고 하면 커밋윈도우 모양이 바뀐것을 볼 수 있을 것이다.

이슈 번호를 입력할 수 있는 컨트롤이 추가되었다. 만약 이슈 번호를 입력하지 않고 커밋하려고 하면 경고 창이 뜬다.
커밋을 하면 mantis에 자동으로 이슈노트가 등록된다.
svn 로그에서도 바로 mantis로 이동할 수도 있다.

이슈 번호를 클릭하면 mantis 페이지로 넘어감..
이상으로 svn과 mantis 연동에 관한 글을 마친다. 즐거운 코딩하길^^;;


