'timestamp'에 해당되는 글 1건

  1. 2009.12.08 Mercurial 1.4.1 - 1.5.1 timestamp patch by movsd

Mercurial로의 이전을 염두에 두고 얼마동안 이리저리 실험을 해보았다. CVS에서 주로 사용하던 것들은 다 지원이 된다는 것에 일단 이전에 긍정적이다. 그런데 결정적으로 새 작업디렉토리를 만들때에 파일의 날짜가 항상 "지금"의 날짜와 시간으로 정해진다는 것에 적응이 되지 않는다. hg clonecvs co같이 쓰려고 하는 자세의 문제일 수도 있다. 메일링 리스트와 웹을 뒤져봐도, 기존의 timestamp에 관한 질문/기능신청에 대한 대답은, DVCS를 CVS처럼 쓰려고 하는게 잘못이라는 얘기들 뿐이다.

혹자는 Mercurial 위키에 소개된 timestamp extension을 쓰면 되지 않냐고 하겠지만, 코드를 읽어보니 작동방식이 좀 깔끔하지 못하다. 게다가 내가 원하는 파일 시간은 임의의 시간이 아니라, 마지막으로 파일을 변경하고 commit한 시간이므로 이 extension은 나에게는 별 도움이 되지 않는다. 어쨌거나, CVS에서 넘어오는 사용자를 위해 keyword를 쓰게끔 도와주면서, timestamp 하나 CVS처럼 찍어주는 것은 크게 어렵지 않을텐데 하는 생각이다. (물론, 나도 시간이 흘러 DVCS에 익숙해지면 이런 패치를 쓸데없는 짓이라고 할지도 모른다.)

이 패치의 목표는, 새로 생성되는 파일의 시간을 관련된 마지막 commit시간으로 지정하도록 하는 것이다. 새로 생성되는 파일이라 함은 hg archive로 생성되는 파일과, hg update를 실행했을때 작업디렉토리에 없는 파일(보통, 다른 사람이 추가한 파일이나, hg clone을 실행할때 새로 생성되는 작업디렉토리의 파일들)을 말한다. 이 시간 정보를 어떻게 읽어올 지는 keyword extension에 이미 나와있다. 그것과 os.utime()만 조합하면 문제는 간단히 해결된다. 그 간단한 패치는 밑에서 받을 수 있다. 패치는 몇일전에 나온 1.4.1버전을 대상으로 만들었다. (2010년 초하루에 나온 1.4.2버전과 1.4.3버전에도 깨끗하게 적용된다. 1.5버전에 해당하는 패치는 아래의 다운로드 링크를 참조.)

명령행 요약

tar xzf .../mercurial-1.4.1.tar.gz
cd mercurial-1.4.1
patch -p0 -b < .../timestamp.patch
python setup.py build
python setup.py install

패치를 읽어보면 금방 알겠지만, 이런 단순한 기능을 제작자들이 몰라서 또는 어려워서 안 넣었을 것 같지는 않다. 또, 없으면 안되는 기능이었다면 그 수많은 사용자들중에 누군가가 이미 그 방법을 알아내서 공개했었을 것이다. 그러므로, CVS로부터 넘어오는 사용자가 아니면 이 패치의 유용성은 제한될 것이다.

패치 파일

1.4.x용 패치
1.5.x용 패치
Posted by movsd
,