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

Make objects implementing BuildableInterface produce a BuildableEngine

Summary:
Ref T13110. Currently, build status is published the same way for every Buildable by the BuildEngine.

I want to change this to delegate publishing to each Buildable, particularly so that Differential may use more detailed rules for handling builds and drafts.

Rather than add additional methods to the existing `BuildableInterface`, add an engine generator method instead. This is a pattern which has seen more use recently (e.g., in Ferret) and lets us pay a little more upfront to pull complex pieces of logic out of the main class and let them use inheritence more easily. If we had Traits that might cover this to some degree.

I'd expect to eventually reduce the size of `BuildableInterface` and move the `CircleCI` and `BuildKite` interfaces so that the `BuildableEngine` implements them instead of the main object.

Here, this new engine does nothing and is never instantiated. In upcoming changes, publishing logic will move into it so that Differential can handle publishing differently.

Test Plan: Ran `arc liberate`, loaded pages, grepped for `BuildableInterface`.

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13110

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

+36
+6
src/__phutil_library_map__.php
··· 380 380 'DifferentialBlockHeraldAction' => 'applications/differential/herald/DifferentialBlockHeraldAction.php', 381 381 'DifferentialBlockingReviewerDatasource' => 'applications/differential/typeahead/DifferentialBlockingReviewerDatasource.php', 382 382 'DifferentialBranchField' => 'applications/differential/customfield/DifferentialBranchField.php', 383 + 'DifferentialBuildableEngine' => 'applications/differential/harbormaster/DifferentialBuildableEngine.php', 383 384 'DifferentialChangeDetailMailView' => 'applications/differential/mail/DifferentialChangeDetailMailView.php', 384 385 'DifferentialChangeHeraldFieldGroup' => 'applications/differential/herald/DifferentialChangeHeraldFieldGroup.php', 385 386 'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php', ··· 638 639 'DiffusionBrowseQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBrowseQueryConduitAPIMethod.php', 639 640 'DiffusionBrowseResultSet' => 'applications/diffusion/data/DiffusionBrowseResultSet.php', 640 641 'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php', 642 + 'DiffusionBuildableEngine' => 'applications/diffusion/harbormaster/DiffusionBuildableEngine.php', 641 643 'DiffusionCacheEngineExtension' => 'applications/diffusion/engineextension/DiffusionCacheEngineExtension.php', 642 644 'DiffusionCachedResolveRefsQuery' => 'applications/diffusion/query/DiffusionCachedResolveRefsQuery.php', 643 645 'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php', ··· 1285 1287 'HarbormasterBuildable' => 'applications/harbormaster/storage/HarbormasterBuildable.php', 1286 1288 'HarbormasterBuildableActionController' => 'applications/harbormaster/controller/HarbormasterBuildableActionController.php', 1287 1289 'HarbormasterBuildableAdapterInterface' => 'applications/harbormaster/herald/HarbormasterBuildableAdapterInterface.php', 1290 + 'HarbormasterBuildableEngine' => 'applications/harbormaster/engine/HarbormasterBuildableEngine.php', 1288 1291 'HarbormasterBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildableInterface.php', 1289 1292 'HarbormasterBuildableListController' => 'applications/harbormaster/controller/HarbormasterBuildableListController.php', 1290 1293 'HarbormasterBuildablePHIDType' => 'applications/harbormaster/phid/HarbormasterBuildablePHIDType.php', ··· 5586 5589 'DifferentialBlockHeraldAction' => 'HeraldAction', 5587 5590 'DifferentialBlockingReviewerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 5588 5591 'DifferentialBranchField' => 'DifferentialCustomField', 5592 + 'DifferentialBuildableEngine' => 'HarbormasterBuildableEngine', 5589 5593 'DifferentialChangeDetailMailView' => 'DifferentialMailView', 5590 5594 'DifferentialChangeHeraldFieldGroup' => 'HeraldFieldGroup', 5591 5595 'DifferentialChangeType' => 'Phobject', ··· 5883 5887 'DiffusionBrowseQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 5884 5888 'DiffusionBrowseResultSet' => 'Phobject', 5885 5889 'DiffusionBrowseTableView' => 'DiffusionView', 5890 + 'DiffusionBuildableEngine' => 'HarbormasterBuildableEngine', 5886 5891 'DiffusionCacheEngineExtension' => 'PhabricatorCacheEngineExtension', 5887 5892 'DiffusionCachedResolveRefsQuery' => 'DiffusionLowLevelQuery', 5888 5893 'DiffusionChangeController' => 'DiffusionController', ··· 6636 6641 'PhabricatorDestructibleInterface', 6637 6642 ), 6638 6643 'HarbormasterBuildableActionController' => 'HarbormasterController', 6644 + 'HarbormasterBuildableEngine' => 'Phobject', 6639 6645 'HarbormasterBuildableListController' => 'HarbormasterController', 6640 6646 'HarbormasterBuildablePHIDType' => 'PhabricatorPHIDType', 6641 6647 'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+4
src/applications/differential/harbormaster/DifferentialBuildableEngine.php
··· 1 + <?php 2 + 3 + final class DifferentialBuildableEngine 4 + extends HarbormasterBuildableEngine {}
+4
src/applications/differential/storage/DifferentialDiff.php
··· 557 557 ); 558 558 } 559 559 560 + public function newBuildableEngine() { 561 + return new DifferentialBuildableEngine(); 562 + } 563 + 560 564 561 565 /* -( HarbormasterCircleCIBuildableInterface )----------------------------- */ 562 566
+4
src/applications/differential/storage/DifferentialRevision.php
··· 800 800 return array(); 801 801 } 802 802 803 + public function newBuildableEngine() { 804 + return new DifferentialBuildableEngine(); 805 + } 806 + 803 807 804 808 /* -( PhabricatorSubscribableInterface )----------------------------------- */ 805 809
+4
src/applications/diffusion/harbormaster/DiffusionBuildableEngine.php
··· 1 + <?php 2 + 3 + final class DiffusionBuildableEngine 4 + extends HarbormasterBuildableEngine {}
+4
src/applications/harbormaster/engine/HarbormasterBuildableEngine.php
··· 1 + <?php 2 + 3 + abstract class HarbormasterBuildableEngine 4 + extends Phobject {}
+2
src/applications/harbormaster/interface/HarbormasterBuildableInterface.php
··· 36 36 public function getBuildVariables(); 37 37 public function getAvailableBuildVariables(); 38 38 39 + public function newBuildableEngine(); 40 + 39 41 }
+4
src/applications/harbormaster/storage/HarbormasterBuildable.php
··· 341 341 return array(); 342 342 } 343 343 344 + public function newBuildableEngine() { 345 + return $this->getBuildableObject()->newBuildableEngine(); 346 + } 347 + 344 348 345 349 /* -( PhabricatorDestructibleInterface )----------------------------------- */ 346 350
+4
src/applications/repository/storage/PhabricatorRepositoryCommit.php
··· 549 549 ); 550 550 } 551 551 552 + public function newBuildableEngine() { 553 + return new DiffusionBuildableEngine(); 554 + } 555 + 552 556 553 557 /* -( HarbormasterCircleCIBuildableInterface )----------------------------- */ 554 558