Daniel J Song's page

prev July 2018 next
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
293031    

S E A R C H

A R C H I V E S
June 2003
July 2003
August 2003
September 2003
October 2003
November 2003
December 2003
January 2004
February 2004
March 2004
April 2004
May 2004
June 2004
July 2004
August 2004
September 2004
October 2004
November 2004
December 2004
January 2005
February 2005
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
January 2007
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
May 2008
June 2008
July 2008
August 2008
September 2008
October 2008
November 2008
December 2008
January 2009
February 2009
March 2009
April 2009
May 2009
June 2009
July 2009
August 2009
September 2009
October 2009
November 2009
December 2009
January 2010
February 2010
March 2010
April 2010
May 2010
June 2010
July 2010
August 2010
September 2010
October 2010
November 2010
December 2010
January 2011
February 2011
March 2011
April 2011
May 2011
June 2011
July 2011
August 2011
September 2011
October 2011
November 2011
December 2011
January 2012
February 2012
March 2012
April 2012
May 2012
June 2012
July 2012
August 2012
September 2012
October 2012
November 2012
December 2012
January 2013
February 2013
March 2013
April 2013
May 2013
June 2013
July 2013
August 2013
September 2013
October 2013
November 2013
December 2013
January 2014
February 2014
March 2014
April 2014
May 2014
June 2014
July 2014
August 2014
September 2014
October 2014
November 2014
December 2014
January 2015
February 2015
March 2015
April 2015
May 2015
June 2015
July 2015
August 2015
September 2015
October 2015
November 2015
December 2015
January 2016
February 2016
March 2016
April 2016
May 2016
June 2016
July 2016
August 2016
September 2016
October 2016
November 2016
December 2016
January 2017
February 2017
March 2017
April 2017
May 2017
June 2017
July 2017
August 2017
September 2017
October 2017
November 2017
December 2017
January 2018
February 2018
March 2018
April 2018
May 2018
June 2018
July 2018

G O T O

L O G I N

CVS 

Pages of CVS Category: wikiX, Stuffs,

  1. 간단한 사용법 프리젠테이션
  2. $..$ 태그
  3. CVS Commit and auto-indent
  4. Binary 파일 추가하기
  5. links
  6. CVS에서 모듈을 공유시키고 싶을 때
  7. linux용 cvs gui 클라이언트

간단한 사용법 프리젠테이션  

$..$ 태그  

원문 : http://bbs.kldp.org/viewtopic.php?t=20754&highlight=cvs

$Id: ... 이게 무슨 키워드일까요?

올려짐: 2003년6월12일 11:40 주제: $Id: ... 이게 무슨 키워드일까요? 프로그램이라 보기엔 좀 뭐한데.. 그렇다고 어디에 질문할 지 모르겠네요.

드라이버 코드를 좀 봤더니 코드:
# linux/drivers/nand/Makefile
#
# $Id: Makefile,v 1.5 2001/09/19 22:39:59 dwmw2 Exp $

이렇게 된 부분이 있더군요,

C 소스에서도 비슷하게 주석문에 싸여 있는 $Id... 부분이 있는데요

이부분이 어떤 의미지요? 컴파일러에서 이 내용을 알아보는 건가요?

 방준영
손님

올려짐: 2003년6월12일 11:56 주제: Re: $Id: ... 이게 무슨 키워드일까요? $...$는 CVS 태그라고 해서 커밋할 때마다 해당 정보가 삽입되는 부분입니다. $Id$의 경우 커밋을 하고 나면 $Id: ntdll.c,v 1.28 2003/01/19 15:39:57 junyoung Exp $처럼 전개가 됩니다. 그외 $Log$나 $Header$, $Date$ 등 여러가지가 있으니 CVS 매뉴얼을 참조하시면 됩니다.

 pynoos
게시판 관리자

올려짐: 2003년6월12일 13:20 주제: 첨언하자면,

static const char * progid = "$Id$";

형태로 작성하여 object code에 static 으로 들어가게 되면, 나중에

ident 라는 명령으로 뽑아 볼 수 있습니다.

ident /bin/csh

와 같은 방법으로 사용하죠.

 dubhe
novice

올려짐: 2003년6월12일 13:34 주제: RCS CVS는 아니고 RCS입니다.

버전관리 체계죠.

CVS에서 RCS를 지원해주는걸로 알고있습니다. CVS가 RCS를 호환한다고 하는게 더 정확한가....

rcs ci co ident명령보시면 됩니다.

(어느 언어의 코드에나 그저 주석처리하는곳에 넣거나 할수 있어서 이식성이 좋습니다.)

 송지석
expert

