2010-08-12 49 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代表格式的任何删除,等同和添加的数组。删除和添加是唯一的行 - 使用散列表将数据转换回这些行。