@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make Repositories partially policy-aware

Summary: Small step toward repository hosting. No user-visible changes.

Test Plan: Looked at repositories in Diffusion.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T603

Differential Revision: https://secure.phabricator.com/D4227

+124 -6
+7 -1
src/__phutil_library_map__.php
··· 1064 1064 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php', 1065 1065 'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php', 1066 1066 'PhabricatorRepositoryPullLocalDaemonTestCase' => 'applications/repository/daemon/__tests__/PhabricatorRepositoryPullLocalDaemonTestCase.php', 1067 + 'PhabricatorRepositoryQuery' => 'applications/repository/query/PhabricatorRepositoryQuery.php', 1067 1068 'PhabricatorRepositoryShortcut' => 'applications/repository/storage/PhabricatorRepositoryShortcut.php', 1068 1069 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php', 1069 1070 'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php', ··· 2295 2296 'PhabricatorRemarkupRulePaste' => 'PhabricatorRemarkupRuleObjectName', 2296 2297 'PhabricatorRemarkupRulePhriction' => 'PhutilRemarkupRule', 2297 2298 'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule', 2298 - 'PhabricatorRepository' => 'PhabricatorRepositoryDAO', 2299 + 'PhabricatorRepository' => 2300 + array( 2301 + 0 => 'PhabricatorRepositoryDAO', 2302 + 1 => 'PhabricatorPolicyInterface', 2303 + ), 2299 2304 'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryDAO', 2300 2305 'PhabricatorRepositoryArcanistProjectDeleteController' => 'PhabricatorRepositoryController', 2301 2306 'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController', ··· 2325 2330 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', 2326 2331 'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon', 2327 2332 'PhabricatorRepositoryPullLocalDaemonTestCase' => 'PhabricatorTestCase', 2333 + 'PhabricatorRepositoryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2328 2334 'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO', 2329 2335 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', 2330 2336 'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
+5 -4
src/applications/diffusion/controller/DiffusionHomeController.php
··· 42 42 $shortcut_panel = null; 43 43 } 44 44 45 - $repository = new PhabricatorRepository(); 45 + $repositories = id(new PhabricatorRepositoryQuery()) 46 + ->setViewer($user) 47 + ->execute(); 46 48 47 - $repositories = $repository->loadAll(); 48 49 foreach ($repositories as $key => $repo) { 49 50 if (!$repo->isTracked()) { 50 51 unset($repositories[$key]); ··· 56 57 $commits = array(); 57 58 if ($repository_ids) { 58 59 $summaries = queryfx_all( 59 - $repository->establishConnection('r'), 60 + id(new PhabricatorRepository())->establishConnection('r'), 60 61 'SELECT * FROM %T WHERE repositoryID IN (%Ld)', 61 62 PhabricatorRepository::TABLE_SUMMARY, 62 63 $repository_ids); 63 - $summaries = ipull($summaries, null, 'repositoryID'); 64 + $summaries = ipull($summaries, null, 'repositoryID'); 64 65 65 66 $commit_ids = array_filter(ipull($summaries, 'lastCommitID')); 66 67 if ($commit_ids) {
+69
src/applications/repository/query/PhabricatorRepositoryQuery.php
··· 1 + <?php 2 + 3 + final class PhabricatorRepositoryQuery 4 + extends PhabricatorCursorPagedPolicyAwareQuery { 5 + 6 + private $ids; 7 + private $phids; 8 + private $callsigns; 9 + 10 + public function withIDs(array $ids) { 11 + $this->ids = $ids; 12 + return $this; 13 + } 14 + 15 + public function withPHIDs(array $phids) { 16 + $this->phids = $phids; 17 + return $this; 18 + } 19 + 20 + public function withCallsigns(array $callsigns) { 21 + $this->callsigns = $callsigns; 22 + return $this; 23 + } 24 + 25 + public function loadPage() { 26 + $table = new PhabricatorRepository(); 27 + $conn_r = $table->establishConnection('r'); 28 + 29 + $data = queryfx_all( 30 + $conn_r, 31 + 'SELECT * FROM %T %Q %Q %Q', 32 + $table->getTableName(), 33 + $this->buildWhereClause($conn_r), 34 + $this->buildOrderClause($conn_r), 35 + $this->buildLimitClause($conn_r)); 36 + 37 + return $table->loadAllFromArray($data); 38 + } 39 + 40 + private function buildWhereClause(AphrontDatabaseConnection $conn_r) { 41 + $where = array(); 42 + 43 + if ($this->ids) { 44 + $where[] = qsprintf( 45 + $conn_r, 46 + 'id IN (%Ld)', 47 + $this->ids); 48 + } 49 + 50 + if ($this->phids) { 51 + $where[] = qsprintf( 52 + $conn_r, 53 + 'phid IN (%Ls)', 54 + $this->phids); 55 + } 56 + 57 + if ($this->callsigns) { 58 + $where[] = qsprintf( 59 + $conn_r, 60 + 'callsign IN (%Ls)', 61 + $this->callsigns); 62 + } 63 + 64 + $where[] = $this->buildPagingClause($conn_r); 65 + 66 + return $this->formatWhereClause($where); 67 + } 68 + 69 + }
+43 -1
src/applications/repository/storage/PhabricatorRepository.php
··· 3 3 /** 4 4 * @task uri Repository URI Management 5 5 */ 6 - final class PhabricatorRepository extends PhabricatorRepositoryDAO { 6 + final class PhabricatorRepository extends PhabricatorRepositoryDAO 7 + implements PhabricatorPolicyInterface { 7 8 8 9 const TABLE_PATH = 'repository_path'; 9 10 const TABLE_PATHCHANGE = 'repository_pathchange'; ··· 602 603 $this->saveTransaction(); 603 604 return $result; 604 605 } 606 + 607 + public function isGit() { 608 + $vcs = $this->getVersionControlSystem(); 609 + return ($vcs == PhabricatorRepositoryType::REPOSITORY_TYPE_GIT); 610 + } 611 + 612 + public function isSVN() { 613 + $vcs = $this->getVersionControlSystem(); 614 + return ($vcs == PhabricatorRepositoryType::REPOSITORY_TYPE_SVN); 615 + } 616 + 617 + public function isHg() { 618 + $vcs = $this->getVersionControlSystem(); 619 + return ($vcs == PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL); 620 + } 621 + 622 + 623 + 624 + /* -( PhabricatorPolicyInterface )----------------------------------------- */ 625 + 626 + 627 + public function getCapabilities() { 628 + return array( 629 + PhabricatorPolicyCapability::CAN_VIEW, 630 + PhabricatorPolicyCapability::CAN_EDIT, 631 + ); 632 + } 633 + 634 + public function getPolicy($capability) { 635 + switch ($capability) { 636 + case PhabricatorPolicyCapability::CAN_VIEW: 637 + return PhabricatorPolicies::POLICY_USER; 638 + case PhabricatorPolicyCapability::CAN_EDIT: 639 + return PhabricatorPolicies::POLICY_ADMIN; 640 + } 641 + } 642 + 643 + public function hasAutomaticCapability($capability, PhabricatorUser $user) { 644 + return false; 645 + } 646 + 605 647 }