올려짐: 2003년6월12일 13:57 주제: Re: $Id: ... 이게 무슨 키워드일까요? 방준영 씀: $...$는 CVS 태그라고 해서 커밋할 때마다 해당 정보가 삽입되는 부분입니다. $Id$의 경우 커밋을 하고 나면 $Id: ntdll.c,v 1.28 2003/01/19 15:39:57 junyoung Exp $처럼 전개가 됩니다. 그외 $Log$나 $Header$, $Date$ 등 여러가지가 있으니 CVS 매뉴얼을 참조하시면 됩니다.

질문에 꼬리를 물어서 죄송합니다. 음 그렇다면, 맨 처음 코딩할 때는 $Id$ 라고 써넣고 커밋하면 repository에 $Id: ntdll.c,v 1.28 2003/01/19 15:39:57 junyoung Exp $ 로 저장되고 다음부터는 커밋할 때마다 날짜와 버전이 바뀌어 들어가는 것인가요?

 pynoos
게시판 관리자

올려짐: 2003년6월12일 14:21 주제: 그렇지요...

commit 할 때, CVS repository에도 그렇게 들어가고, local copy도 내용이 바뀌어 들어 오기 때문에,

혹시 vim을 background로 해놓은 상황에서, commit 한뒤 vim으로 돌아오면,

reload 할 것이냐고 물어봅니다.

그러면, undo가 모두 사라지는 뼈아픈 고통이....

또 첨언하자면,

저같은 경우는 /CVSROOT/commitinfo 를 수정하여, indent 라는 (ident 아님) 자동 들여쓰기를 하는데... 이것또한 편리한 기능이죠.

 방준영
손님

올려짐: 2003년6월12일 17:30 주제: pynoos 씀: 혹시 vim을 background로 해놓은 상황에서, commit 한뒤 vim으로 돌아오면,

reload 할 것이냐고 물어봅니다.

그러면, undo가 모두 사라지는 뼈아픈 고통이....

저는 다른 에디터를 쓰는데, reload 순간 착각을 해서 작업 내용을 홀랑 날려버린 경우도 종종 있었습니다. 그러고 나면 그날은 일 다했죠... 위로

 방준영

올려짐: 2003년6월12일 17:36 주제: 그런데 이 CVS 태그의 짜증나는 점은 남의 소스를 수입할 때 원본 소스의 태그가 전부 초기화된다는 점입니다. 수입할 때 태그 확장 안하도록 옵션을 주는 것도 가능하지만 그렇게 되면 제가 붙이는 태그까지 동작을 안하게되는 문제가 있고요.

그와 같은 혼동을 피하기 위해 $NetBSD$, $FreeBSD$처럼 전용 태그를 붙여 쓸 수도 있습니다. 단, 이 기능은 비표준이라 각 OS 버전들마다 설정 방법이 다릅니다. 위로

CVS Commit and auto-indent  


http://bbs.kldp.org/viewtopic.php?t=24058 글과 이어서, CVS를 사용하여 공동 작업할 때, 도움이 되는 설정법에 대해 소개할 까합니다.

http://bbs.kldp.org/viewtopic.php?t=24117 에서 떵개cho 님께서 올리신다고 하였는데, 그래서 안올릴까도 생각해보다가 각자의 작업을 올리면 읽는 사람들에게는 많은 샘플이 생기는 것이므로 더 유익할 것이라 생각하여 올립니다.

  • indent indent 라는 것은 GNU 사이트에서 구할 수 있습니다. gnu에서 나오는 대부분의 source indentation이 이 툴을 이용하여 맞추어집니다. default 설정이 아마 gnu indent guide에 맞게 되어 있는 것으로 알고 있는데요. 상당히 흥미로운 option들이 많이 있습니다.

그리고, 주로 C 언어에 맞게 되어 있어서, C++를 사용할 경우, template이나 public, private 등의 예약어 주위에서 깨지는 경향이 있습니다. C++에 대한 지원이 어느정도 내부적으로 이루어지고 있고 아직 공식적으로 지원한다는 말은 없지만, 비교적 최근 버전의 소스를 보면, C++관련된 option들이 몇개 들어가고 있는 것을 확인할 수 있습니다.

http://yaimma.co.kr/GNU_Source/indent-2.2.6/args.c

코드:
--tab-size8
--use-tabs
--line-length120
--indent-level8
--brace-indent0
--declaration-indentation10
--case-brace-indentation1

--braces-after-struct-decl-line
--struct-brace-indentation0

--dont-cuddle-else

--no-blank-lines-after-commas
--no-blank-lines-after-declarations
--blank-lines-after-procedures

--no-space-after-function-call-names
--no-space-after-parentheses

--continue-at-parentheses
--dont-break-procedure-type

--comment-indentation0
--start-left-side-of-comments
--declaration-comment-column60

--swallow-optional-blank-lines
--c-plus-plus

-T regex_t
-T FILE
-T pair
-T vector
-T set
-T map
-T list
-T string
-T string::size_type
-T StringSet
-T StringSet::iterator
-T StringSet::const_iterator
-T StringVector
-T StringVector::iterator
-T StringVector::const_iterator
-T StringStringMap
-T StringStringMap::iterator
-T StringStringMap::const_iterator
-T iterator
-T const_iterator

