Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15397536
D21267.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
D21267.id.diff
View Options
diff --git a/src/applications/differential/parser/DifferentialHunkParser.php b/src/applications/differential/parser/DifferentialHunkParser.php
--- a/src/applications/differential/parser/DifferentialHunkParser.php
+++ b/src/applications/differential/parser/DifferentialHunkParser.php
@@ -582,8 +582,13 @@
$changes = $hunk->getSplitLines();
foreach ($changes as $line) {
$diff_type = $line[0]; // Change type in diff of diffs.
+ $is_same = ($diff_type === ' ');
+ $is_add = ($diff_type === '+');
+ $is_rem = ($diff_type === '-');
+
$orig_type = $line[1]; // Change type in the original diff.
- if ($diff_type == ' ') {
+
+ if ($is_same) {
// Use the same key for lines that are next to each other.
if ($olds_cursor > $news_cursor) {
$key = $olds_cursor + 1;
@@ -594,17 +599,32 @@
$news[$key] = null;
$olds_cursor = $key;
$news_cursor = $key;
- } else if ($diff_type == '-') {
+ } else if ($is_rem) {
$olds[] = array($n_old, $orig_type);
$olds_cursor++;
- } else if ($diff_type == '+') {
+ } else if ($is_add) {
$news[] = array($n_new, $orig_type);
$news_cursor++;
+ } else {
+ throw new Exception(
+ pht(
+ 'Found unknown intradiff source line, expected a line '.
+ 'beginning with "+", "-", or " " (space): %s.',
+ $line));
+ }
+
+ // See T13539. Don't increment the line count if this line was removed,
+ // or if the line is a "No newline at end of file" marker.
+ $not_a_line = ($orig_type === '-' || $orig_type === '\\');
+ if ($not_a_line) {
+ continue;
}
- if (($diff_type == '-' || $diff_type == ' ') && $orig_type != '-') {
+
+ if ($is_same || $is_rem) {
$n_old++;
}
- if (($diff_type == '+' || $diff_type == ' ') && $orig_type != '-') {
+
+ if ($is_same || $is_add) {
$n_new++;
}
}
@@ -623,14 +643,18 @@
list($n, $type) = $olds[$i];
if ($type == '+' ||
($type == ' ' && isset($news[$i]) && $news[$i][1] != ' ')) {
- $highlight_old[] = $offsets_old[$n];
+ if (isset($offsets_old[$n])) {
+ $highlight_old[] = $offsets_old[$n];
+ }
}
}
if (isset($news[$i])) {
list($n, $type) = $news[$i];
if ($type == '+' ||
($type == ' ' && isset($olds[$i]) && $olds[$i][1] != ' ')) {
- $highlight_new[] = $offsets_new[$n];
+ if (isset($offsets_new[$n])) {
+ $highlight_new[] = $offsets_new[$n];
+ }
}
}
}
diff --git a/src/applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php b/src/applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php
--- a/src/applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php
+++ b/src/applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php
@@ -4,19 +4,19 @@
public function testDiffChangesets() {
$hunk = new DifferentialHunk();
- $hunk->setChanges("+a\n b\n-c");
+ $hunk->setChanges("+a\n b\n-c\n");
$hunk->setNewOffset(1);
$hunk->setNewLen(2);
$left = new DifferentialChangeset();
$left->attachHunks(array($hunk));
$tests = array(
- "+a\n b\n-c" => array(array(), array()),
- "+a\n x\n-c" => array(array(), array()),
- "+aa\n b\n-c" => array(array(1), array(11)),
- " b\n-c" => array(array(1), array()),
- "+a\n b\n c" => array(array(), array(13)),
- "+a\n x\n c" => array(array(), array(13)),
+ "+a\n b\n-c\n" => array(array(), array()),
+ "+a\n x\n-c\n" => array(array(), array()),
+ "+aa\n b\n-c\n" => array(array(1), array(11)),
+ " b\n-c\n" => array(array(1), array()),
+ "+a\n b\n c\n" => array(array(), array(13)),
+ "+a\n x\n c\n" => array(array(), array(13)),
);
foreach ($tests as $changes => $expected) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 17, 8:54 PM (1 d, 12 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7708858
Default Alt Text
D21267.id.diff (4 KB)
Attached To
Mode
D21267: Fix an unusual issue with intradiff highlighting of files with uncommon end-of-file modifications
Attached
Detach File
Event Timeline
Log In to Comment