close
  • 홈
  • :
  • 위치로그
  • :
  • 태그
  • :
  • 방명록
  • :
  • 관리자
  • :
  • 새글쓰기
블로그 이미지

이슬나라 [isulnara.com]
프로그램 관련 문의...
전체 (208)
자작 프로그램 (24)
EzIP (3)
IEPageSetup (3)
iSysInfoX (2)
메신저 알림이 (1)
ezSVC (1)
WebFTP (2)
iDebugX (1)
기타 (10)
버그 신고 (1)
이것저것.. (55)
WebFTP 게시판 (0)
팁 모음 (77)
linux (21)
프로그래밍 (36)
윈도우 (5)
네크워크 (7)
기타 (7)
윈도우 숨은.. (4)
터미널 서비스.. (1)
공개 웹하드 (1)
관리자 (0)
PC 원격제어.. (1)
NAS (43)
«   2012/02   »
일 월 화 수 목 금 토
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
ftpls ftplist ftpdir expect hosts.deny DirectX9 zotac Peak Detection SIP sed 공유기 tomcat IE DS209+II iso ftp bootstrap mysql 3rd party 플래시 Points 쉘스크립트 MD5 리모콘 안드로이드 TMS TDBAdvGrid SQL Server ezSVC awk pascal 지그비 synology
[ezLink] 동시 접속수...
ezLink 1.2.1.2 정식... (3)
MD5 CRC 체크섬.
Apache, Subversion...
CentOS에 MongoDB 설치.
예.. 제가 직접 만들어서...
isul / 01/29
직접 만드시는 프로그램...
LuckySh / 01/28
109j용 1869가 synology...
isul / 01/22
Ds-109j 1869 가지고 계...
심재규 / 01/21
시도해보지는 않았지만 S...
isul / 01/20
일반 어플리케이션을 서...
ㅇㅇ/ / 2009
사이코웨어 : nProtect,...
√ MIRiyA's AstraLog / 2008
웹페이지에서 인쇄시 머...
醉生夢死™ / 2006
웹페이지에서 MAC Addres...
날자~!! 날어~!! / 2005
 최근글 목록
 2011/11 [2]
 2011/10 [3]
 2011/09 [1]
 2011/07 [3]
 2011/06 [1]
넷하드 - NAS 카페
무료 원격제어 프로그램
블로그가 뭥미?
솔라리스 테크넷
스티브 맥코넬
시놀로지 NAS 카페
하얀나무 - 캠핑 전문 쇼핑몰
하얀나무's Story
Total of
456348 visitors
Today 55
Yesterday 189
 
     
 NAS 
SVN + Mantis 연동하기
Posted on 2009/11/07 16:54
 
 
 
 
SVN 클라이언트에서 남긴 커밋 로그를 Mantis의 이슈 노트로 자동 등록하는 방법에 관하여 설명합니다.

대상 장비: DS-209+II (일반 윈도우, 리눅스 머신에도 적용 가능함)

결과부터 보도록 하죠..

아래와 같이 SVN 클라이언트에서 커밋 로그를 입력하여 커밋하면
사용자 삽입 이미지

Mantis의 이슈 노트와 히스토리에 그 내용이 자동으로 기록됩니다.
사용자 삽입 이미지


보통 mantis와 svn 클라이언트와의 연동을 위해서 mantis 설치 디렉토리의 하위 디렉토리인 core에 있는 checkin.php를 사용합니다.
그러나 DS-209+II에서는 checkin.php를 이용하기가 쉽지 않습니다.
checkin.php 소스 코드의 첫 줄이 다음과 같이 시작됩니다.
#!/usr/local/bin/php -q
즉, CLI(Command Line Interface) 모드에서 동작되도록 되어 있는 것이죠..
DS-209+II에는 php 실행 파일이 존재하지 않고, mysql 관련 라이브러리가 없기 때문에 checkin.php를 이용하려면 직접 컴파일 해서 해당 파일들을 구해야 됩니다. 일반 리눅스 서버가 아니라서 쉽지 않은 일이죠..

