Changeset View
Changeset View
Standalone View
Standalone View
src/applications/repository/query/PhabricatorRepositoryPublisher.php
- This file was added.
| <?php | |||||
| final class PhabricatorRepositoryPublisher | |||||
| extends Phobject { | |||||
| private $repository; | |||||
| const HOLD_IMPORTING = 'auto/importing'; | |||||
| const HOLD_PUBLISHING_DISABLED = 'auto/disabled'; | |||||
| const HOLD_REF_NOT_BRANCH = 'not-branch'; | |||||
| const HOLD_NOT_REACHABLE_FROM_PERMANENT_REF = 'auto/nobranch'; | |||||
| const HOLD_UNTRACKED = 'auto/notrack'; | |||||
| const HOLD_NOT_PERMANENT_REF = 'auto/noclose'; | |||||
| public function setRepository(PhabricatorRepository $repository) { | |||||
| $this->repository = $repository; | |||||
| return $this; | |||||
| } | |||||
| public function getRepository() { | |||||
| if (!$this->repository) { | |||||
| throw new PhutilInvalidStateException('setRepository'); | |||||
| } | |||||
| return $this->repository; | |||||
| } | |||||
| /* -( Publishing )--------------------------------------------------------- */ | |||||
| public function shouldPublishRepository() { | |||||
| return !$this->getRepositoryHoldReasons(); | |||||
| } | |||||
| public function shouldPublishRef(DiffusionRepositoryRef $ref) { | |||||
| return !$this->getRefHoldReasons($ref); | |||||
| } | |||||
| public function shouldPublishCommit(PhabricatorRepositoryCommit $commit) { | |||||
| return !$this->getCommitHoldReasons($commit); | |||||
| } | |||||
| /* -( Hold Reasons )------------------------------------------------------- */ | |||||
| public function getRepositoryHoldReasons() { | |||||
| $repository = $this->getRepository(); | |||||
| $reasons = array(); | |||||
| if ($repository->isImporting()) { | |||||
| $reasons[] = self::HOLD_IMPORTING; | |||||
| } | |||||
| if ($repository->isPublishingDisabled()) { | |||||
| $reasons[] = self::HOLD_PUBLISHING_DISABLED; | |||||
| } | |||||
| return $reasons; | |||||
| } | |||||
| public function getRefHoldReasons(DiffusionRepositoryRef $ref) { | |||||
| $repository = $this->getRepository(); | |||||
| $reasons = $this->getRepositoryHoldReasons(); | |||||
| if (!$ref->isBranch()) { | |||||
| $reasons[] = self::HOLD_REF_NOT_BRANCH; | |||||
| } else { | |||||
| $branch_name = $ref->getShortName(); | |||||
| if (!$repository->shouldTrackBranch($branch_name)) { | |||||
| $reasons[] = self::HOLD_UNTRACKED; | |||||
| } | |||||
| if (!$repository->isBranchPermanentRef($branch_name)) { | |||||
| $reasons[] = self::HOLD_NOT_PERMANENT_REF; | |||||
| } | |||||
| } | |||||
| return $reasons; | |||||
| } | |||||
| public function getCommitHoldReasons(PhabricatorRepositoryCommit $commit) { | |||||
| $repository = $this->getRepository(); | |||||
| $reasons = $this->getRepositoryHoldReasons(); | |||||
| if ($repository->isGit()) { | |||||
| if (!$commit->isPermanentCommit()) { | |||||
| $reasons[] = self::HOLD_NOT_REACHABLE_FROM_PERMANENT_REF; | |||||
| } | |||||
| } | |||||
| return $reasons; | |||||
| } | |||||
| /* -( Rendering )---------------------------------------------------------- */ | |||||
| public function getHoldName($hold) { | |||||
| $map = array( | |||||
| self::HOLD_IMPORTING => array( | |||||
| 'name' => pht('Repository Importing'), | |||||
| ), | |||||
| self::HOLD_PUBLISHING_DISABLED => array( | |||||
| 'name' => pht('Repository Publishing Disabled'), | |||||
| ), | |||||
| self::HOLD_REF_NOT_BRANCH => array( | |||||
| 'name' => pht('Not a Branch'), | |||||
| ), | |||||
| self::HOLD_NOT_REACHABLE_FROM_PERMANENT_REF => array( | |||||
| 'name' => pht('Not Reachable from Permanent Ref'), | |||||
| ), | |||||
| self::HOLD_UNTRACKED => array( | |||||
| 'name' => pht('Untracked Ref'), | |||||
| ), | |||||
| self::HOLD_NOT_PERMANENT_REF => array( | |||||
| 'name' => pht('Not a Permanent Ref'), | |||||
| ), | |||||
| ); | |||||
| $spec = idx($map, $hold, array()); | |||||
| return idx($spec, 'name', pht('Unknown ("%s")', $hold)); | |||||
| } | |||||
| } | |||||