적용 패키지 작성을 위해 수정된 파일 목록을 추출 할 방법을 찾아 보기로 했다.
업무 때문에 소스 관리를 CVS 로 하고 있다. CVS의 단점은 개별 파일이력은 확인 할 수 있는데,
수정된 파일 목록을 뽑기가 쉽지 않다는 것이다.
구글링을 해보니 CVS에서 Commit 시점에 뭔가 처리할 수 있다는 것을 알았다.
먼저, CVS 서버에 접속해서 저장소의 CVSROOT 디렉토리를 보자
-rwxrwxr-- 1 cvs cvs 544 4월 22 09:23 checkoutlist
-rwxrwxr-- 1 cvs cvs 694 3월 21 2009 checkoutlist,v
-rwxrwxr-- 1 cvs cvs 882 4월 26 16:03 commitinfo
-rwxrwxr-- 1 cvs cvs 959 3월 21 2009 commitinfo,v
-rwxrwxr-- 1 cvs cvs 993 3월 21 2009 config
-rwxrwxr-- 1 cvs cvs 1192 3월 21 2009 config,v
-rwxrwxr-- 1 cvs cvs 602 2월 8 16:32 cvswrappers
-rwxrwxr-- 1 cvs cvs 801 3월 21 2009 cvswrappers,v
-rwxrwxr-- 1 cvs cvs 1025 3월 21 2009 editinfo
-rwxrwxr-- 1 cvs cvs 1224 3월 21 2009 editinfo,v
-rwxrwxr-- 1 cvs cvs 292081967 4월 29 18:14 history
-rwxrwxr-- 1 cvs cvs 1245 4월 21 11:32 loginfo
-rwxrwxr-- 1 cvs cvs 1367 3월 21 2009 loginfo,v
-rwxrwxr-- 1 cvs cvs 1151 3월 21 2009 modules
-rwxrwxr-- 1 cvs cvs 1350 3월 21 2009 modules,v
-rwxrwxr-- 1 cvs cvs 564 3월 21 2009 notify
-rwxrwxr-- 1 cvs cvs 763 3월 21 2009 notify,v
-rwxrwxr-- 1 cvs cvs 640 4월 25 12:43 passwd
-rwxrwxr-- 1 cvs cvs 649 3월 21 2009 rcsinfo
-rwxrwxr-- 1 cvs cvs 848 3월 21 2009 rcsinfo,v
-rwxrwxr-- 1 cvs cvs 879 3월 21 2009 taginfo
-rwxrwxr-- 1 cvs cvs 1078 3월 21 2009 taginfo,v
-rwxrwxrw- 1 cvs cvs 187 11월 10 17:15 val-tags
-rwxrwxr-- 1 cvs cvs 1026 3월 21 2009 verifymsg
-rwxrwxr-- 1 cvs cvs 1225 3월 21 2009 verifymsg,v
위와 같은 파일들을 볼 수 있는데..
여기서 commitinfo 란 파일이 CVS에서 Commit 하기 바로전에 실행되는 파일이다.
방향은 정해졌다.
작업 구성은 아래와 같은 순서로 하기로 했다.
1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다.
-> CVSROOT/commitinfo에 등록할 쉘 스크립트를 작성.
2. 저장된 DB를 조회할 간단한 WEB Page 제작
-> 평소 관심을 갖고 있던, jQuery를 이용.
[ 1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다 ]
commitinfo 파일에 아래와 같이 내용을 추가 한다.
$ vi CVSROOT/commitinfo
ALL /home/cvs/myproject/CVSROOT/cvscommitlog.sh
DB에 테이블을 생성 한다.
CREATE TABLE CVS_COMMIT ( SEQ NUMBER(10) NOT NULL, USERID VARCHAR2(20) NOT NULL, REG_DATE DATE DEFAULT SYSDATE, PROJECT VARCHAR2(50) NOT NULL, FILENAME VARCHAR2(500) NOT NULL );* index는 REG_DATE, TO_CHAR(reg_date, 'YYYY/MM/DDHH24:MI'), USERID, PROJECT 를 걸었다.
commitinfo 파일이 실행할 쉘스크립트를 작성한다.
#!/bin/sh
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_OWNER=oracle
export LANG=c
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib;
DATE=`date "+%Y-%m-%d %H:%M:%S"`
DT=`date "+%Y%m%d"`
LOG_FILE="/home/cvs/cvs_log/commit.$DT.log"
DIR=$1
USER=$USER
PROJECT=`echo $DIR | cut -d/ -f4`
#(echo ""; id;) >> $LOG_FILE
shift
for file in $*
do
echo "$PROJECT, $USER, $DATE, $DIR/$file" >> $LOG_FILE
result=`$ORACLE_HOME/bin/sqlplus oracle_user/oracle_pwd@oracledb <<EOF
INSERT INTO CVS_COMMIT
VALUES ( (SELECT NVL(MAX(SEQ), 0) +1 FROM CVS_COMMIT),
'$USER', TO_DATE('$DATE', 'YYYY-MM-DD hh24:mi:ss'),
'$PROJECT', '$DIR/$file');
COMMIT;
EOF
`
done
[ 2. 저장된 DB를 조회할 간단한 WEB Page 제작 ]
jsp 파일 하나와 html파일 하나로 이루어졌고, jQuery와 JSON을 이용 했다.
DATE Picker는 jQuery Plugin 중에 하나를 이용했다.
html 내용 보기
jsp 내용 보기


