2010-08-12 45 views
3

是否有任何工具可以對diff進行設置操作(聯合,交集,差異等)?例如,如果我有兩個重疊的重疊(即包含具有相同更改的區塊),我希望能夠執行諸如「獲取僅在一個區別中的所有區塊」或「獲取這兩種差異通用的所有宏塊「。對差異進行設置操作?

例如,給出的兩個差異列表AB

 
$ cat A.diff 
@@ ... @@ 
+ foo 
- bar 
@@ ... @@ 
+ baz 
$ cat B.diff 
@@ ... @@ 
+ foo 
- bar 
@@ ... @@ 
+ bam 

有一個問題我想能夠看到的一件事是:

 
$ diff_symetric_difference A.diff B.diff 
@@ ... @@ 
+ baz 
@@ ... @@ 
+ bam 
$ diff_subtract A.diff B.diff 
@@ ... @@ 
+ baz 

我經常想這個時我正在做代碼評論(例如,因爲我已審覈差異AC,所以我希望看到更改A..D-A-C)。

回答

1

我想你可以使用diff-match-patch(dmp)來完成這個比較差異。使用中描述的函數mailing list將每個diff的行預處理爲char表示,並接收一個chars的散列表作爲行。然後將這些char表達式傳遞給dmp。輸出將是char代表格式的任何刪除,等同和添加的數組。刪除和添加是唯一的行 - 使用散列表將數據轉換回這些行。