Skip to content
Snippets Groups Projects
Commit 390df423 authored by Astor Bizard's avatar Astor Bizard :dog2:
Browse files

Fixed diff computation algorithm (it was giving incorrect values).

parent e922d8d2
No related branches found
No related tags found
No related merge requests found
......@@ -432,6 +432,7 @@ class vpl_diff {
while ($i1 < $n1 && $i2 < $n2 && $line1{$i1} == $line2{$i2}) {
$i1++;
$i2++;
$done[$i1][$i2] = true;
}
if ($i1 == $n1 && $i2 == $n2) {
......@@ -440,7 +441,7 @@ class vpl_diff {
}
// Character addition in line1.
if ($i1 < $n1) {
if ($i1 < $n1 && !isset($done[$i1 + 1][$i2])) {
$z1 = new stdClass();
$z1->i1 = $i1 + 1;
$z1->i2 = $i2;
......@@ -449,7 +450,7 @@ class vpl_diff {
}
// Character addition in line2.
if ($i2 < $n2) {
if ($i2 < $n2 && !isset($done[$i1][$i2 + 1])) {
$z2 = new stdClass();
$z2->i1 = $i1;
$z2->i2 = $i2 + 1;
......@@ -458,7 +459,7 @@ class vpl_diff {
}
// Character change.
if ($i1 < $n1 && $i2 < $n2) {
if ($i1 < $n1 && $i2 < $n2 && !isset($done[$i1 + 1][$i2 + 1])) {
$z3 = new stdClass();
$z3->i1 = $i1 + 1;
$z3->i2 = $i2 + 1;
......@@ -497,7 +498,7 @@ class vpl_diff {
// A-star search of shortest diff.
while (true) {
if ($timelimit > 0 && microtime(true)-$starttime > $timelimit/1000) {
if ($timelimit > 0 && microtime(true) - $starttime > $timelimit / 1000) {
// Time out.
throw new Exception();
}
......@@ -517,6 +518,7 @@ class vpl_diff {
while ($i1 < $n1 && $i2 < $n2 && $lines1[$i1] == $lines2[$i2]) {
$i1++;
$i2++;
$prev[$i1][$i2] = 0;
}
if ($i1 == $n1 && $i2 == $n2) {
......@@ -530,11 +532,11 @@ class vpl_diff {
} else {
switch ($prev[$i1][$i2]) {
case 1 :
$totaldiff += strlen( $lines1[$i1-1] ) + 1;
$totaldiff += strlen( $lines1[$i1 - 1] ) + 1;
$i1--;
break;
case 2 :
$totaldiff += strlen( $lines2[$i2-1] ) + 1;
$totaldiff += strlen( $lines2[$i2 - 1] ) + 1;
$i2--;
break;
case 3 :
......@@ -550,7 +552,7 @@ class vpl_diff {
}
// Line addition in file1.
if ($i1 < $n1) {
if ($i1 < $n1 && !isset($prev[$i1 + 1][$i2])) {
$z1 = new stdClass();
$z1->i1 = $i1 + 1;
$z1->i2 = $i2;
......@@ -560,7 +562,7 @@ class vpl_diff {
}
// Line addition in file2.
if ($i2 < $n2) {
if ($i2 < $n2 && !isset($prev[$i1][$i2 + 1])) {
$z2 = new stdClass();
$z2->i1 = $i1;
$z2->i2 = $i2 + 1;
......@@ -570,7 +572,7 @@ class vpl_diff {
}
// Line change.
if ($i1 < $n1 && $i2 < $n2) {
if ($i1 < $n1 && $i2 < $n2 && !isset($prev[$i1 + 1][$i2 + 1])) {
$z3 = new stdClass();
$z3->i1 = $i1 + 1;
$z3->i2 = $i2 + 1;
......@@ -580,4 +582,4 @@ class vpl_diff {
}
}
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment