@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

Add "Committer's projects" and "Author's projects" fields to Herald commit rules

Summary:
Ref T13093. See PHI396. These are possibly somewhat niche, but reasonable to support and consistent with the existing "Pusher's projects".

Also relabel "Pusher's projects" and "Project tags" for consistency and, hopefully, clarity.

Test Plan:
- Created new "commit" and "hook: commit content" Herald rules which run against "Author's projects" and "Committer's projects".
- Test console'd the "Commit" rules.
- Pushed through the "Hook" rule.
- In all cases, saw fields populate appropriately.

Maniphest Tasks: T13093

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

+164 -4
+8
src/__phutil_library_map__.php
··· 652 652 'DiffusionCommitAuditorsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuditorsHeraldField.php', 653 653 'DiffusionCommitAuditorsTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditorsTransaction.php', 654 654 'DiffusionCommitAuthorHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php', 655 + 'DiffusionCommitAuthorProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php', 655 656 'DiffusionCommitAutocloseHeraldField' => 'applications/diffusion/herald/DiffusionCommitAutocloseHeraldField.php', 656 657 'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php', 657 658 'DiffusionCommitBranchesHeraldField' => 'applications/diffusion/herald/DiffusionCommitBranchesHeraldField.php', 658 659 'DiffusionCommitCommitterHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php', 660 + 'DiffusionCommitCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php', 659 661 'DiffusionCommitConcernTransaction' => 'applications/diffusion/xaction/DiffusionCommitConcernTransaction.php', 660 662 'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php', 661 663 'DiffusionCommitDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentAddedHeraldField.php', ··· 801 803 'DiffusionPhpExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPhpExternalSymbolsSource.php', 802 804 'DiffusionPreCommitContentAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAffectedFilesHeraldField.php', 803 805 'DiffusionPreCommitContentAuthorHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorHeraldField.php', 806 + 'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorProjectsHeraldField.php', 804 807 'DiffusionPreCommitContentAuthorRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorRawHeraldField.php', 805 808 'DiffusionPreCommitContentBranchesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBranchesHeraldField.php', 806 809 'DiffusionPreCommitContentCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterHeraldField.php', 810 + 'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterProjectsHeraldField.php', 807 811 'DiffusionPreCommitContentCommitterRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterRawHeraldField.php', 808 812 'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentAddedHeraldField.php', 809 813 'DiffusionPreCommitContentDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentHeraldField.php', ··· 5867 5871 'DiffusionCommitAuditorsHeraldField' => 'DiffusionCommitHeraldField', 5868 5872 'DiffusionCommitAuditorsTransaction' => 'DiffusionCommitTransactionType', 5869 5873 'DiffusionCommitAuthorHeraldField' => 'DiffusionCommitHeraldField', 5874 + 'DiffusionCommitAuthorProjectsHeraldField' => 'DiffusionCommitHeraldField', 5870 5875 'DiffusionCommitAutocloseHeraldField' => 'DiffusionCommitHeraldField', 5871 5876 'DiffusionCommitBranchesController' => 'DiffusionController', 5872 5877 'DiffusionCommitBranchesHeraldField' => 'DiffusionCommitHeraldField', 5873 5878 'DiffusionCommitCommitterHeraldField' => 'DiffusionCommitHeraldField', 5879 + 'DiffusionCommitCommitterProjectsHeraldField' => 'DiffusionCommitHeraldField', 5874 5880 'DiffusionCommitConcernTransaction' => 'DiffusionCommitAuditTransaction', 5875 5881 'DiffusionCommitController' => 'DiffusionController', 5876 5882 'DiffusionCommitDiffContentAddedHeraldField' => 'DiffusionCommitHeraldField', ··· 6019 6025 'DiffusionPhpExternalSymbolsSource' => 'DiffusionExternalSymbolsSource', 6020 6026 'DiffusionPreCommitContentAffectedFilesHeraldField' => 'DiffusionPreCommitContentHeraldField', 6021 6027 'DiffusionPreCommitContentAuthorHeraldField' => 'DiffusionPreCommitContentHeraldField', 6028 + 'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', 6022 6029 'DiffusionPreCommitContentAuthorRawHeraldField' => 'DiffusionPreCommitContentHeraldField', 6023 6030 'DiffusionPreCommitContentBranchesHeraldField' => 'DiffusionPreCommitContentHeraldField', 6024 6031 'DiffusionPreCommitContentCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField', 6032 + 'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', 6025 6033 'DiffusionPreCommitContentCommitterRawHeraldField' => 'DiffusionPreCommitContentHeraldField', 6026 6034 'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'DiffusionPreCommitContentHeraldField', 6027 6035 'DiffusionPreCommitContentDiffContentHeraldField' => 'DiffusionPreCommitContentHeraldField',
+38
src/applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionCommitAuthorProjectsHeraldField 4 + extends DiffusionCommitHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.commit.author.projects'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht("Author's projects"); 10 + } 11 + 12 + public function getHeraldFieldValue($object) { 13 + $adapter = $this->getAdapter(); 14 + 15 + $phid = $object->getCommitData()->getCommitDetail('authorPHID'); 16 + if (!$phid) { 17 + return array(); 18 + } 19 + 20 + $viewer = $adapter->getViewer(); 21 + 22 + $projects = id(new PhabricatorProjectQuery()) 23 + ->setViewer($viewer) 24 + ->withMemberPHIDs(array($phid)) 25 + ->execute(); 26 + 27 + return mpull($projects, 'getPHID'); 28 + } 29 + 30 + protected function getHeraldFieldStandardType() { 31 + return self::STANDARD_PHID_LIST; 32 + } 33 + 34 + protected function getDatasource() { 35 + return new PhabricatorProjectDatasource(); 36 + } 37 + 38 + }
+38
src/applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionCommitCommitterProjectsHeraldField 4 + extends DiffusionCommitHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.commit.committer.projects'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht("Committer's projects"); 10 + } 11 + 12 + public function getHeraldFieldValue($object) { 13 + $adapter = $this->getAdapter(); 14 + 15 + $phid = $object->getCommitData()->getCommitDetail('committerPHID'); 16 + if (!$phid) { 17 + return array(); 18 + } 19 + 20 + $viewer = $adapter->getViewer(); 21 + 22 + $projects = id(new PhabricatorProjectQuery()) 23 + ->setViewer($viewer) 24 + ->withMemberPHIDs(array($phid)) 25 + ->execute(); 26 + 27 + return mpull($projects, 'getPHID'); 28 + } 29 + 30 + protected function getHeraldFieldStandardType() { 31 + return self::STANDARD_PHID_LIST; 32 + } 33 + 34 + protected function getDatasource() { 35 + return new PhabricatorProjectDatasource(); 36 + } 37 + 38 + }
+38
src/applications/diffusion/herald/DiffusionPreCommitContentAuthorProjectsHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionPreCommitContentAuthorProjectsHeraldField 4 + extends DiffusionPreCommitContentHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.pre.commit.author.projects'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht("Author's projects"); 10 + } 11 + 12 + public function getHeraldFieldValue($object) { 13 + $adapter = $this->getAdapter(); 14 + 15 + $phid = $adapter->getAuthorPHID(); 16 + if (!$phid) { 17 + return array(); 18 + } 19 + 20 + $viewer = $adapter->getViewer(); 21 + 22 + $projects = id(new PhabricatorProjectQuery()) 23 + ->setViewer($viewer) 24 + ->withMemberPHIDs(array($phid)) 25 + ->execute(); 26 + 27 + return mpull($projects, 'getPHID'); 28 + } 29 + 30 + protected function getHeraldFieldStandardType() { 31 + return self::STANDARD_PHID_LIST; 32 + } 33 + 34 + protected function getDatasource() { 35 + return new PhabricatorProjectDatasource(); 36 + } 37 + 38 + }
+38
src/applications/diffusion/herald/DiffusionPreCommitContentCommitterProjectsHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionPreCommitContentCommitterProjectsHeraldField 4 + extends DiffusionPreCommitContentHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.pre.commit.committer.projects'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht("Committer's projects"); 10 + } 11 + 12 + public function getHeraldFieldValue($object) { 13 + $adapter = $this->getAdapter(); 14 + 15 + $phid = $adapter->getCommitterPHID(); 16 + if (!$phid) { 17 + return array(); 18 + } 19 + 20 + $viewer = $adapter->getViewer(); 21 + 22 + $projects = id(new PhabricatorProjectQuery()) 23 + ->setViewer($viewer) 24 + ->withMemberPHIDs(array($phid)) 25 + ->execute(); 26 + 27 + return mpull($projects, 'getPHID'); 28 + } 29 + 30 + protected function getHeraldFieldStandardType() { 31 + return self::STANDARD_PHID_LIST; 32 + } 33 + 34 + protected function getDatasource() { 35 + return new PhabricatorProjectDatasource(); 36 + } 37 + 38 + }
+1 -1
src/applications/diffusion/herald/DiffusionPreCommitContentPusherProjectsHeraldField.php
··· 6 6 const FIELDCONST = 'diffusion.pre.content.pusher.projects'; 7 7 8 8 public function getHeraldFieldName() { 9 - return pht('Pusher projects'); 9 + return pht("Pusher's projects"); 10 10 } 11 11 12 12 public function getHeraldFieldValue($object) {
+1 -1
src/applications/diffusion/herald/DiffusionPreCommitRefPusherProjectsHeraldField.php
··· 6 6 const FIELDCONST = 'diffusion.pre.ref.pusher.projects'; 7 7 8 8 public function getHeraldFieldName() { 9 - return pht('Pusher projects'); 9 + return pht("Pusher's projects"); 10 10 } 11 11 12 12 public function getHeraldFieldValue($object) {
+1 -1
src/applications/diffusion/herald/DiffusionPreCommitRefRepositoryProjectsHeraldField.php
··· 16 16 } 17 17 18 18 protected function getHeraldFieldStandardType() { 19 - return HeraldField::STANDARD_PHID_LIST; 19 + return self::STANDARD_PHID_LIST; 20 20 } 21 21 22 22 protected function getDatasource() {
+1 -1
src/applications/project/herald/HeraldProjectsField.php
··· 5 5 const FIELDCONST = 'projects'; 6 6 7 7 public function getHeraldFieldName() { 8 - return pht('Projects'); 8 + return pht('Project tags'); 9 9 } 10 10 11 11 public function getFieldGroupKey() {