유지보수 관리를 위해 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 |
---|