@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.

Add an "Accepting reviewers" Herald field for commits

Summary:
See PHI262. Fixes T12578. Although this is a bit niche and probably better accomplished through advisory/soft measures ("Add blocking reviewers") in most cases, it isn't difficult to implement and doesn't create any technical or product tension.

If installs write a rule that blocks commits, that will probably also naturally lead them to an "add reviewers" rule anyway.

Also, allow packages to be hit with the typeahead. They're valid reviewers but previously you couldn't write rules against them, for no actual reason.

Test Plan: Used test console to run this against commits, got sensible results for the field value.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T12578

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

+92 -2
+4
src/__phutil_library_map__.php
··· 696 696 'DiffusionCommitRevertsCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsCommitEdgeType.php', 697 697 'DiffusionCommitReviewerHeraldField' => 'applications/diffusion/herald/DiffusionCommitReviewerHeraldField.php', 698 698 'DiffusionCommitRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptedHeraldField.php', 699 + 'DiffusionCommitRevisionAcceptingReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptingReviewersHeraldField.php', 699 700 'DiffusionCommitRevisionHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionHeraldField.php', 700 701 'DiffusionCommitRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php', 701 702 'DiffusionCommitRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionSubscribersHeraldField.php', ··· 809 810 'DiffusionPreCommitContentRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryHeraldField.php', 810 811 'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryProjectsHeraldField.php', 811 812 'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptedHeraldField.php', 813 + 'DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField.php', 812 814 'DiffusionPreCommitContentRevisionHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionHeraldField.php', 813 815 'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionReviewersHeraldField.php', 814 816 'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionSubscribersHeraldField.php', ··· 5755 5757 'DiffusionCommitRevertsCommitEdgeType' => 'PhabricatorEdgeType', 5756 5758 'DiffusionCommitReviewerHeraldField' => 'DiffusionCommitHeraldField', 5757 5759 'DiffusionCommitRevisionAcceptedHeraldField' => 'DiffusionCommitHeraldField', 5760 + 'DiffusionCommitRevisionAcceptingReviewersHeraldField' => 'DiffusionCommitHeraldField', 5758 5761 'DiffusionCommitRevisionHeraldField' => 'DiffusionCommitHeraldField', 5759 5762 'DiffusionCommitRevisionReviewersHeraldField' => 'DiffusionCommitHeraldField', 5760 5763 'DiffusionCommitRevisionSubscribersHeraldField' => 'DiffusionCommitHeraldField', ··· 5871 5874 'DiffusionPreCommitContentRepositoryHeraldField' => 'DiffusionPreCommitContentHeraldField', 5872 5875 'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', 5873 5876 'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'DiffusionPreCommitContentHeraldField', 5877 + 'DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField', 5874 5878 'DiffusionPreCommitContentRevisionHeraldField' => 'DiffusionPreCommitContentHeraldField', 5875 5879 'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField', 5876 5880 'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'DiffusionPreCommitContentHeraldField',
+43
src/applications/diffusion/herald/DiffusionCommitRevisionAcceptingReviewersHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionCommitRevisionAcceptingReviewersHeraldField 4 + extends DiffusionCommitHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.commit.revision.accepting'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht('Accepting reviewers'); 10 + } 11 + 12 + public function getFieldGroupKey() { 13 + return HeraldRelatedFieldGroup::FIELDGROUPKEY; 14 + } 15 + 16 + public function getHeraldFieldValue($object) { 17 + $revision = $this->getAdapter()->loadDifferentialRevision(); 18 + 19 + if (!$revision) { 20 + return array(); 21 + } 22 + 23 + $diff_phid = $revision->getActiveDiffPHID(); 24 + 25 + $reviewer_phids = array(); 26 + foreach ($revision->getReviewers() as $reviewer) { 27 + if ($reviewer->isAccepted($diff_phid)) { 28 + $reviewer_phids[] = $reviewer->getReviewerPHID(); 29 + } 30 + } 31 + 32 + return $reviewer_phids; 33 + } 34 + 35 + protected function getHeraldFieldStandardType() { 36 + return self::STANDARD_PHID_LIST; 37 + } 38 + 39 + protected function getDatasource() { 40 + return new DifferentialReviewerDatasource(); 41 + } 42 + 43 + }
+1 -1
src/applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php
··· 28 28 } 29 29 30 30 protected function getDatasource() { 31 - return new PhabricatorProjectOrUserDatasource(); 31 + return new DifferentialReviewerDatasource(); 32 32 } 33 33 34 34 }
+43
src/applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField.php
··· 1 + <?php 2 + 3 + final class DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField 4 + extends DiffusionPreCommitContentHeraldField { 5 + 6 + const FIELDCONST = 'diffusion.pre.content.revision.accepting'; 7 + 8 + public function getHeraldFieldName() { 9 + return pht('Accepting reviewers'); 10 + } 11 + 12 + public function getFieldGroupKey() { 13 + return HeraldRelatedFieldGroup::FIELDGROUPKEY; 14 + } 15 + 16 + public function getHeraldFieldValue($object) { 17 + $revision = $this->getAdapter()->getRevision(); 18 + 19 + if (!$revision) { 20 + return array(); 21 + } 22 + 23 + $diff_phid = $revision->getActiveDiffPHID(); 24 + 25 + $reviewer_phids = array(); 26 + foreach ($revision->getReviewers() as $reviewer) { 27 + if ($reviewer->isAccepted($diff_phid)) { 28 + $reviewer_phids[] = $reviewer->getReviewerPHID(); 29 + } 30 + } 31 + 32 + return $reviewer_phids; 33 + } 34 + 35 + protected function getHeraldFieldStandardType() { 36 + return self::STANDARD_PHID_LIST; 37 + } 38 + 39 + protected function getDatasource() { 40 + return new DifferentialReviewerDatasource(); 41 + } 42 + 43 + }
+1 -1
src/applications/diffusion/herald/DiffusionPreCommitContentRevisionReviewersHeraldField.php
··· 28 28 } 29 29 30 30 protected function getDatasource() { 31 - return new PhabricatorProjectOrUserDatasource(); 31 + return new DifferentialReviewerDatasource(); 32 32 } 33 33 34 34 }