@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 a "default view" policy to Differential

Summary:
Ref T603. Allows the Differential view policy to be configured with a default.

I've omitted "edit" because I want to wait and see how comment/comment-action policies work out. I could imagine locking "edit" down to only the owner at some point, and providing a wider "interact" capability, or something like that, which would cover accept/reject/commandeer. Users in this group could still edit indirectly by commandeering first.

Test Plan: Created new revisions from the CLI and conduit.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T603

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

+54 -40
+2
src/__phutil_library_map__.php
··· 309 309 'DifferentialBranchFieldSpecification' => 'applications/differential/field/specification/DifferentialBranchFieldSpecification.php', 310 310 'DifferentialCCWelcomeMail' => 'applications/differential/mail/DifferentialCCWelcomeMail.php', 311 311 'DifferentialCCsFieldSpecification' => 'applications/differential/field/specification/DifferentialCCsFieldSpecification.php', 312 + 'DifferentialCapabilityDefaultView' => 'applications/differential/capability/DifferentialCapabilityDefaultView.php', 312 313 'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php', 313 314 'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php', 314 315 'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php', ··· 2410 2411 'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification', 2411 2412 'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail', 2412 2413 'DifferentialCCsFieldSpecification' => 'DifferentialFieldSpecification', 2414 + 'DifferentialCapabilityDefaultView' => 'PhabricatorPolicyCapability', 2413 2415 'DifferentialChangeset' => 'DifferentialDAO', 2414 2416 'DifferentialChangesetDetailView' => 'AphrontView', 2415 2417 'DifferentialChangesetHTMLRenderer' => 'DifferentialChangesetRenderer',
+9
src/applications/differential/application/PhabricatorApplicationDifferential.php
··· 118 118 return $status; 119 119 } 120 120 121 + protected function getCustomCapabilities() { 122 + return array( 123 + DifferentialCapabilityDefaultView::CAPABILITY => array( 124 + 'caption' => pht( 125 + 'Default view policy for newly created revisions.') 126 + ), 127 + ); 128 + } 129 + 121 130 } 122 131
+16
src/applications/differential/capability/DifferentialCapabilityDefaultView.php
··· 1 + <?php 2 + 3 + final class DifferentialCapabilityDefaultView 4 + extends PhabricatorPolicyCapability { 5 + 6 + const CAPABILITY = 'differential.default.view'; 7 + 8 + public function getCapabilityKey() { 9 + return self::CAPABILITY; 10 + } 11 + 12 + public function getCapabilityName() { 13 + return pht('Default View Policy'); 14 + } 15 + 16 + }
+4 -4
src/applications/differential/conduit/ConduitAPI_differential_getcommitmessage_Method.php
··· 30 30 31 31 protected function execute(ConduitAPIRequest $request) { 32 32 $id = $request->getValue('revision_id'); 33 + $viewer = $request->getUser(); 33 34 34 35 if ($id) { 35 36 $revision = id(new DifferentialRevisionQuery()) 36 37 ->withIDs(array($id)) 37 - ->setViewer($request->getUser()) 38 + ->setViewer($viewer) 38 39 ->needRelationships(true) 39 40 ->needReviewerStatus(true) 40 41 ->executeOne(); ··· 43 44 throw new ConduitException('ERR_NOT_FOUND'); 44 45 } 45 46 } else { 46 - $revision = new DifferentialRevision(); 47 - $revision->attachRelationships(array()); 47 + $revision = DifferentialRevision::initializeNewRevision($viewer); 48 48 } 49 49 50 50 ··· 57 57 $pro_tips = array(); 58 58 59 59 foreach ($aux_fields as $key => $aux_field) { 60 - $aux_field->setUser($request->getUser()); 60 + $aux_field->setUser($viewer); 61 61 $aux_field->setRevision($revision); 62 62 $pro_tips[] = $aux_field->getCommitMessageTips(); 63 63 if (!$aux_field->shouldAppearOnCommitMessage()) {
+1 -2
src/applications/differential/controller/DifferentialRevisionEditController.php
··· 32 32 return new Aphront404Response(); 33 33 } 34 34 } else { 35 - $revision = new DifferentialRevision(); 36 - $revision->attachRelationships(array()); 35 + $revision = DifferentialRevision::initializeNewRevision($viewer); 37 36 } 38 37 39 38 $aux_fields = $this->loadAuxiliaryFields($revision);
+1 -29
src/applications/differential/editor/DifferentialRevisionEditor.php
··· 40 40 DifferentialDiff $diff, 41 41 PhabricatorUser $actor) { 42 42 43 - $revision = new DifferentialRevision(); 43 + $revision = DifferentialRevision::initializeNewRevision($actor); 44 44 $revision->setPHID($revision->generatePHID()); 45 - $revision->setAuthorPHID($actor->getPHID()); 46 - $revision->setStatus(ArcanistDifferentialRevisionStatus::NEEDS_REVIEW); 47 45 48 46 $editor = new DifferentialRevisionEditor($revision); 49 47 $editor->setActor($actor); ··· 168 166 $revision = $this->getRevision(); 169 167 170 168 $is_new = $this->isNewRevision(); 171 - if ($is_new) { 172 - $this->initializeNewRevision($revision); 173 - } 174 169 175 170 $revision->loadRelationships(); 176 171 ··· 1100 1095 implode(', ', $sql)); 1101 1096 } 1102 1097 } 1103 - 1104 - private function initializeNewRevision(DifferentialRevision $revision) { 1105 - // These fields aren't nullable; set them to sensible defaults if they 1106 - // haven't been configured. We're just doing this so we can generate an 1107 - // ID for the revision if we don't have one already. 1108 - $revision->setLineCount(0); 1109 - if ($revision->getStatus() === null) { 1110 - $revision->setStatus(ArcanistDifferentialRevisionStatus::NEEDS_REVIEW); 1111 - } 1112 - if ($revision->getTitle() === null) { 1113 - $revision->setTitle('Untitled Revision'); 1114 - } 1115 - if ($revision->getAuthorPHID() === null) { 1116 - $revision->setAuthorPHID($this->getActorPHID()); 1117 - } 1118 - if ($revision->getSummary() === null) { 1119 - $revision->setSummary(''); 1120 - } 1121 - if ($revision->getTestPlan() === null) { 1122 - $revision->setTestPlan(''); 1123 - } 1124 - } 1125 - 1126 1098 1127 1099 /** 1128 1100 * Try to move a revision to "accepted". We look for:
+1 -1
src/applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php
··· 6 6 public function generate() { 7 7 $author = $this->loadPhabrictorUser(); 8 8 $authorPHID = $author->getPHID(); 9 - $revision = new DifferentialRevision(); 9 + $revision = DifferentialRevision::initializeNewRevision($author); 10 10 $revision->setTitle($this->generateTitle()); 11 11 $revision->setSummary($this->generateDescription()); 12 12 $revision->setTestPlan($this->generateDescription());
+20 -4
src/applications/differential/storage/DifferentialRevision.php
··· 6 6 PhabricatorPolicyInterface, 7 7 PhrequentTrackableInterface { 8 8 9 - protected $title; 9 + protected $title = ''; 10 10 protected $originalTitle; 11 11 protected $status; 12 12 13 - protected $summary; 14 - protected $testPlan; 13 + protected $summary = ''; 14 + protected $testPlan = ''; 15 15 16 16 protected $phid; 17 17 protected $authorPHID; ··· 19 19 20 20 protected $dateCommitted; 21 21 22 - protected $lineCount; 22 + protected $lineCount = 0; 23 23 protected $attached = array(); 24 24 25 25 protected $mailKey; ··· 43 43 44 44 const RELATION_REVIEWER = 'revw'; 45 45 const RELATION_SUBSCRIBED = 'subd'; 46 + 47 + public static function initializeNewRevision(PhabricatorUser $actor) { 48 + $app = id(new PhabricatorApplicationQuery()) 49 + ->setViewer($actor) 50 + ->withClasses(array('PhabricatorApplicationDifferential')) 51 + ->executeOne(); 52 + 53 + $view_policy = $app->getPolicy( 54 + DifferentialCapabilityDefaultView::CAPABILITY); 55 + 56 + return id(new DifferentialRevision()) 57 + ->setViewPolicy($view_policy) 58 + ->setAuthorPHID($actor->getPHID()) 59 + ->attachRelationships(array()) 60 + ->setStatus(ArcanistDifferentialRevisionStatus::NEEDS_REVIEW); 61 + } 46 62 47 63 public function getConfiguration() { 48 64 return array(