2008. 7. 9. 19:41

Subversion의 commit과 Trac 연동하기...(Subversion, Trac, post-commit, trac-post-commit-hook)


Subversion에서 commit하면 자동으로 Trac의 티켓 닫기
일단 다음과 같이 가정합니다.
  • Subversion 저장소 : /var/TEST
  • Trac 저장소 : /var/TEST.TRAC

Subversion의 post-commit 훅 스크립트
  • /var/TEST/hooks/post-commit 스크립트 파일
  • 원래의 파일 이름은 post-commit.tmpl 입니다. 이 파일의 이름을 post-commit 으로 변경하고, 실행 속성을 주어야 합니다.

SVNLOOK=/usr/local/bin/svnlook

REPOS="$1"
REV="$2"

LOG=`$SVNLOOK log -r "$REV" "$REPOS"`
AUTHOR=`$SVNLOOK author -r "$REV" "$REPOS"`
DIRS="`$SVNLOOK dirs-changed -r "$REV" "$REPOS"`"

$REPOS/hooks/trac-post-commit-hook.py -p /var/TEST.TRAC -r "$REV" -u "$AUTHOR" -m "$LOG"



Trac의 trac-post-commit-hook.py 파일
  • 사용하고 있는 trac의 소스에 보면 contrib/trac-post-commit-hook 파일이 있습니다.
  • 이 파일을 /var/TEST/hooks 디렉토리에 복사합니다. 이 위치는 post-commit 파일에 명시된 위치와 동일합니다.


주의 사항
  • 위에서 언급한 두개의 파일은 모두 실행 속성을 가지고 있어야 한다.


Subversion commit시에 Trac의 티켓에 영향을 미치도록 commit message 작성하기
다음과 같은 동작을 수행할 수 있습니다.
  • 티켓 자동으로 닫기
  • 티켓에 자동으로 comment 추가하기
trac-post-commit-hook.py 파일을 보면 다음과 같이 설명이 자세히 나와있습니다.

# It searches commit messages for text in the form of:
#   command #1
#   command #1, #2
#   command #1 & #2
#   command #1 and #2
#
# Instead of the short-hand syntax "#1", "ticket:1" can be used as well, e.g.:
#   command ticket:1
#   command ticket:1, ticket:2
#   command ticket:1 & ticket:2
#   command ticket:1 and ticket:2
#
# In addition, the ':' character can be omitted and issue or bug can be used
# instead of ticket.
#
# You can have more then one command in a message. The following commands
# are supported. There is more then one spelling for each command, to make
# this as user-friendly as possible.
#
#   close, closed, closes, fix, fixed, fixes
#     The specified issue numbers are closed with the contents of this
#     commit message being added to it.
#   references, refs, addresses, re, see
#     The specified issue numbers are left in their current status, but
#     the contents of this commit message are added to their notes.
#
# A fairly complicated example of what you can do is with a commit message
# of:
#
#    Changed blah and foo to do this or that. Fixes #10 and #12, and refs #12.
#
# This will close #10 and #12, and add a note to #12.

즉, Subversion commit 메시지에 특정 스트링을 넣으면, Trac의 티켓이 자동으로 변경됩니다.

Subversion commit과 함께 5, 10번 티켓을 닫을려면 다음과 같이 사용할 수 있다.
"close" 대신에 "closed", "closes", "fix", "fixed", "fixes" 등을 사용할 수도 있다.

close #5, #10
close #5 & #10
close #5 and #10
close ticket:5, ticket:10



Subversion commit과 함께 commit 메시지를 5번, 10번 티켓의 comment로 추가하려면...
"refs" 대신에 "references", "addresses", "re", "see"등을 사용할 수도 있다.

refs #5, #10
refs #5, #10
refs #5 & #10
refs #5 and #10
refs ticket:5, ticket:10


자. 이제 Subversion에서 commit을 하면, 자동으로 Trac의 관련 티켓이 닫히거나, comment가 추가되게 됩니다.


참고로 말씀 드립니다.
오늘 서점에 갔다가 "윈도우 프로젝트 필수 유틸리티"란 책을 보았습니다.
이 책에 윈도우 환경에서 Subversion과 Trac을 연동하는 방법이 아주 잘 설명되었습니다.
참고하시기 바립니다.
2008. 6. 25. 12:48

Subversion, TortoiseSVN 1.5 버전이 드디어 릴리즈 되었습니다.

Subversion과 TortoiseSVN이 1.4 버전이 릴리즈된 이후에 약 2년만에 1.5 버전이 드디어 릴리즈되었습니다.

자세한 릴리즈내용은 다음을 참고하시면 되겠습니다.
 * http://subversion.tigris.org/svn_1.5_releasenotes.html
 * http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html

1.5 버전에서 많은 것이 개선되고, 추가되었습니다.
결론은 1.5 버전을 사용하는 것이 좋겠죠.. ^^;
2008. 5. 16. 14:33

