@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

Give Owners packages the "O" monogram

Summary:
Ref T10939. This isn't ideal because it's easy to confuse with zero ("O" vs "0") but I think this will mostly be read-only so it's probably one of the least-bad uses we could make of "O". We haven't really gotten into trouble with "I" (vs "1") for initiatives. Still, open to better ideas.

The goal here is to allow commit messages to include packages in some reasonable way, like `Reviewers: O123 Package Name, epriestley, alincoln`. The parser will ignore the "Package Name" part, that's just for humans. And I don't expect humans to type this, but when the use `arc diff --edit` or similar to update an //existing// revision, the reviewer needs to be represented somehow. It also needs to appear in the commit messages that `arc land` finalizes somehow.

I didn't hook up `/O123` as a URI, but this should do everything else I think.

Test Plan:
- Viewed package list.
- Viewed package detail.
- Did global search for `O12`.
- Used `O12` and `{O12}` remarkup rules.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10939

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

+69 -3
+2
src/__phutil_library_map__.php
··· 2833 2833 'PhabricatorOwnersPackageOwnerDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageOwnerDatasource.php', 2834 2834 'PhabricatorOwnersPackagePHIDType' => 'applications/owners/phid/PhabricatorOwnersPackagePHIDType.php', 2835 2835 'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php', 2836 + 'PhabricatorOwnersPackageRemarkupRule' => 'applications/owners/remarkup/PhabricatorOwnersPackageRemarkupRule.php', 2836 2837 'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php', 2837 2838 'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php', 2838 2839 'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php', ··· 7411 7412 'PhabricatorOwnersPackageOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 7412 7413 'PhabricatorOwnersPackagePHIDType' => 'PhabricatorPHIDType', 7413 7414 'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 7415 + 'PhabricatorOwnersPackageRemarkupRule' => 'PhabricatorObjectRemarkupRule', 7414 7416 'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine', 7415 7417 'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase', 7416 7418 'PhabricatorOwnersPackageTransaction' => 'PhabricatorApplicationTransaction',
+6
src/applications/owners/application/PhabricatorOwnersApplication.php
··· 39 39 return self::GROUP_UTILITIES; 40 40 } 41 41 42 + public function getRemarkupRules() { 43 + return array( 44 + new PhabricatorOwnersPackageRemarkupRule(), 45 + ); 46 + } 47 + 42 48 public function getRoutes() { 43 49 return array( 44 50 '/owners/' => array(
+1 -1
src/applications/owners/controller/PhabricatorOwnersDetailController.php
··· 144 144 } 145 145 146 146 $crumbs = $this->buildApplicationCrumbs(); 147 - $crumbs->addTextCrumb($package->getName()); 147 + $crumbs->addTextCrumb($package->getMonogram()); 148 148 $crumbs->setBorder(true); 149 149 150 150 $timeline = $this->buildTransactionTimeline(
+36 -1
src/applications/owners/phid/PhabricatorOwnersPackagePHIDType.php
··· 36 36 foreach ($handles as $phid => $handle) { 37 37 $package = $objects[$phid]; 38 38 39 + $monogram = $package->getMonogram(); 39 40 $name = $package->getName(); 40 41 $id = $package->getID(); 41 42 42 - $handle->setName($name); 43 + $handle->setName($monogram); 44 + $handle->setFullName("{$monogram}: {$name}"); 43 45 $handle->setURI("/owners/package/{$id}/"); 46 + 47 + if ($package->isArchived()) { 48 + $handle->setStatus(PhabricatorObjectHandle::STATUS_CLOSED); 49 + } 44 50 } 51 + } 52 + 53 + public function canLoadNamedObject($name) { 54 + return preg_match('/^O\d*[1-9]\d*$/i', $name); 55 + } 56 + 57 + public function loadNamedObjects( 58 + PhabricatorObjectQuery $query, 59 + array $names) { 60 + 61 + $id_map = array(); 62 + foreach ($names as $name) { 63 + $id = (int)substr($name, 1); 64 + $id_map[$id][] = $name; 65 + } 66 + 67 + $objects = id(new PhabricatorOwnersPackageQuery()) 68 + ->setViewer($query->getViewer()) 69 + ->withIDs(array_keys($id_map)) 70 + ->execute(); 71 + 72 + $results = array(); 73 + foreach ($objects as $id => $object) { 74 + foreach (idx($id_map, $id, array()) as $name) { 75 + $results[$name] = $object; 76 + } 77 + } 78 + 79 + return $results; 45 80 } 46 81 47 82 }
+1 -1
src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
··· 136 136 137 137 $item = id(new PHUIObjectItemView()) 138 138 ->setObject($package) 139 - ->setObjectName(pht('Package %d', $id)) 139 + ->setObjectName($package->getMonogram()) 140 140 ->setHeader($package->getName()) 141 141 ->setHref('/owners/package/'.$id.'/'); 142 142
+19
src/applications/owners/remarkup/PhabricatorOwnersPackageRemarkupRule.php
··· 1 + <?php 2 + 3 + final class PhabricatorOwnersPackageRemarkupRule 4 + extends PhabricatorObjectRemarkupRule { 5 + 6 + protected function getObjectNamePrefix() { 7 + return 'O'; 8 + } 9 + 10 + protected function loadObjects(array $ids) { 11 + $viewer = $this->getEngine()->getConfig('viewer'); 12 + 13 + return id(new PhabricatorOwnersPackageQuery()) 14 + ->setViewer($viewer) 15 + ->withIDs($ids) 16 + ->execute(); 17 + } 18 + 19 + }
+4
src/applications/owners/storage/PhabricatorOwnersPackage.php
··· 289 289 return isset($owner_phids[$phid]); 290 290 } 291 291 292 + public function getMonogram() { 293 + return 'O'.$this->getID(); 294 + } 295 + 292 296 293 297 /* -( PhabricatorPolicyInterface )----------------------------------------- */ 294 298