2009-06-25 4 views
8

CVS를 사용하여 이분법을 구현하는 스크립트의 경우 현재 체크 아웃의 '타임 스탬프'가 무엇인지 파악하고 싶습니다. 다시 말해, 내가 지점/태그에 있다면, 그 지점/태그에 커밋 된 마지막 타임 스탬프를 알고 싶습니다. 내가 머리에 있다면, 나는 머리에 마지막 타임 스탬프를 알고 싶다.CVS 체크 아웃에서 최신 커밋 날짜를 프로그래밍 방식으로 얻는 방법

cvs 체크 아웃이 다른 타임 스탬프/리비전/...에서 다른 파일을 가질 수 있기 때문에 이것이 100 % 보증되지는 않지만, 대부분의 경우 가장 정확한 해결책은 저에게 좋습니다.

순진, 내가

cvs log -N | grep ^date: | sort | tail -n 1 | cut -d\; -f1 

이 그것을 할 거라고 생각하지만, 그것은 모든 지점/태그, 역사를 커밋 전체를 통과 밝혀졌습니다.

답변

2

지점에있는 CVS 파일의 타임 스탬프가 다른 경우 지점에 대한 마지막 시간 정보를 얻기 위해 파일 하나를 선택하는 것이 정확하지 않습니다.

하지만 자주 변경되는 파일이 있으면 더 좋아질 수 있습니다. 예를 들어, 저의 한 곳에서, 모든 버전 이동 (사소한 또는 장조)에서 업데이트되는 version.h 파일이 있습니다. 현재 버전의 시간 정보로 사용할 수 있습니다 (다시 말하면 브랜치의 모든 파일이 정확하지는 않지만 최종 결과는 나타납니다). 당신은 당신에게 수익 값을 줄 수있는 파일을 알고있는 경우

그래서,

cvs log path/to/version.h -r branch/tag | grep ^date | sort | tail -1 

당신에게 해당 파일에 대한 마지막 타임 스탬프를 제공 할 것입니다.


이 같은베이스의 전체 파일 세트를 열거 할 수 있다면,

find /base/dir -type f | grep -v CVS > files.txt 

, 당신은 수있는 CVS는 각 파일에 대해 위의 명령 루프,

rm -f allFiles.txt 
for f in $(<files.txt); do cvs log $f ...etc... tail -1 >> allFiles.txt 
sort allFiles.txt | tail -1 

마지막 라인 정렬의 가장 최근 커밋에 대한 정확한 날짜를 제공합니다.
아아, 당신은 (또한 좀 더 쿵푸 수행 할 수 있습니다) 파일 이름

+0

나는 그것이 대략 올 수있는 유일한 것, 대략. 결국, 나는 하나의 CVS 로그를 작성하고 모든 파일에 대해 분석했다. 각 파일에서이 작업을 수행하면 속도가 느려질 수 있습니다. –

+0

끈적 거리는 날짜를 지원하지 않는다고 생각합니다. 즉, 선택한 날짜 대신 가장 최근의 날짜를 제공합니다. – Penz

0

(닉에 의해 주어진 답을 기반으로 구축) 파일이 변경된 최신 시간을 얻을 수있는 빠른 방법을받지 않습니다 :

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date 

만 날짜를 얻고 싶은 경우에, 사용 :

cvs log -bd `date +%Y-%m-%d` ChangeLog | grep ^date | sed 's/date: \([^ ]*\).*/\1/' 

이 당신이 단지에 관심 CVS를 말할 수있는 기본 분기 및 -d를 사용하는 -b 플래그를 사용 주어진 시간까지 최신 버전. ``표현식은 현재 날짜를 한도로 전달하여 가장 최근의 커밋을 제공합니다.

gnuplot CVS 저장소에서 -d 플래그를 사용하면 실행 시간이 ~ 4 초에서 ~ 1.5 초로 단축됩니다.

관련 문제