2010-08-12 3 views
3

Существуют ли какие-либо инструменты, которые могут выполнять заданные операции (объединение, пересечение, разность и т. Д.) На diffs?Выполнение операций набора на diffs?

Например, если у меня есть два отличия, которые перекрываются (т. Е. Содержат ханки с одинаковыми изменениями), я хотел бы иметь возможность делать такие вещи, как «получить все куски, которые находятся только в одном разложении» или « получить все куски, которые являются общими для обоих различий ».

Например, если два дифференциалы A и B:

 
$ 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 

я чаще всего хочу это когда Я делаю анализ кода (например, потому что я рассмотрел дифференциалы A и C, так что я хотел бы видеть изменения A..D - A - C).

ответ

1

Я думаю, вы могли бы это сделать, используя diff-match-patch (dmp), чтобы различать разницы. Используйте функцию diff_linesToChars, как описано в разделе mailing list, чтобы предварительно обработать строки каждого diff как представления символов и получить обратно хеш-таблицу символов в строки. Затем передайте эти представления char в dmp. Результатом будет любой массив делеций, равенства и дополнений в репрезентативном формате символов. Удаления и добавления являются уникальными строками - используйте хеш-таблицу для преобразования данных обратно в эти строки.

Смежные вопросы