diff: Optimize single line edits

If the header and trailer are identical up to a single line on both
sides, return that REPLACE edit as the only result.  No algorithm can
break down a REPLACE with height of 1.

Change-Id: I483c40e8790cc3e8b322ef6dfce2299491fd0ac7
This commit is contained in:
Shawn Pearce 2014-04-18 09:05:05 -07:00
parent 6de12836d7
commit cbc7c5c03f
2 changed files with 7 additions and 1 deletions

View File

@ -114,6 +114,9 @@ public <S extends Sequence> EditList diff(
return EditList.singleton(region);
case REPLACE: {
if (region.getLengthA() == 1 && region.getLengthB() == 1)
return EditList.singleton(region);
SubsequenceComparator<S> cs = new SubsequenceComparator<S>(cmp);
Subsequence<S> as = Subsequence.a(a, region);
Subsequence<S> bs = Subsequence.b(b, region);

View File

@ -192,7 +192,10 @@ private void diff(Edit r) {
break;
case REPLACE:
diffReplace(r);
if (r.getLengthA() == 1 && r.getLengthB() == 1)
edits.add(r);
else
diffReplace(r);
break;
case EMPTY: