diff --git a/extensions/src/differential/view/DifferentialRevisionWarning.php b/extensions/src/differential/view/DifferentialRevisionWarning.php index 33fee6c..6038ebd 100644 --- a/extensions/src/differential/view/DifferentialRevisionWarning.php +++ b/extensions/src/differential/view/DifferentialRevisionWarning.php @@ -1,98 +1,99 @@ warnings[] = $this->createSecurityWarning($viewer, $revision); $this->warnings[] = $this->createPublicDependencyWarning($viewer, $revision); return $this->warnings; } public function createSecurityWarning($viewer, $revision) { if (!isRevisionPrivate($viewer, $revision)) { return null; } $warning = new PHUIInfoView(); $warning->setTitle(pht('This is a secure revision.')); $warning->setSeverity(PHUIInfoView::SEVERITY_WARNING); $warning->appendChild(hsprintf(pht( - 'Please use Bugzilla CC list to manage access to this revision.
' . + 'Please use the CC list of the associated bug in Bugzilla to manage access and ' . + 'subscribership of this revision. Changes made here may be overwritten.
' . 'Please do not land this revision using `arc land` to prevent data leakage.'))); return $warning->render(); } /** * Display a warning for a secure revision which has a public dependency */ public function createPublicDependencyWarning($viewer, $revision) { if (!isRevisionPrivate($viewer, $revision)) { return null; } // Find depending revisions. $stack_graph = id(new DifferentialRevisionGraph()) ->setViewer($viewer) ->setSeedPHID($revision->getPHID()) ->setLoadEntireGraph(true) ->loadGraph(); if ($stack_graph->isEmpty()) { return null; } $stack_graph->newGraphTable(); $parent_type = DifferentialRevisionDependedOnByRevisionEdgeType::EDGECONST; $reachable = $stack_graph->getReachableObjects($parent_type); // Remove depending revisions which are closed or private foreach ($reachable as $key => $reachable_revision) { if ($reachable_revision->isClosed() or isRevisionPrivate($viewer, $reachable_revision)) { unset($reachable[$key]); } } if (!$reachable) { return null; } $plural = ''; if (count($reachable) > 1) { $plural = 's'; } $warning = new PHUIInfoView(); $warning->setTitle(pht( 'A public revision%s is depending on this secure revision.', $plural)); $warning->setSeverity(PHUIInfoView::SEVERITY_WARNING); $warning->appendChild(hsprintf(pht( 'Please change the child revision%s to private by setting the security flag in Bugzilla.', $plural))); return $warning->render(); } } function isRevisionPrivate($viewer, $revision) { $revision_projects = PhabricatorEdgeQuery::loadDestinationPHIDs( $revision->getPHID(), PhabricatorProjectObjectHasProjectEdgeType::EDGECONST); if (!(bool)$revision_projects) { return null; } // Load a secure-revision project // TODO cache the result $secure_group = id(new PhabricatorProjectQuery()) ->setViewer($viewer) ->withNames(array('secure-revision')) ->executeOne(); return in_array($secure_group->getPHID(), $revision_projects); }