From 9eb285f4aabb27b8e3cb144a9e020ee1ac0fa747 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 17 May 2017 08:25:39 -0700 Subject: [PATCH] Fix "left"/"right" changeset ID selection for synthetic deletions Summary: Fixes T8323. See that task for a description. We were using `nonempty()`, but that rule doesn't cover synthetic deletions (file present in an earlier diff, but no longer present in the later diff). Test Plan: Followed the steps in T8323, got a clean comment. Reviewers: chad Reviewed By: chad Maniphest Tasks: T8323 Differential Revision: https://secure.phabricator.com/D17929 --- .../view/DifferentialChangesetDetailView.php | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/applications/differential/view/DifferentialChangesetDetailView.php b/src/applications/differential/view/DifferentialChangesetDetailView.php index 219dfaaa1f..42be1c6444 100644 --- a/src/applications/differential/view/DifferentialChangesetDetailView.php +++ b/src/applications/differential/view/DifferentialChangesetDetailView.php @@ -150,15 +150,31 @@ final class DifferentialChangesetDetailView extends AphrontView { $renderer = DifferentialChangesetHTMLRenderer::getHTMLRendererByKey( $this->getRenderer()); + $changeset_id = $this->changeset->getID(); + + $vs_id = $this->getVsChangesetID(); + if (!$vs_id) { + // Showing a changeset normally. + $left_id = $changeset_id; + $right_id = $changeset_id; + } else if ($vs_id == -1) { + // Showing a synthetic "deleted" changeset for a file which was + // removed between changes. + $left_id = $changeset_id; + $right_id = null; + } else { + // Showing a diff-of-diffs. + $left_id = $vs_id; + $right_id = $changeset_id; + } + return javelin_tag( 'div', array( 'sigil' => 'differential-changeset', 'meta' => array( - 'left' => nonempty( - $this->getVsChangesetID(), - $this->changeset->getID()), - 'right' => $this->changeset->getID(), + 'left' => $left_id, + 'right' => $right_id, 'renderURI' => $this->getRenderURI(), 'whitespace' => $this->getWhitespace(), 'highlight' => null,