1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 01:02:42 +01:00

(stable) Don't pass "No newline at end of file." annotations to DocumentEngines as literal diff text

Summary: See PHI1707, which has a Jupyter notebook which fails to diff nicely when modified. The root cause seems to be that the document does not end in a newline.

Test Plan: Applied patch, diffed the file, got a Jupyter diff out of it.

Differential Revision: https://secure.phabricator.com/D21159
This commit is contained in:
epriestley 2020-04-22 20:20:00 -07:00
parent 14409a32e7
commit 1d9d2d066e

View file

@ -1701,10 +1701,7 @@ final class DifferentialChangesetParser extends Phobject {
if ($old_file) {
$old_ref->setFile($old_file);
} else {
$old_data = $this->old;
$old_data = ipull($old_data, 'text');
$old_data = implode('', $old_data);
$old_data = $this->getRawDocumentEngineData($this->old);
$old_ref->setData($old_data);
}
}
@ -1717,10 +1714,7 @@ final class DifferentialChangesetParser extends Phobject {
if ($new_file) {
$new_ref->setFile($new_file);
} else {
$new_data = $this->new;
$new_data = ipull($new_data, 'text');
$new_data = implode('', $new_data);
$new_data = $this->getRawDocumentEngineData($this->new);
$new_ref->setData($new_data);
}
}
@ -1860,4 +1854,20 @@ final class DifferentialChangesetParser extends Phobject {
return array($old_file, $new_file);
}
private function getRawDocumentEngineData(array $lines) {
$text = array();
foreach ($lines as $line) {
// If this is a "No newline at end of file." annotation, don't hand it
// off to the DocumentEngine.
if ($line['type'] == '\\') {
continue;
}
$text[] = $line['text'];
}
return implode('', $text);
}
}