$i = 0; // Used to skip the end of a git patch with --\nversion number␊ |
foreach ($this->lines as $line) {␊ |
$i++;␊ |
if (0 === strpos($line, '--') and isset($this->lines[$i]) ␊ |
if (0 === strpos($line, '--') and isset($this->lines[$i])␊ |
and preg_match('/^\d+\.\d+\.\d+\.\d+$/', $this->lines[$i])) {␊ |
break;␊ |
}␊ |
|
$current_chunk = 0;␊ |
$indiff = true;␊ |
continue;␊ |
} else if (0 === strpos($line, '=========')) {␊ |
$current_file = self::getMtnFile($this->lines[$i+1]);␊ |
$files[$current_file] = array();␊ |
$files[$current_file]['chunks'] = array();␊ |
$files[$current_file]['chunks_def'] = array();␊ |
$current_chunk = 0;␊ |
$indiff = true;␊ |
continue;␊ |
} else if (0 === strpos($line, 'Index: ')) {␊ |
$current_file = self::getSvnFile($line);␊ |
$files[$current_file] = array();␊ |
|
return substr(trim($line), 7);␊ |
}␊ |
␊ |
public static function getMtnFile($line)␊ |
{␊ |
preg_match("/^[+-]{3} ([^\t]+)/", $line, $m);␊ |
return $m[1];␊ |
}␊ |
␊ |
/**␊ |
* Return the html version of a parsed diff.␊ |
*/␊ |
|
* @param int Number of lines before/after the chunk to be displayed (10)␊ |
* @return Pluf_Template_SafeString The table body␊ |
*/␊ |
public function fileCompare($orig, $chunks, $filename, $context=10) ␊ |
public function fileCompare($orig, $chunks, $filename, $context=10)␊ |
{␊ |
$orig_lines = preg_split("/\015\012|\015|\012/", $orig);␊ |
$new_chunks = $this->mergeChunks($orig_lines, $chunks, $context);␊ |
return $this->renderCompared($new_chunks, $filename);␊ |
}␊ |
␊ |
public function mergeChunks($orig_lines, $chunks, $context=10) ␊ |
public function mergeChunks($orig_lines, $chunks, $context=10)␊ |
{␊ |
$spans = array();␊ |
$new_chunks = array();␊ |
|
for ($lc=$spans[$i][0];$lc<$chunk[0][0];$lc++) {␊ |
$exists = false;␊ |
foreach ($chunk_lines as $line) {␊ |
if ($lc == $line[0] ␊ |
if ($lc == $line[0]␊ |
or ($chunk[0][1]-$chunk[0][0]+$lc) == $line[1]) {␊ |
$exists = true;␊ |
break;␊ |
|
if (!$exists) {␊ |
$orig = isset($orig_lines[$lc-1]) ? $orig_lines[$lc-1] : '';␊ |
$n_chunk[] = array(␊ |
$lc, ␊ |
$lc,␊ |
$chunk[0][1]-$chunk[0][0]+$lc,␊ |
$orig␊ |
);␊ |
|
}␊ |
if (!$exists) {␊ |
$n_chunk[] = array(␊ |
$lc, ␊ |
$lc,␊ |
$lline[1]-$lline[0]+$lc,␊ |
$orig_lines[$lc-1]␊ |
);␊ |
|
foreach ($chunk as $line) {␊ |
if ($line[0] > $lline[0] or empty($line[0])) {␊ |
$nnew_chunks[$i-1][] = $line;␊ |
} ␊ |
}␊ |
}␊ |
} else {␊ |
$nnew_chunks[] = $chunk;␊ |