@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

When mapping phantom comments across changes, correct an off-by-one issue

Summary:
Ref T13617. When an inline comment is added inside a block of added lines, it currently ends up off-by-one when porting forward.

This is a disagreement between the mapping engine and the display engine about what "offset" means. Choose the simpler of the two interpretations.

Test Plan:
- Created a revision with the diff in T13617.
- Added an inline in the middle of the added block.
- Updated the revision with the same diff.
- Before: inline incorrectly moves up by one line.
- After: inline maps correctly.

Maniphest Tasks: T13617

Differential Revision: https://secure.phabricator.com/D21572

+46 -7
+1 -1
src/__phutil_library_map__.php
··· 6519 6519 'DarkConsoleXHProfPluginAPI' => 'Phobject', 6520 6520 'DifferentialAction' => 'Phobject', 6521 6521 'DifferentialActionEmailCommand' => 'MetaMTAEmailTransactionCommand', 6522 - 'DifferentialAdjustmentMapTestCase' => 'PhutilTestCase', 6522 + 'DifferentialAdjustmentMapTestCase' => 'PhabricatorTestCase', 6523 6523 'DifferentialAffectedPath' => 'DifferentialDAO', 6524 6524 'DifferentialAsanaRepresentationField' => 'DifferentialCustomField', 6525 6525 'DifferentialAuditorsCommitMessageField' => 'DifferentialCommitMessageCustomField',
+1 -1
src/applications/differential/parser/DifferentialLineAdjustmentMap.php
··· 78 78 // If we're tracing the first line and this block is collapsing, 79 79 // compute the offset from the top of the block. 80 80 if (!$is_end && $this->isInverse) { 81 - $offset = 0; 81 + $offset = 1; 82 82 $cursor = $line - 1; 83 83 while (isset($nmap[$cursor])) { 84 84 $prev = $nmap[$cursor];
+44 -5
src/applications/differential/storage/__tests__/DifferentialAdjustmentMapTestCase.php
··· 1 1 <?php 2 2 3 - final class DifferentialAdjustmentMapTestCase extends PhutilTestCase { 3 + final class DifferentialAdjustmentMapTestCase 4 + extends PhabricatorTestCase { 4 5 5 6 public function testBasicMaps() { 6 7 $change_map = array( ··· 61 62 $reduced_map, 62 63 DifferentialLineAdjustmentMap::newFromHunks($hunks)->getMap()); 63 64 } 64 - 65 65 66 66 public function testInverseMaps() { 67 67 $change_map = array( ··· 221 221 $this->assertEqual(3, $map->getFinalOffset()); 222 222 } 223 223 224 + public function testUnchangedUpdate() { 225 + $diff1 = $this->loadHunks('insert.diff'); 226 + $diff2 = $this->loadHunks('insert.diff'); 227 + 228 + $map = DifferentialLineAdjustmentMap::newInverseMap( 229 + DifferentialLineAdjustmentMap::newFromHunks($diff1)); 230 + 231 + $map->addMapToChain( 232 + DifferentialLineAdjustmentMap::newFromHunks($diff2)); 233 + 234 + $actual = array(); 235 + for ($ii = 1; $ii <= 16; $ii++) { 236 + $actual[$ii] = array( 237 + $map->mapLine($ii, false), 238 + $map->mapLine($ii, true), 239 + ); 240 + } 241 + 242 + $expect = array( 243 + 1 => array(array(false, false, 1), array(false, false, 1)), 244 + 2 => array(array(false, false, 2), array(false, false, 2)), 245 + 3 => array(array(false, false, 3), array(false, false, 3)), 246 + 4 => array(array(false, false, 4), array(false, false, 4)), 247 + 5 => array(array(false, false, 5), array(false, false, 5)), 248 + 6 => array(array(false, false, 6), array(false, false, 6)), 249 + 7 => array(array(false, false, 7), array(false, false, 7)), 250 + 8 => array(array(false, false, 8), array(false, false, 8)), 251 + 9 => array(array(false, false, 9), array(false, false, 9)), 252 + 10 => array(array(false, false, 10), array(false, false, 13)), 253 + 11 => array(array(false, 1, 10), array(false, false, 14)), 254 + 12 => array(array(false, 2, 10), array(false, false, 14)), 255 + 13 => array(array(false, 3, 10), array(false, false, 14)), 256 + 14 => array(array(false, false, 14), array(false, false, 14)), 257 + 15 => array(array(false, false, 15), array(false, false, 15)), 258 + 16 => array(array(false, false, 16), array(false, false, 16)), 259 + ); 260 + 261 + $this->assertEqual($expect, $actual); 262 + } 224 263 225 264 public function testChainMaps() { 226 265 // This test simulates porting inlines forward across a rebase. ··· 258 297 5 => array(array(false, false, 3), array(false, false, 3)), 259 298 6 => array(array(false, false, 4), array(false, false, 4)), 260 299 7 => array(array(false, false, 5), array(false, false, 8)), 261 - 8 => array(array(false, 0, 5), array(false, false, 9)), 262 - 9 => array(array(false, 1, 5), array(false, false, 9)), 263 - 10 => array(array(false, 2, 5), array(false, false, 9)), 300 + 8 => array(array(false, 1, 5), array(false, false, 9)), 301 + 9 => array(array(false, 2, 5), array(false, false, 9)), 302 + 10 => array(array(false, 3, 5), array(false, false, 9)), 264 303 11 => array(array(false, false, 9), array(false, false, 9)), 265 304 12 => array(array(false, false, 10), array(false, false, 10)), 266 305 13 => array(array(false, false, 11), array(false, false, 11)),