회사에서 저희 팀이 사용하는 indent option은 위와 같습니다. 이 옵션으로 cvs가 commit 되면, .c, .h, .cc 에 해당하는 소스에 강제로 indent를 설정하는 예제를 보여드릴까합니다.

  • commitinfo

위의 예제는 사실. $HOME/.indent.pro 에 들어 있는 indent 설정파일이라고 보시면 됩니다. 따라서 원리는, CVSROOT의 commitinfo를 수정하여, commit 되는 파일이 해당 확장자이면, indent에 .indent.pro를 읽도록 설정하는 것으로 구현하면 됩니다.

CVSROOT 설정에 대한 것은 http://bbs.kldp.org/viewtopic.php?t=24058 에서 소개하였으므로, 간단하게 넘어가겠습니다.

CVSROOT에 추가할 script와 파일은

indent.sh .indent.pro

입니다. 그리고 당연히 indent 라는 패키지 아니면, source tar ball을 통한 설치가 선행되어야합니다.

  • checkoutlist 우선 두개의 파일이 $CVSROOT/CVSROOT에 추가되어야하므로,

checkoutlist 를 다음과 같이 추가합니다.

코드:

indent.sh               indentation help tool
.indent.pro             indentation help tool

  • commitinfo

commitinfo 는 다음과 같이 수정합니다.

코드:
DEFAULT $CVSROOT/CVSROOT/indent.sh

  • indent.sh

.indent.pro 는 위와 같은 예로 만드시면 되구요. indent.sh 는

코드:
#!/bin/sh
PATH=$PATH:/usr/local/bin:/usr/bin
ABSDIR=$1
INDENT=indent
HOME=$CVSROOT/CVSROOT
export HOME

dir=$1
shift
for file in $@
do
        if [ -f "$file" ]; then
                case $file in
                *.hxx | *.h | *.cpp| *.cc | *.cxx | *.c)
                        $INDENT ${INDENT_OPT} $file
                        sed -e "s/(  )/()/g" $file > $file.tmp
                        mv $file.tmp $file
                        ;;
                esac
        fi
done

와 같이 하면됩니다. 잠시 스크립트에 주의해야할 부분은, .indent.pro가 $CVSROOT/CVSROOT 디렉토리에 추가되므로, HOME의 위치를 그곳으로 바꾸어 indent가 참조하는 .indent.pro가 제대로 동작하도록 하는 것과, 그리고, commitinfo에서 넘어오는 인자의 순서가 다음과 같다는 것을 염두에 두고, 해석하시면 됩니다.

코드:
indent.sh <module name> <file1> <file2>

와 같이 실행되므로, 처음 인자를 무시하고, 다음 파일부터 case 문에 넣어 비교하면 됩니다.

그리고, sed 문이 들어 있는 것은 indent 옵션중에, 함수 호출시, 인자사이를 띄게 하는 것이 있는데, 이 경우 아무 인자도 없으면, 참 보기 흉하게 됩니다. 이런경우를 모아주는 옵션이 없어서 꽁수를 넣었습니다.


참조하실 만한 예제는

http://cvs.kldp.net/cgi-bin/cvsweb.cgi/CVSROOT/?cvsroot=hserver

입니다.

Binary 파일 추가하기  

 cvs add -kb 파일이름
하시면 추가할 수 있습니다.

links  

CVS http://www.cvshome.org/

Version Management with CVS http://www.cvshome.org/docs/manual/

cvs2cl.pl: CVS-log-message-to-ChangeLog conversion script http://www.red-bean.com/cvs2cl/

CVS Guide http://java.freehosting.co.kr/docs/new/cvs/

Guidelines for the use of CVS http://wiki.kldp.org/wiki.php/CVS/GuideLine

CVS 이야기 http://wiki.kldp.org/wiki.php/DocbookSgml/CVS-KLDP

Chora CVS Viewer http://horde.org/chora/

CVS with multiple repositories http://www.asiaosc.org/article_44.html

Restricting access to viewcvs? http://sourceforge.net/tracker/index.php?func=detail&aid=795368&group_id=18760&atid=218760

CVS에서 모듈을 공유시키고 싶을 때  

어떤 모듈을 가져올 때 특정 하부 모듈을 같이 가져오도록 하려면 다음과 같이 하면 됩니다.
proj_a proj_a &libx
proj_b proj_b &libx
libx libx
이렇게 하면 proj_a를 체크아웃할 때 proj_a 디렉토리 아래에 추가로 libx 디렉토리가 생깁니다.

linux용 cvs gui 클라이언트  

cervisia
KDE의 구성유틸리티중 하나.


Posted by rommance at 2006-08-21 11:35:02 . 5994 hits . source . info . diff . 0.611 sec