2011-03-16 102 views
0

我只需要從CVS獲取最近更改的列表並解析它們。分析CVS歷史輸出

示例: CVS用戶「Lollerskates」在包含空格的文件中籤入。但空格是分隔符!然後「文件夾」在一個文件夾中以文件夾名稱中的空格進行檢查。

% cvs history -c -a -D 2011-03-14 
A 2011-03-15 00:17 +0000 jschmoe  1.1 CoolCode.java     Awesome/Source/Java/src/com/widgets/foo/ambiguous/abstraction == <remote> 
M 2011-03-15 00:17 +0000 sumbody  1.2 MoreCoolCode.java    Awesome/Source/Java/src/com/widgets/foo/ambiguous/abstraction == <remote> 
A 2011-03-15 00:17 +0000 lollerskates 1.123 This File Name Has Spaces.html Awesome/Source/Java/src/com/widgets/foo/ambiguous/abstraction == <remote> 
A 2011-03-15 00:17 +0000 jschmoe  1.1 MyAwesomeProject.java   Awesome/Source/Java/src/com/widgets/foo/ambiguous/abstraction == <remote> 
M 2011-03-15 00:17 +0000 skates  1.5 BlahBlah.java     Awesome/Source/Java/src/com/widgets/foo/content/block type/cart == <remote> 

什麼是解析這個可靠方式?

另外,是否有一個不同的CVS命令更容易解析的結果?

回答

1

此正則表達式捕獲所有這些:

\w \d{4}-\d{2}-\d{2} \d{2}:\d{2} \+\d{4} (\w+)\s+(\d+.\d+)\s+([\w\s]+\.\w+)\s+([\w\s/]+)== \<remote\> 

用戶是在組#1,文件名在組#3和路徑在#4組。

+0

正常情況下,可能會有文件名沒有圓點和目錄路徑。所以文件名和目錄元組可以是**文件名模塊名/ bla.bla **。 – 2011-03-16 23:17:54

+0

是的,這是我用這個正則表達式遇到的問題之一。我修改了它以便與我的特定應用程序一起使用,並添加了對點和破折號的支持:(?P \ d {4} - \ d {2} - \ d {2})(? (?P

0

在這種情況下大概cut是更好的方法?如果字段長度固定...

+0

對於給定的集合,是的,這些字段的長度都是相同的。訣竅是確定這個長度是多少。 – ElephantHunter 2011-03-16 23:47:43

+0

@ElephantHunter:可以通過分析模塊部分開始處的第一個非空格的位置來完成。如果你知道模塊名稱,它不是100%可靠的,但更容易。否則統計分析必須給出答案。然後它很容易:) – 2011-03-17 08:54:26

+0

@ElephantHunter:在這種輸出一般情況下無法解決...唉!所以一切都應該是更多或更骯髒。 – 2011-03-17 09:05:25