From 292f8fc612bd2d070110eb22877454937bfd7899 Mon Sep 17 00:00:00 2001 From: epriestley Date: Sat, 26 Oct 2019 12:06:45 -0700 Subject: [PATCH] Fix an issue where added or removed source files could incorrectly select a DocumentEngine Summary: Ref T13425. The changes in D20865 could incorrectly lead to selection of a DocumentEngine that can not generate document diffs if a file was added or removed (for example, when a source file is added). Move the engine pruning code to be shared -- we should always discard engines which can't generate a diff, even if we don't have both documents. Test Plan: Viewed an added source file, no more document ref error arising from document engine selection. Maniphest Tasks: T13425 Differential Revision: https://secure.phabricator.com/D20866 --- .../parser/DifferentialChangesetParser.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php index 571405f64b..92d5f23c1a 100644 --- a/src/applications/differential/parser/DifferentialChangesetParser.php +++ b/src/applications/differential/parser/DifferentialChangesetParser.php @@ -1743,12 +1743,6 @@ final class DifferentialChangesetParser extends Phobject { if ($new_engines !== null && $old_engines !== null) { $shared_engines = array_intersect_key($new_engines, $old_engines); $default_engine = head_key($new_engines); - - foreach ($shared_engines as $key => $shared_engine) { - if (!$shared_engine->canDiffDocuments($old_ref, $new_ref)) { - unset($shared_engines[$key]); - } - } } else if ($new_engines !== null) { $shared_engines = $new_engines; $default_engine = head_key($shared_engines); @@ -1759,6 +1753,12 @@ final class DifferentialChangesetParser extends Phobject { return null; } + foreach ($shared_engines as $key => $shared_engine) { + if (!$shared_engine->canDiffDocuments($old_ref, $new_ref)) { + unset($shared_engines[$key]); + } + } + $engine_key = $this->getDocumentEngineKey(); if (strlen($engine_key)) { if (isset($shared_engines[$engine_key])) {