2009-06-25 49 views
8

對於我正在使用CVS實現二等分的腳本,我想弄清楚當前結帳的'時間戳記'。換句話說,如果我在分支/標籤上,我想知道最後一個時間戳是否有某個分支/標籤被提交。如果我在頭上,我想知道最後的時間戳。如何以編程方式在CVS結賬中獲取最新提交日期

我知道這不是100%保證,因爲CVS檢出可以在不同的時間戳/修訂版/ ...有不同的文件,但在我看來,大多數情況下正確的解決方案是正確的。

天真,我以爲

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日誌,並解析了所有文件。在每個文件上做這件事情都會很慢。 – 2009-06-28 12:03:52

0

一個更快的方式來獲取文件被更改的最新時間(它建立在nik給出的答案上)是:

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

如果你想獲得只有日期,用途:

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

它使用它使用默認分支和-d它允許你告訴CVS你只關心-b標誌最新版本,直到特定時間。 ``表達式然後傳遞當前日期作爲限制,給你最近的提交。

在gnuplot CVS存儲庫上,使用-d標誌將執行時間從〜4s減少到〜1.5s。