'svn'에 해당되는 글 1건

  1. 2017.01.04 SVN 커밋 로그 검사

유지보수 관리를 위해 SVN의 커밋 로그 포맷을 정하여 사용 중이었다.

모두 잘지켜주었으면 좋겠지만 개발에 열정을 모두 쏟아 부은 결과(?) 커밋 로그를 대충 써버리는 사태에 당도하였다.

물론 약속을 잘지키면 이런 수고를 덜할 수 있겠으나 그러하지 못하였다.

그래서 대책을 강구하던 중에 hook 기능이 있다는 것을 알았다.


svn 저장소를 생성하게 되면 저장소의 디렉토리 구조는 다음과 같다.

$ ls

README.txt  conf  dav  db  format  hooks  locks


hooks에 들어가게 되면 상황에 맞는 템플릿 파일들이 있다.

$ cd hooks

$ ls

post-commit  post-commit.tmpl  post-lock.tmpl  post-revprop-change.tmpl  post-unlock.tmpl  pre-commit.tmpl  pre-lock.tmpl  pre-revprop-change.tmpl

pre-unlock.tmpl  start-commit.tmpl


커밋을 하고자 할 때 로그를 검사해야하므로 pre-commit.tmpl을 사용하도록 하겠다.


$ cp -rp pre-commit-tmpl pre-commit

$ vi pre-commit

#!/bin/sh


REPOS="$1"

TXN="$2"


# Make sure that the log message contains some text.

SVNLOOKOK=1

SVNLOOK=/usr/bin/svnlook

$SVNLOOK log -t "$TXN" "$REPOS" | \

grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0

if [ $SVNLOOKOK = 0 ]; then

    echo "Empty log messages are not allowed. Please provide a proper log message." >&2

    exit 1

fi


# Comments should have more than 7 "[" characters.

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "\[" | wc -l)

if [ "$LOGMSG" -lt 7 ]; then

    echo -e "Please provide a meaningful comment when committing changes." 1>&2

    exit 1

fi


# Comments should have more than 7 "]" characters.

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "\]" | wc -l)

if [ "$LOGMSG" -lt 7 ]; then

    echo -e "Please provide a meaningful comment when committing changes." 1>&2

    exit 1

fi


# All checks passed, so allow the commit.

exit 0


저장하고 나온 후 실행퍼미션을 부여해준다.

$ chmod +x pre-commit


부연 설명을 하자면 첫번 째 검사는 로그메세지를 포함하는지 검사하는 것이고,

두 번째와 세 번째 검사는 "[", "]"를 포함하는 라인의 개수가 7개보다 작으면 커밋을 실패하도록 한 것이다.

한글 단어를 포함하는지 검사 하고자 하였으나 인코딩이 기본 UTF-8이 아니기 때문에 에러가 발생한다.

svn 버전 1.8부터 conf에서 파일의 환경설정을 하도록 하는 기능이 있다고 하나 사용중인 버전이 낮기 때문에 이정도에서 적용하였다.


쉘이외에도 파이썬, php 등 여러가지 언어를 지원하므로 상황에 맞게 사용하면 된다.

'형상관리 > VCS' 카테고리의 다른 글

Git 사용중 Not a git repository 에러  (0) 2017.01.09
Posted by dcmru
,