Subversion의 svn:ignore 속성

Subversion의 속성중 가장 많이 사용하고 유용하게 사용하는 속성이
svn:ignore 속성이 아닐까 생각합니다.

svn:ignore 속성을 어떤때 사용하는지 예를 한번 들어보도록 하죠.
리눅스에서 C 프로그램을 작성하고 있다고 한다면 다음과 같은 파일들이 있을 겁니다.
  • .c, .h 확장자의 소스파일들
  • 빌드를 자동(?)으로 수행해줄 Makefile
  • .o 확장자의 오브젝트 파일들
  • 최종적으로 생성되는 .out 실행파일들

이 중에서 실제 버전 관리되어야 할 파일은 소스파일들과 Makefile뿐입니다.
오브젝트 파일과 실행파일은 버전관리되어서는 안되겠죠.

작업사본(working copy)의 상태를 확인하기 위해서 "svn status" 명령을 실행해보죠
$ svn status
M     a.c
M     a.h
M     Makefile
?      a.o
?      a.out


a.o와 a.out 파일이 위와 같이 "?"로 표시되지 않을 수도 있습니다.
(subversion 설정 파일에서 .o 파일이 자동으로 ignore 리스트에 추가되어있다면
위와 같이 a.o와 a.out 파일의 앞에 "?"로 표시되지 않을 것 입니다.)

만약 위와 같은 오브젝트 파일이 수십개가 있다고 생각해보면,
"svn status" 명령을 내릴 때마다, 버전 관리와는 상관없는 오브젝트 파일들을 계속해서 봐야만 합니다.

이럴때 사용하는 것이 svn:ignore 속성입니다.
이 속성의 의미는 여기에 등록된 파일들 및 디렉토리들은 버전관리하지 않는 것이 확실하므로
무시하라는 의미입니다.


그럼 개발환경별로 무시해야될 파일들이 어떤것들이 있는지 알아보죠.

리눅스에서 C 프로그램을 작성한다면 다음과 같은 파일들이 될 것입니다.
  • 오브젝트파일(*.o)
  • 디펜던시 파일(*.d 혹은 .depend)
  • 최종 실행파일

윈도우의 VC6 프로젝트라면 다음과 같습니다.
  • Debug, Release 디렉토리
  • *.aps, *.ncb, *.opt, *.plg, *.clw, *.positions, README.TXT

윈도우의 VS2005 프로젝트(VC++)라면 다음과 같습니다.
  • Debug, Release 디렉토리
  • *.ncb, *.suo, README.TXT 파일들

자! 그럼 이제 실제 속성들을 어떻게 설정하는지를 볼까요.
리눅스의 콘솔이라면 간단합니다.

$ cat ignore.list
*.o
*.d
.depend
*.out
$ svn propset -R svn:ignore -F ignore.list .
혹은 기존에 있던 svn:ignore 속성을 수정하려면
$ svn propedit svn:ignore .

윈도우에서 콘솔을 사용한다면, 도스 창에서 위명령을 써야겠지요.
아니면 TortoiseSVN을 사용하셔도 됩니다.
2008. 5. 5. 20:36

블로그 이미지 : TortoiseSVN의 이미지...

제 블로그의 이미지는 TortoiseSVN의 이미지를 그대로 가져왔습니다.
그만큼 제가 좋아하는 프로그램이고,
개발자라면 반드시 사용해야할 프로그램이라는 생각에서 가져오게 되었습니다.

TortoiseSVN은 버전 컨트롤 시스템의 하나인 Subversion의 윈도우용 Client 입니다.

관심있으신 분들은 홈페이지를 방문해 보시기 바랍니다.

http://tortoisesvn.tigris.org
http://subversion.tigris.org

만약 본인이 개발자이고, 기존에 버전 컨트롤 시스템을 사용해 보신적이 없다면
Subversion과 TortoiseSVN은 좋은 출발점이 될 것입니다.
2008. 5. 5. 19:09

Subversion의 속성(property)들

Subversion을 고급스럽게 사용하기 위해서는 속성(property)을 반드시 알아야만 합니다.
그래서 오늘은 Subversion의 속성(property)에 대해서 얘기해 볼까 합니다.


콘솔에서 다음 명령을 내려보죠..
$ svn propset --help

무언가 메시지들이 출력될 것입니다.


그럼 먼저 어떤 종류의 속성(property)들이 있는지를 먼저 살펴보죠.
Subversion에서 사용되는 속성(property)은 다음과 같은 것들이 있습니다.
(물론 TortoiseSVN의 속성까지 합치면 더 많죠.)
svn:ignore
svn:kerwords
svn:executable
svn:eol-style
svn:mime-type
svn:externals
svn:need-lock


여기서 실제 자주 사용되는 것은 다음 속성들이 아닐까 생각해봅니다.
svn:ignore
svn:eol-style
svn:externals


자 그럼 이제 각 속성들이 의미하는 것이 무엇인지 살펴보도록 하죠.