@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
at upstream/main 216 lines 7.6 kB view raw
1<?php 2 3final class PhabricatorDiffusionApplication extends PhabricatorApplication { 4 5 public function getName() { 6 return pht('Diffusion'); 7 } 8 9 public function getShortDescription() { 10 return pht('Host and Browse Repositories'); 11 } 12 13 public function getBaseURI() { 14 return '/diffusion/'; 15 } 16 17 public function getIcon() { 18 return 'fa-code'; 19 } 20 21 public function isPinnedByDefault(PhabricatorUser $viewer) { 22 return true; 23 } 24 25 public function getHelpDocumentationArticles(PhabricatorUser $viewer) { 26 return array( 27 array( 28 'name' => pht('Diffusion User Guide'), 29 'href' => PhabricatorEnv::getDoclink('Diffusion User Guide'), 30 ), 31 array( 32 'name' => pht('Audit User Guide'), 33 'href' => PhabricatorEnv::getDoclink('Audit User Guide'), 34 ), 35 ); 36 } 37 38 public function getRemarkupRules() { 39 return array( 40 new DiffusionCommitRemarkupRule(), 41 new DiffusionRepositoryRemarkupRule(), 42 new DiffusionRepositoryByIDRemarkupRule(), 43 new DiffusionSourceLinkRemarkupRule(), 44 ); 45 } 46 47 public function getMonograms() { 48 // This is a special case, as r and R mean different things. 49 return array('r', 'R'); 50 } 51 52 public function getRoutes() { 53 $repository_routes = array( 54 '/' => array( 55 '' => 'DiffusionRepositoryController', 56 'repository/(?P<dblob>.*)' => 'DiffusionRepositoryController', 57 'change/(?P<dblob>.*)' => 'DiffusionChangeController', 58 'clone/' => 'DiffusionCloneController', 59 'history/(?P<dblob>.*)' => 'DiffusionHistoryController', 60 'browse/(?P<dblob>.*)' => 'DiffusionBrowseController', 61 'document/(?P<dblob>.*)' 62 => 'DiffusionDocumentController', 63 'blame/(?P<dblob>.*)' 64 => 'DiffusionBlameController', 65 'lastmodified/(?P<dblob>.*)' => 'DiffusionLastModifiedController', 66 'diff/' => 'DiffusionDiffController', 67 'tags/(?P<dblob>.*)' => 'DiffusionTagListController', 68 'branches/(?P<dblob>.*)' => 'DiffusionBranchTableController', 69 'refs/(?P<dblob>.*)' => 'DiffusionRefTableController', 70 'lint/(?P<dblob>.*)' => 'DiffusionLintController', 71 'commit/(?P<commit>[a-z0-9]+)' => array( 72 '/?' => 'DiffusionCommitController', 73 '/branches/' => 'DiffusionCommitBranchesController', 74 '/tags/' => 'DiffusionCommitTagsController', 75 ), 76 'compare/' => 'DiffusionCompareController', 77 'manage/(?:(?P<panel>[^/]+)/)?' 78 => 'DiffusionRepositoryManagePanelsController', 79 'uri/' => array( 80 'view/(?P<id>[0-9]\d*)/' => 'DiffusionRepositoryURIViewController', 81 'disable/(?P<id>[0-9]\d*)/' 82 => 'DiffusionRepositoryURIDisableController', 83 $this->getEditRoutePattern('edit/') 84 => 'DiffusionRepositoryURIEditController', 85 'credential/(?P<id>[0-9]\d*)/(?P<action>edit|remove)/' 86 => 'DiffusionRepositoryURICredentialController', 87 ), 88 'edit/' => array( 89 'activate/' => 'DiffusionRepositoryEditActivateController', 90 'dangerous/' => 'DiffusionRepositoryEditDangerousController', 91 'enormous/' => 'DiffusionRepositoryEditEnormousController', 92 'delete/' => 'DiffusionRepositoryEditDeleteController', 93 'update/' => 'DiffusionRepositoryEditUpdateController', 94 'publish/' => 'DiffusionRepositoryEditPublishingController', 95 'testautomation/' => 'DiffusionRepositoryTestAutomationController', 96 ), 97 'pathtree/(?P<dblob>.*)' => 'DiffusionPathTreeController', 98 ), 99 100 // NOTE: This must come after the rules above; it just gives us a 101 // catch-all for serving repositories over HTTP. We must accept requests 102 // without the trailing "/" because SVN commands don't necessarily 103 // include it. 104 '(?:/.*)?' => 'DiffusionRepositoryDefaultController', 105 ); 106 107 return array( 108 '/(?:'. 109 'r(?P<repositoryCallsign>[A-Z]+)'. 110 '|'. 111 'R(?P<repositoryID>[1-9]\d*):'. 112 ')(?P<commit>[a-f0-9]+)' 113 => 'DiffusionCommitController', 114 115 '/source/(?P<repositoryShortName>[^/]+)' 116 => $repository_routes, 117 118 '/diffusion/' => array( 119 $this->getQueryRoutePattern() 120 => 'DiffusionRepositoryListController', 121 $this->getEditRoutePattern('edit/') => 122 'DiffusionRepositoryEditController', 123 'pushlog/' => array( 124 $this->getQueryRoutePattern() => 'DiffusionPushLogListController', 125 'view/(?P<id>\d+)/' => 'DiffusionPushEventViewController', 126 ), 127 'synclog/' => array( 128 $this->getQueryRoutePattern() => 'DiffusionSyncLogListController', 129 ), 130 'pulllog/' => array( 131 $this->getQueryRoutePattern() => 'DiffusionPullLogListController', 132 ), 133 '(?P<repositoryCallsign>[A-Z]+)' => $repository_routes, 134 '(?P<repositoryID>[1-9]\d*)' => $repository_routes, 135 136 'identity/' => array( 137 $this->getQueryRoutePattern() => 138 'DiffusionIdentityListController', 139 $this->getEditRoutePattern('edit/') => 140 'DiffusionIdentityEditController', 141 'view/(?P<id>[^/]+)/' => 142 'DiffusionIdentityViewController', 143 ), 144 145 'inline/' => array( 146 'edit/(?P<phid>[^/]+)/' => 'DiffusionInlineCommentController', 147 ), 148 'services/' => array( 149 'path/' => array( 150 'complete/' => 'DiffusionPathCompleteController', 151 'validate/' => 'DiffusionPathValidateController', 152 ), 153 ), 154 'symbol/(?P<name>[^/]+)/' => 'DiffusionSymbolController', 155 'external/' => 'DiffusionExternalController', 156 'lint/' => 'DiffusionLintController', 157 158 'commit/' => array( 159 $this->getQueryRoutePattern() => 160 'DiffusionCommitListController', 161 $this->getEditRoutePattern('edit/') => 162 'DiffusionCommitEditController', 163 ), 164 'picture/(?P<id>[0-9]\d*)/' 165 => 'DiffusionRepositoryProfilePictureController', 166 ), 167 ); 168 } 169 170 public function getApplicationOrder() { 171 return 0.120; 172 } 173 174 protected function getCustomCapabilities() { 175 return array( 176 DiffusionDefaultViewCapability::CAPABILITY => array( 177 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST, 178 'capability' => PhabricatorPolicyCapability::CAN_VIEW, 179 ), 180 DiffusionDefaultEditCapability::CAPABILITY => array( 181 'default' => PhabricatorPolicies::POLICY_ADMIN, 182 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST, 183 'capability' => PhabricatorPolicyCapability::CAN_EDIT, 184 ), 185 DiffusionDefaultPushCapability::CAPABILITY => array( 186 'template' => PhabricatorRepositoryRepositoryPHIDType::TYPECONST, 187 ), 188 DiffusionCreateRepositoriesCapability::CAPABILITY => array( 189 'default' => PhabricatorPolicies::POLICY_ADMIN, 190 ), 191 PhabricatorRepositoryIdentityEditViewCapability::CAPABILITY => array( 192 'default' => PhabricatorPolicies::POLICY_USER, 193 ), 194 ); 195 } 196 197 public function getMailCommandObjects() { 198 return array( 199 'commit' => array( 200 'name' => pht('Email Commands: Commits'), 201 'header' => pht('Interacting with Commits'), 202 'object' => new PhabricatorRepositoryCommit(), 203 'summary' => pht( 204 'This page documents the commands you can use to interact with '. 205 'commits and audits in Diffusion.'), 206 ), 207 ); 208 } 209 210 public function getApplicationSearchDocumentTypes() { 211 return array( 212 PhabricatorRepositoryCommitPHIDType::TYPECONST, 213 ); 214 } 215 216}