Unix/Linux/Mac,  컴퓨터와 인터넷

CVS의 소스 변경시각의 출력문제 해결

http://www.cvshome.org에서 받을 수 있는 Brian Berliner의 CVS는 오픈 소스 CVS로서 많은 OS에서 사용할 수 있습니다.

회사에서 프로젝트용으로 CVS 서버를 운영하고 있는데 이것도 Brian Berliner의 CVS를 사용합니다. 그런데 날짜와 시각이 GMT 기준으로만 출력이 되고 한국 시각(KST)로는 출력이 안 되어서 소스 변경한 시각을 머리로 계산해야 해서 불편함이 많았습니다. 처음에는 GMT 시간인 줄도 몰랐죠.

그래서 cvs-1.11.17 버전을 받아서 소스를 변경하였습니다. CVS 서버가 운영되는 시스템에만 변경 사항을 적용하면 됩니다. CVS는 하단의 통신 프로그램으로 RSH(rsh,rcmd,rlogin)을 사용하기 관계로 클라이언트 프로그램은 서버에 RSH로 연결하여 cvs 프로그램을 실행하여 그대로 화면에 출력해주는 작업만 수행합니다. 그러므로 클라이언트는 변경하지 않습니다. 그리고 다음은 cvs log 명령에 대해서 GMT 시각을 현재 timezone에 맞는 지역 시각으로 변경하여 출력하는 것 뿐이므로 CVS에 저장된 예전 소스 파일들에 대해서 고민할 필요가 없습니다.

다음은 변경한 소스와 원본 소스를 diff한 결과입니다.

[grape]/data/terzeron/work/cvs-1.11.17> diff src/log.c src/log.c.old
1588,1592d1587
< #ifdef HAVE_TZSET < struct tm tm; < struct tm *tm_p = NULL; < time_t t; < #endif 1609d1603 < #ifndef HAVE_TZSET 1612,1619d1605 < #else < (void) sscanf (ver->date, SDATEFORM, &tm.tm_year, &tm.tm_mon, &tm.tm_mday,
< &tm.tm_hour, &tm.tm_min, &tm.tm_sec); < tm.tm_mon -= 1; < tm.tm_year -= 1900; < #endif < < #ifndef HAVE_TZSET 1622,1624d1607 < #endif < < #ifndef HAVE_TZSET 1627,1633d1609 < #else < //setlocale (LC_TIME, "ko"); < tzset (); < t = mktime(&tm) - timezone; < tm_p = localtime(&t); < strftime (buf, sizeof (buf), "%Y/%m/%d %H:%M:%S %Z", tm_p); < #endif

댓글 한 개

답글 남기기