= CVSNotify Project Home Page = == 설치 == === 구하기 === http://kldp.net/projects/cvsnotify/ 위 프로젝트 홈페이지에서 파일 릴리즈를 구할 수 있습니다. 다운로드 링크는 http://kldp.net/download.php/1224/cvsnotify-1.1.0.tar.gz 와 같습니다. http://cvsnotify.kldp.net/ 위 홈페이지에서 최종 릴리즈에 대한 기능 설명과 화면 스냅샷을 볼 수 있습니다. === 압축 풀기 === 받은 `cvsnotify-1.1.0.tar.gz` 를 다음과 같이 풉니다. {{{ $ gunzip -c cvsnotify-1.1.0.tar.gz | tar xvf - }}} gnu tar를 쓴다면, 다음과 같이 풀 수 있습니다. {{{ $ tar xvzf cvsnotify-1.1.0.tar.gz }}} === 설치 === 수동으로 하나씩 설치하고자하는 분은 아래 6. 수동설치/제거로 이동하십시오. 설치에 앞서, 설치하고자하는 CVS Repository를 의미하는 환경변수 CVSROOT 를 먼저 지정해야합니다. {{{ $ export CVSROOT $ CVSROOT=/work/cvsrepository }}} 또는, 원격지 설치모드에서는 {{{ $ export CVSROOT $ CVSROOT=:pserver:yourid@hostname:/work/cvsrepository }}} 와 같이 할 수 있습니다. 그리고, CVSROOT 접근을 매번 암호를 묻는 방식으로 하는 경우는 상당히 많은 암호를 넣어야하므로, 참고하셔서 한번의 암호를 입력하는 경우로 바꿔주시는것도 좋습니다. 다음 명령들은 `cvsnotify-1.1.0` 디렉토리에서 하시기 바랍니다. {{{ $ make install }}} === 제거 === 제거하는 방법은 동일하게 CVSROOT 환경변수를 세팅하고, {{{ $ make uninstall }}} 입니다. === script 오류 대처법 === 갑자기 script 오류가 나며 동작하지 않을 때, 대처방법. {{{ $ make clean-checkout $ cd CVSROOT $ vi commitinfo }}} DEFAULT 란을 주석처리합니다. {{{ $ cvs ci }}} 아무 로그 메시지나 넣고 에디터를 종료합니다. === 수동설치/제거 === 일단 수동으로 설치 제거하기위해서는 CVSROOT 라는 모듈을 받아와야 합니다. 이 모듈은 전반적인 CVS Repository의 행동에 대한 내용이 들어 있습니다. {{{ $ cvs co CVSROOT $ cd CVSROOT $ cp /.indent.pro . $ cp /cvsnotify-* . $ cp /cvsnotify.cf.sample . $ cp /cvsnotify.pm . $ mv cvsnotify.cf.sample cvsnotify.cf }}} 수동으로 설치/제거하는 것은 `checkoutlist`의 원리를 알고 잘 이용하는 것에 있습니다. CVS Repository에 저장되는 것은 버전 컨트롤 파일인 파일 끝이 "`,v`"로 끝나는 것들만 오게 되어 있습니다. 하지만, 여기서 제공하는 스크립트들은 CVS Repository상에 그대로 존재해야만 합니다. 이를 위해서, {{{ $ vi checkoutlist .indent.pro .indent.pro checkout failure cvsnotify.pm cvsnotify.pm checkout failure cvsnotify.cf cvsnotify.cf checkout failure cvsnotify-lang-ko.tpl cvsnotify-lang-ko.tpl checkout failure cvsnotify-lang-en.tpl cvsnotify-lang-en.tpl checkout failure cvsnotify-filenamechk.pl cvsnotify-commitinfo.pl checkout failure cvsnotify-commitinfo.pl cvsnotify-commitinfo.pl checkout failure cvsnotify-loginfo.pl cvsnotify-loginfo.pl checkout failure cvsnotify-indent.pl cvsnotify-indent.pl checkout failure cvsnotify-doxygenchk.pl cvsnotify-doxygenchk.pl checkout failure cvsnotify-logsend.pl cvsnotify-logsend.pl checkout failure cvsnotify-contentsend.pl cvsnotify-contentsend.pl checkout failure cvsnotify-lock.pl cvsnotify-lock.pl checkout failure }}} 위 내용을 넣습니다. 그리고, `commitinfo`, `logininfo` 파일에 각각 다음과 같이 넣습니다. {{{ $ vi commitinfo CVSROOT echo Skip.. DEFAULT $CVSROOT/CVSROOT/cvsnotify-commitinfo.pl }}} {{{ $ vi loginfo CVSROOT echo Skip.. DEFAULT $CVSROOT/CVSROOT/cvsnotify-loginfo.pl %{sVv} }}} 위와 같이 해야만, commit, log 남길 경우에 자동으로 불려지게 됩니다. 모든 내용을 넣고서 {{{ $ cvs up }}} 하면 "?" 로 나오는 파일들이 있습니다. 이 모든 파일들을 CVSROOT모듈에 추가해야합니다. {{{ $ cvs add cvsnotify* $ cvs add .indent.pro }}} 그리고, 반영 하는 것이죠. {{{ $ cvs ci }}} 이상으로 설치를 마칩니다. 기능을 일시적으로 중지 시키려면, `commitinfo`, `loginfo` 파일만 원래대로 돌려놓으면 됩니다. 완전히 없애려면, `checkoutlist` 까지 수정하세요. == 실전 응용 == 다음은 CVSROOT 모듈안에 `cvsnotify.cf` 혹은 각 모듈의 해당 디렉토리안의 CVSADMIN 파일을 수정하는 예제입니다. === 로그, 내용 전송 === '''Q.''' 저는 silvermoon 이라는 모듈에서 작업하고 있으며, 이 silvermoon의 로그를 dev@mymail.com 라는 주소로 보내고 싶습니다. 또한 silvermoon-doc 이라는 모듈에는 .txt 파일과 .doc 파일이 들어 있습니다. 이들의 변경 사항을 메일로 알려주소 싶습니다. '''A.''' `CVSROOT/cvsnotify.cf` 파일을 다음과 같이 수정하신뒤 `cvs commit` 하세요. {{{ # silvermoon이 들어 있는 모든 모듈에 대해 dev@mymail.com 로 로그를 전송합니다. log_notify = /silvermoon/ dev@mymail.com }}} log_notify는 `cvsnotify.cf`에서 쓰이며, 현재 작업중인 디렉토리가 평가됩니다. 예를 들어 현재 `silvermoon/src/main.c` 라는 파일을 수정할 경우, `silvermoon/src` 라는 디렉토리명이 정규식에 참여하게 됩니다. `silvermoon-doc/CVSADMIN` 이라는 파일을 하나 만드시고 Add 하시기 바랍니다. 내용은 다음과 같습니다. {{{ diff_notify = /.*txt$/ dev@mymail.com attach_notify = /.*doc$/ dev@mymail.com }}} diff_notify, attach_notify 는 단지 파일명만 평가하기 때문에, `cvsnotify.cf`에 두면 commit되는 모든 파일에 대해 유효하게 됩니다. 따라서 특정 디렉토리안에서 일어나는 행동에대한 notify를 원한다면 지역 configuration인 CVSADMIN을 사용하는게 좋습니다. === 로그 전송 내용 편집 === '''Q.''' 저희 팀에서 CVS를 사용하는 모든 사람들에게 긍지를 넣어주고자, 메시지 안에 팀 목표등을 넣고 싶습니다. '''A.''' cvsnotify는 skin을 제공하므로, 다른 나라 언어로 포팅하거나 다른 메시지를 넣을 수 있습니다. `cvsnotify.cf`의 내용중, {{{ template = cvsnotify-lang-ko.tpl }}} 이 지정하는 `cvsnotify-lang-ko.tpl` 을 적절하게 수정하시면 됩니다. 팀 로고등을 넣을 수 있겠지요. === 이름 규칙 === '''Q.''' 회의록을 파일로 작성하고 싶은데, 항상 앞에 날짜를 넣도록 제한하고 싶습니다. 다른 이름으로는 못들어오게 할 수 없을까요? 그리고, 날짜외에 Review라고 시작하는 파일명은 월에 한 번씩 사용하므로 허용하고 싶습니다. '''A.''' `cvsnotify.cf` 에 다음과 같이 들어 있는지 확인하십시오. {{{ commitinfo = name }}} 원하는 모듈의 디렉토리에 지역 설정파일(CVSADMIN)을 추가하고 다음과 같이 넣습니다. {{{ file_name_permit = /^\d{8}_.*/ 반드시 YYYYMMDD_ 형식으로 시작해야합니다. file_name_permit = /^Review_.*/ Review_ 형식으로 월간보고용 파일입니다. }}} ---- '''Q.''' 대문자로 된 파일명은 올 수 없게 하고 싶습니다. 그리고, `README`, `Makefile`은 허용하고 싶습니다. '''A.''' 해당 디렉토리내에 CVSADMIN 파일을 두고, 다음과 같이 넣어 줍니다. {{{ file_name_permit = /^[a-z]+$/ 파일명은 소문자만 넣으십시오 file_name_permit = /README/ README가 들어간 파일은 괜찮습니다. file_name_permit = /Makefile/ Makefile은 괜찮습니다. }}} `file_name_permit` 은 반드시 CVSADMIN 에만 와야합니다. `file_name_permit`이 없으면 모든 파일명을 허용하며, 있으면 일단 모두 제한하고, 허용된 정규식을 평가해봅니다. 만약 이들중에 하나라도 걸리지 않으면 맨 뒤에 기술한 메시지와 함께 에러를 출력하고 commit을 실패로 만듭니다. === indent 연동 === '''Q.''' 우리팀은 들여쓰기 맞추는 것을 통일하고 싶은데, 말을 듣지 않습니다. 강제로 하고 싶습니다. '''A.''' indent를 서버에 설치해야합니다. 그리고, indent의 option을 잘 선택해야합니다. 선택된 option들은 `.indent.pro` 라는 이름으로 CVSROOT에 두어야합니다. 배포되는 `.indent.pro`는 무난한 형태의 샘플이므로 참고하시고 option을 바꾸시기 바랍니다. 그리고, 적당한 `cvsnotify.cf`의 변수를 확인하십시오. {{{ commitinfo = indent indent_ext = h hxx c cc C cxx }}} 확장자가 `indent_ext`에 있는 것들은 모든 파일들은 강제로 맞춰지게 됩니다. 기능을 사용하고 싶지 않을 경우 `commitinfo = indent`를 주석처리하세요. ---- CategoryProject