Path: blob/master/src/applications/differential/herald/HeraldDifferentialRevisionAdapter.php
12256 views
<?php12final class HeraldDifferentialRevisionAdapter3extends HeraldDifferentialAdapter4implements HarbormasterBuildableAdapterInterface {56protected $revision;78protected $affectedPackages;9protected $changesets;10private $haveHunks;1112private $buildRequests = array();1314public function getAdapterApplicationClass() {15return 'PhabricatorDifferentialApplication';16}1718protected function newObject() {19return new DifferentialRevision();20}2122public function isTestAdapterForObject($object) {23return ($object instanceof DifferentialRevision);24}2526public function getAdapterTestDescription() {27return pht(28'Test rules which run when a revision is created or updated.');29}3031public function newTestAdapter(PhabricatorUser $viewer, $object) {32return self::newLegacyAdapter(33$object,34$object->loadActiveDiff());35}3637protected function initializeNewAdapter() {38$this->revision = $this->newObject();39}4041public function getObject() {42return $this->revision;43}4445public function getAdapterContentType() {46return 'differential';47}4849public function getAdapterContentName() {50return pht('Differential Revisions');51}5253public function getAdapterContentDescription() {54return pht(55"React to revisions being created or updated.\n".56"Revision rules can send email, flag revisions, add reviewers, ".57"and run build plans.");58}5960public function supportsRuleType($rule_type) {61switch ($rule_type) {62case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:63case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:64return true;65case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:66default:67return false;68}69}7071public static function newLegacyAdapter(72DifferentialRevision $revision,73DifferentialDiff $diff) {74$object = new HeraldDifferentialRevisionAdapter();7576// Reload the revision to pick up relationship information.77$revision = id(new DifferentialRevisionQuery())78->withIDs(array($revision->getID()))79->setViewer(PhabricatorUser::getOmnipotentUser())80->needReviewers(true)81->executeOne();8283$object->revision = $revision;84$object->setDiff($diff);8586return $object;87}8889public function getHeraldName() {90return $this->revision->getTitle();91}9293protected function loadChangesets() {94if ($this->changesets === null) {95$this->changesets = $this->getDiff()->loadChangesets();96}97return $this->changesets;98}99100protected function loadChangesetsWithHunks() {101$changesets = $this->loadChangesets();102103if ($changesets && !$this->haveHunks) {104$this->haveHunks = true;105106id(new DifferentialHunkQuery())107->setViewer(PhabricatorUser::getOmnipotentUser())108->withChangesets($changesets)109->needAttachToChangesets(true)110->execute();111}112113return $changesets;114}115116public function loadAffectedPackages() {117if ($this->affectedPackages === null) {118$this->affectedPackages = array();119120$repository = $this->loadRepository();121if ($repository) {122$packages = PhabricatorOwnersPackage::loadAffectedPackagesForChangesets(123$repository,124$this->getDiff(),125$this->loadChangesets());126$this->affectedPackages = $packages;127}128}129return $this->affectedPackages;130}131132public function loadReviewers() {133return $this->getObject()->getReviewerPHIDs();134}135136137/* -( HarbormasterBuildableAdapterInterface )------------------------------ */138139140public function getHarbormasterBuildablePHID() {141return $this->getDiff()->getPHID();142}143144public function getHarbormasterContainerPHID() {145return $this->getObject()->getPHID();146}147148public function getQueuedHarbormasterBuildRequests() {149return $this->buildRequests;150}151152public function queueHarbormasterBuildRequest(153HarbormasterBuildRequest $request) {154$this->buildRequests[] = $request;155}156157}158159160