그래서 다른 방법을 찾아보았습니다.
checkincurl.php이라는 걸 이용하는 것입니다.
이것을 이용하기 위해서는 curl이 필요합니다.
curl을 이용한 방법의 장점으로는 svn서버와 웹서버가 물리적으로 같은 서버에 있지 않을 경우에도 커밋 로그를 mantis로 전송할 수 있다는 것입니다.

아래 명령을 이용하여 curl을 먼저 설치합니다.(당연히 아래 명령을 이용하기 위해서는 bootstrap이 설치 되어 있어야 겠죠. http://isulnara.com/tt/201 참조)
[root@fs:~]# ipkg install libcurl

이제 svn 클라이언트에서 커밋할 경우 svn 서버에서 mantis로 checkincurl.php로 커밋 로그를 넘겨주도록 설정해야 됩니다.
svn 서버의 저장소에 hooks라는 디렉토리가 존재합니다.
이 디렉토리 내의 post-commit.tmpl를 post-commit으로 복사하고, 실행 권한을 줍니다.
[root@fs:~]# chmod 705 post-commit

그리고, 그 내용은 다음과 같이 설정합니다.
REPOS="$1"
REV="$2"

auth=$(/opt/bin/svnlook author -r $REV $REPOS)
dt=$(/opt/bin/svnlook date -r $REV $REPOS)
changed=$(/opt/bin/svnlook changed -r $REV $REPOS)
log=$(/opt/bin/svnlook log -r $REV $REPOS)
n='<br>'

/opt/bin/curl -d "user=$auth&log=Changeset [${REV}] $n$log$n$changed" http://서버주소/mantis경로/core/checkincurl.php
- 위 내용에서 서버주소와 mantis가 설치된 경로를 설정합니다.

이제 mantis 설정이 남았습니다.
mantis 설정은 기본 설정 파일 수정과 한글 지원을 위한 처리, core 디렉토리에 접근을 위한 설정 이렇게 세 가지가 필요합니다.

먼저 mantis 설치 디렉토리의 config_inc.php를 아래와 수정합니다.
# svn
$g_source_control_server = array('192.168.0.4');
$g_source_control_account = 'isul';
$g_source_control_regexp = '/\b(?:bug|issue)\s*[#]{0,1}(\d+)\b/i';
$g_source_control_notes_view_status = VS_PRIVATE;

$g_source_control_set_status_to = RESOLVED;
$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_server는 접속을 허용할 svn 서버의 ip 주소를 설정합니다.
- $g_source_control_account는 mantis에 있는 사용자 계정을 입력합니다.
- $g_source_control_regexp로 설정된 bug, issue는 커밋 로그 입력 시 "bug #이슈번호" 또는 "issue #이슈번호"라는 단어가 있을 경우에만 mantis의 이슈 노트로 등록되게 한다는 의미입니다.
- $g_source_control_set_status_to는 이슈 노트의 공개/비공개 설정으로 VS_PRIVATE는 비공개, VS_PUBLIC는 공개를 의미함
- $g_source_control_set_status_to는 이슈 상태를 의미(RESOLVED, CLOSED 등)
- $g_source_control_set_resolution_to는 이슈 노트의 해결 상태를 의미

다음은 한글 처리를 위한 부분으로 DS-209+II와 같이 LANG 환경변수를 사용할 수 없는 시스템에서만 필요합니다.
DS-209+II의 경우 post-commit에 "export LANG=ko_KR.UTF-8"을 설정해봐야 인식되지 않습니다.
이 문제를 해결하기 위해 mantis 설치 경로의 core 디렉토리에 checkincurl.php를 아래와 같이 수정합니다.
이 부분 설정하지 않으면 한글이 아래와 같이 표시됩니다.
?\\236?\\158?\\152

붉은 색으로 된 부분을 추가하면 됩니다.( 붉은 색 이전의 문자를 검색하여 해당 위치를 찾으면 됩니다.)
    # --------------------------------------------------------
    # $Id: checkin.php,v 1.5.2.1 2007-10-13 22:35:16 giallu Exp $
    # --------------------------------------------------------

    global $g_bypass_headers;
    $g_bypass_headers = 1;
   
    require_once( dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR . 'core.php' );

    //--------------------------------------------------------------------------------------
    // 한국어 변환
    //                    by isul ( http://isulnara.com )
    //--------------------------------------------------------------------------------------
    function convertToKorean($str)
    {
        $DELIMITER = "?\\\\";
       
        $pos = strpos($str, $DELIMITER);
        while ($pos !== false)
        {
            $pos = strpos($str, $DELIMITER);
            $dec = substr($str, $pos + 3, 3);

            if ($pos !== false)
                $str = str_replace($DELIMITER . $dec, '%' . dechex($dec), $str);
        }

        return urldecode($str);
    }
    //--------------------------------------------------------------------------------------

... 중략 ....

$t_line = isset($_POST['log']) ? $_POST['log'] : '';
$t_line = convertToKorean($t_line);
#var_dump("$t_line");

마지막으로 curl이 core 디렉토리의 checkincurl.php에 접근할 수 있도록 core 디렉토리에 있는 .htaccess의 파일명을 변경하거나 삭제합니다.


이제 모든 설정이 완료되었습니다.
TortoiseSVN, 이클립스 등의 SVN 클라이언트에서 커밋 로그를 입력할 때
issue #10 또는 bug #10과 같은 내용만 포함되면 svn 서버에서 자동으로 mantis로 그 내용을 전송하여 이슈 노트로 등록합니다.
커밋 로그 입력 시 매번 issue #10와 같은 것을 입력하기 싫다면 속성 설정으로 자동 입력되게 할 수도 있습니다.
TortoiseSVN의 경우는 http://newbie.kr/52를 참고하시면 자동 입력되게 할 수 있습니다.
몇 시간에 걸쳐 고생해서 연동을 하긴 했는데 얼마나 사용할지는 모르겠습니다.
svn 클라이언트에서 커밋 시 mantis에 기록된 이슈 번호를 알아야 하기 때문이죠.. 그냥 커밋 후 mantis에 다시 한 번 기록하는 것는 더 편할 수도...

참고
http://www.mantisbt.org/bugs/view.php?id=8847
http://newbie.kr/52
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
DS209+II, mantis, svn
Trackback [0] : Comment [2]
TrackbackAddress
http://isulnara.com/tt/trackback/207
BlogIcon mk 수정/삭제 답변하기
2011/01/03 15:04
안녕하세요? 이 글을 통해 상당히 공부하게 되었고 도움을 받은 mk라 합니다.
잘 썼지만 한 가지 문제가 발생해서 확인 좀 부탁드릴까.. 해서 덧글을 남깁니다!
한국어 변환하는 함수 중에서
$pos = strpos( $str, $DELIMITER ); 가 있고
while ( $pos ), if ( $pos ) 에서 사용을 하는 데
$pos = 0 이 되는 경우엔 값을 찾았음에도 불구하고 루프를 돌지 않는 경우가 생기더라구요.
그래서 while ( !($pos === false) ), if ( !($pos === false ) )
로 고치는 게 맞지 않을까.. 하여 덧글을 올립니다.

(나머지는 잘 됩니다. ㅠㅠ )
BlogIcon isul 수정/삭제
2011/01/03 23:42
안녕하세요..
지적해주신 내용이 맞습니다.
처음부터 한글로 시작되면 제가 올렸던 코드는 문제가 있습니다.
알려주신 코드를 조금 수정하여 본문을 수정하였습니다.

while ( !($pos === false) ), if ( !($pos === false ) )
---->
while ($pos !== false), if ($pos !== false)

고맙습니다^^
SecretComment
  1 ... 42 43 44 45 46 47 48 49 50 ... 208