Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index 2c0b26cad4..70e3eddf13 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,667 +1,698 @@
<?php
/**
* This file is automatically generated. Use 'phutil_mapper.php' to rebuild it.
* @generated
*/
phutil_register_library_map(array(
'class' =>
array(
'Aphront400Response' => 'aphront/response/400',
'Aphront404Response' => 'aphront/response/404',
'AphrontAjaxResponse' => 'aphront/response/ajax',
'AphrontApplicationConfiguration' => 'aphront/applicationconfiguration',
'AphrontController' => 'aphront/controller',
'AphrontCrumbsView' => 'view/layout/crumbs',
'AphrontDatabaseConnection' => 'storage/connection/base',
'AphrontDefaultApplicationConfiguration' => 'aphront/default/configuration',
'AphrontDefaultApplicationController' => 'aphront/default/controller',
'AphrontDialogResponse' => 'aphront/response/dialog',
'AphrontDialogView' => 'view/dialog',
'AphrontErrorView' => 'view/form/error',
'AphrontException' => 'aphront/exception/base',
'AphrontFileResponse' => 'aphront/response/file',
'AphrontFormCheckboxControl' => 'view/form/control/checkbox',
'AphrontFormControl' => 'view/form/control/base',
'AphrontFormDividerControl' => 'view/form/control/divider',
'AphrontFormFileControl' => 'view/form/control/file',
'AphrontFormMarkupControl' => 'view/form/control/markup',
'AphrontFormPasswordControl' => 'view/form/control/password',
'AphrontFormRecaptchaControl' => 'view/form/control/recaptcha',
'AphrontFormSelectControl' => 'view/form/control/select',
'AphrontFormStaticControl' => 'view/form/control/static',
'AphrontFormSubmitControl' => 'view/form/control/submit',
'AphrontFormTextAreaControl' => 'view/form/control/textarea',
'AphrontFormTextControl' => 'view/form/control/text',
'AphrontFormTokenizerControl' => 'view/form/control/tokenizer',
'AphrontFormView' => 'view/form/base',
'AphrontHeadsupActionListView' => 'view/layout/headsup/actionlist',
'AphrontHeadsupActionView' => 'view/layout/headsup/action',
'AphrontMySQLDatabaseConnection' => 'storage/connection/mysql',
'AphrontNullView' => 'view/null',
'AphrontPageView' => 'view/page/base',
'AphrontPanelView' => 'view/layout/panel',
'AphrontQueryConnectionException' => 'storage/exception/connection',
'AphrontQueryConnectionLostException' => 'storage/exception/connectionlost',
'AphrontQueryCountException' => 'storage/exception/count',
'AphrontQueryDuplicateKeyException' => 'storage/exception/duplicatekey',
'AphrontQueryException' => 'storage/exception/base',
'AphrontQueryObjectMissingException' => 'storage/exception/objectmissing',
'AphrontQueryParameterException' => 'storage/exception/parameter',
'AphrontQueryRecoverableException' => 'storage/exception/recoverable',
'AphrontRedirectException' => 'aphront/exception/redirect',
'AphrontRedirectResponse' => 'aphront/response/redirect',
'AphrontRequest' => 'aphront/request',
'AphrontRequestFailureView' => 'view/page/failure',
'AphrontResponse' => 'aphront/response/base',
'AphrontSideNavView' => 'view/layout/sidenav',
'AphrontTableView' => 'view/control/table',
'AphrontURIMapper' => 'aphront/mapper',
'AphrontView' => 'view/base',
'AphrontWebpageResponse' => 'aphront/response/webpage',
'CelerityAPI' => 'infrastructure/celerity/api',
'CelerityResourceController' => 'infrastructure/celerity/controller',
'CelerityResourceMap' => 'infrastructure/celerity/map',
'CelerityStaticResourceResponse' => 'infrastructure/celerity/response',
'ConduitAPIMethod' => 'applications/conduit/method/base',
'ConduitAPIRequest' => 'applications/conduit/protocol/request',
'ConduitAPI_conduit_connect_Method' => 'applications/conduit/method/conduit/connect',
'ConduitAPI_conduit_ping_Method' => 'applications/conduit/method/conduit/ping',
'ConduitAPI_daemon_launched_Method' => 'applications/conduit/method/daemon/launched',
'ConduitAPI_daemon_log_Method' => 'applications/conduit/method/daemon/log',
'ConduitAPI_differential_creatediff_Method' => 'applications/conduit/method/differential/creatediff',
'ConduitAPI_differential_createrevision_Method' => 'applications/conduit/method/differential/createrevision',
'ConduitAPI_differential_find_Method' => 'applications/conduit/method/differential/find',
'ConduitAPI_differential_getcommitmessage_Method' => 'applications/conduit/method/differential/getcommitmessage',
'ConduitAPI_differential_getcommitpaths_Method' => 'applications/conduit/method/differential/getcommitpaths',
'ConduitAPI_differential_getdiff_Method' => 'applications/conduit/method/differential/getdiff',
'ConduitAPI_differential_markcommitted_Method' => 'applications/conduit/method/differential/markcommitted',
'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/conduit/method/differential/parsecommitmessage',
'ConduitAPI_differential_setdiffproperty_Method' => 'applications/conduit/method/differential/setdiffproperty',
'ConduitAPI_differential_updaterevision_Method' => 'applications/conduit/method/differential/updaterevision',
'ConduitAPI_file_upload_Method' => 'applications/conduit/method/file/upload',
'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
'ConduitException' => 'applications/conduit/protocol/exception',
'DarkConsole' => 'aphront/console/api',
'DarkConsoleConfigPlugin' => 'aphront/console/plugin/config',
'DarkConsoleController' => 'aphront/console/controller',
'DarkConsoleCore' => 'aphront/console/core',
'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/errorlog',
'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/api',
'DarkConsolePlugin' => 'aphront/console/plugin/base',
'DarkConsoleRequestPlugin' => 'aphront/console/plugin/request',
'DarkConsoleServicesPlugin' => 'aphront/console/plugin/services',
'DarkConsoleServicesPluginAPI' => 'aphront/console/plugin/services/api',
'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/xhprof',
'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/api',
'DifferentialAction' => 'applications/differential/constants/action',
'DifferentialAddCommentView' => 'applications/differential/view/addcomment',
'DifferentialAttachController' => 'applications/differential/controller/attach',
'DifferentialCCWelcomeMail' => 'applications/differential/mail/ccwelcome',
'DifferentialChangeType' => 'applications/differential/constants/changetype',
'DifferentialChangeset' => 'applications/differential/storage/changeset',
'DifferentialChangesetDetailView' => 'applications/differential/view/changesetdetailview',
'DifferentialChangesetListView' => 'applications/differential/view/changesetlistview',
'DifferentialChangesetParser' => 'applications/differential/parser/changeset',
'DifferentialChangesetViewController' => 'applications/differential/controller/changesetview',
'DifferentialComment' => 'applications/differential/storage/comment',
'DifferentialCommentEditor' => 'applications/differential/editor/comment',
'DifferentialCommentMail' => 'applications/differential/mail/comment',
'DifferentialCommentPreviewController' => 'applications/differential/controller/commentpreview',
'DifferentialCommentSaveController' => 'applications/differential/controller/commentsave',
'DifferentialCommitMessage' => 'applications/differential/parser/commitmessage',
'DifferentialCommitMessageData' => 'applications/differential/data/commitmessage',
'DifferentialCommitMessageParserException' => 'applications/differential/parser/commitmessage/exception',
'DifferentialController' => 'applications/differential/controller/base',
'DifferentialDAO' => 'applications/differential/storage/base',
'DifferentialDiff' => 'applications/differential/storage/diff',
'DifferentialDiffContentMail' => 'applications/differential/mail/diffcontent',
'DifferentialDiffCreateController' => 'applications/differential/controller/diffcreate',
'DifferentialDiffProperty' => 'applications/differential/storage/diffproperty',
'DifferentialDiffTableOfContentsView' => 'applications/differential/view/difftableofcontents',
'DifferentialDiffViewController' => 'applications/differential/controller/diffview',
'DifferentialHunk' => 'applications/differential/storage/hunk',
'DifferentialInlineComment' => 'applications/differential/storage/inlinecomment',
'DifferentialInlineCommentEditController' => 'applications/differential/controller/inlinecommentedit',
'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/inlinecommentpreview',
'DifferentialInlineCommentView' => 'applications/differential/view/inlinecomment',
'DifferentialLintStatus' => 'applications/differential/constants/lintstatus',
'DifferentialMail' => 'applications/differential/mail/base',
'DifferentialMarkupEngineFactory' => 'applications/differential/parser/markup',
'DifferentialNewDiffMail' => 'applications/differential/mail/newdiff',
'DifferentialReviewRequestMail' => 'applications/differential/mail/reviewrequest',
'DifferentialRevision' => 'applications/differential/storage/revision',
'DifferentialRevisionCommentListView' => 'applications/differential/view/revisioncommentlist',
'DifferentialRevisionCommentView' => 'applications/differential/view/revisioncomment',
'DifferentialRevisionControlSystem' => 'applications/differential/constants/revisioncontrolsystem',
'DifferentialRevisionDetailView' => 'applications/differential/view/revisiondetail',
'DifferentialRevisionEditController' => 'applications/differential/controller/revisionedit',
'DifferentialRevisionEditor' => 'applications/differential/editor/revision',
'DifferentialRevisionListController' => 'applications/differential/controller/revisionlist',
'DifferentialRevisionListData' => 'applications/differential/data/revisionlist',
'DifferentialRevisionStatus' => 'applications/differential/constants/revisionstatus',
'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/revisionupdatehistory',
'DifferentialRevisionViewController' => 'applications/differential/controller/revisionview',
'DifferentialSubscribeController' => 'applications/differential/controller/subscribe',
'DifferentialUnitStatus' => 'applications/differential/constants/unitstatus',
'DiffusionBranchInformation' => 'applications/diffusion/data/branch',
'DiffusionBranchQuery' => 'applications/diffusion/query/branch/base',
'DiffusionBranchTableView' => 'applications/diffusion/view/branchtable',
'DiffusionBrowseController' => 'applications/diffusion/controller/browse',
'DiffusionBrowseFileController' => 'applications/diffusion/controller/file',
'DiffusionBrowseQuery' => 'applications/diffusion/query/browse/base',
'DiffusionBrowseTableView' => 'applications/diffusion/view/browsetable',
'DiffusionChangeController' => 'applications/diffusion/controller/change',
'DiffusionCommitChangeTableView' => 'applications/diffusion/view/commitchangetable',
'DiffusionCommitController' => 'applications/diffusion/controller/commit',
'DiffusionController' => 'applications/diffusion/controller/base',
'DiffusionFileContent' => 'applications/diffusion/data/filecontent',
'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/base',
'DiffusionGitBranchQuery' => 'applications/diffusion/query/branch/git',
'DiffusionGitBrowseQuery' => 'applications/diffusion/query/browse/git',
'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/git',
'DiffusionGitHistoryQuery' => 'applications/diffusion/query/history/git',
'DiffusionGitPathIDQuery' => 'applications/diffusion/query/pathid/base',
'DiffusionGitRequest' => 'applications/diffusion/request/git',
'DiffusionHistoryController' => 'applications/diffusion/controller/history',
'DiffusionHistoryQuery' => 'applications/diffusion/query/history/base',
'DiffusionHistoryTableView' => 'applications/diffusion/view/historytable',
'DiffusionHomeController' => 'applications/diffusion/controller/home',
'DiffusionPathChange' => 'applications/diffusion/data/pathchange',
'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/base',
'DiffusionRepositoryController' => 'applications/diffusion/controller/repository',
'DiffusionRepositoryPath' => 'applications/diffusion/data/repositorypath',
'DiffusionRequest' => 'applications/diffusion/request/base',
'DiffusionSvnBrowseQuery' => 'applications/diffusion/query/browse/svn',
'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/svn',
'DiffusionSvnHistoryQuery' => 'applications/diffusion/query/history/svn',
'DiffusionView' => 'applications/diffusion/view/base',
+ 'DryRunHeraldable' => 'applications/herald/heraldable/dryrun',
+ 'HeraldAction' => 'applications/herald/storage/action',
+ 'HeraldActionConfig' => 'applications/herald/config/action',
+ 'HeraldApplyTranscript' => 'applications/herald/storage/transcript/apply',
+ 'HeraldCondition' => 'applications/herald/storage/condition',
+ 'HeraldConditionConfig' => 'applications/herald/config/condition',
+ 'HeraldConditionTranscript' => 'applications/herald/storage/transcript/condition',
+ 'HeraldContentTypeConfig' => 'applications/herald/config/contenttype',
+ 'HeraldDAO' => 'applications/herald/storage/base',
+ 'HeraldEffect' => 'applications/herald/engine/effect',
+ 'HeraldEngine' => 'applications/herald/engine/engine',
+ 'HeraldFieldConfig' => 'applications/herald/config/field',
+ 'HeraldInvalidConditionException' => 'applications/herald/engine/engine/exception',
+ 'HeraldInvalidFieldException' => 'applications/herald/engine/engine/exception',
+ 'HeraldObjectTranscript' => 'applications/herald/storage/transcript/object',
+ 'HeraldRecursiveConditionsException' => 'applications/herald/engine/engine/exception',
+ 'HeraldRule' => 'applications/herald/storage/rule',
+ 'HeraldRuleTranscript' => 'applications/herald/storage/transcript/rule',
+ 'HeraldTranscript' => 'applications/herald/storage/transcript/base',
+ 'HeraldValueTypeConfig' => 'applications/herald/config/valuetype',
+ 'IHeraldable' => 'applications/herald/heraldable/base',
'Javelin' => 'infrastructure/javelin/api',
'LiskDAO' => 'storage/lisk/dao',
'ManiphestController' => 'applications/maniphest/controller/base',
'ManiphestDAO' => 'applications/maniphest/storage/base',
'ManiphestTask' => 'applications/maniphest/storage/task',
'ManiphestTaskDetailController' => 'applications/maniphest/controller/taskdetail',
'ManiphestTaskEditController' => 'applications/maniphest/controller/taskedit',
'ManiphestTaskListController' => 'applications/maniphest/controller/tasklist',
'ManiphestTaskListView' => 'applications/maniphest/view/tasklist',
'ManiphestTaskPriority' => 'applications/maniphest/constants/priority',
'ManiphestTaskSelectorSearchController' => 'applications/maniphest/controller/taskselectorsearch',
'ManiphestTaskStatus' => 'applications/maniphest/constants/status',
'ManiphestTaskSummaryView' => 'applications/maniphest/view/tasksummary',
'ManiphestTransaction' => 'applications/maniphest/storage/transaction',
'ManiphestTransactionDetailView' => 'applications/maniphest/view/transactiondetail',
'ManiphestTransactionEditor' => 'applications/maniphest/editor/transaction',
'ManiphestTransactionListView' => 'applications/maniphest/view/transactionlist',
'ManiphestTransactionSaveController' => 'applications/maniphest/controller/transactionsave',
'ManiphestTransactionType' => 'applications/maniphest/constants/transactiontype',
'Phabricator404Controller' => 'applications/base/controller/404',
'PhabricatorAuthController' => 'applications/auth/controller/base',
'PhabricatorConduitAPIController' => 'applications/conduit/controller/api',
'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/connectionlog',
'PhabricatorConduitConsoleController' => 'applications/conduit/controller/console',
'PhabricatorConduitController' => 'applications/conduit/controller/base',
'PhabricatorConduitDAO' => 'applications/conduit/storage/base',
'PhabricatorConduitLogController' => 'applications/conduit/controller/log',
'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/methodcalllog',
'PhabricatorController' => 'applications/base/controller/base',
'PhabricatorDaemon' => 'infrastructure/daemon/base',
'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/console',
'PhabricatorDaemonControl' => 'infrastructure/daemon/control',
'PhabricatorDaemonController' => 'applications/daemon/controller/base',
'PhabricatorDaemonDAO' => 'infrastructure/daemon/storage/base',
'PhabricatorDaemonLog' => 'infrastructure/daemon/storage/log',
'PhabricatorDaemonLogEvent' => 'infrastructure/daemon/storage/event',
'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/logview',
'PhabricatorDaemonReference' => 'infrastructure/daemon/control/reference',
'PhabricatorDaemonTimelineConsoleController' => 'applications/daemon/controller/timeline',
'PhabricatorDaemonTimelineEventController' => 'applications/daemon/controller/timelineevent',
'PhabricatorDirectoryCategory' => 'applications/directory/storage/category',
'PhabricatorDirectoryCategoryDeleteController' => 'applications/directory/controller/categorydelete',
'PhabricatorDirectoryCategoryEditController' => 'applications/directory/controller/categoryedit',
'PhabricatorDirectoryCategoryListController' => 'applications/directory/controller/categorylist',
'PhabricatorDirectoryController' => 'applications/directory/controller/base',
'PhabricatorDirectoryDAO' => 'applications/directory/storage/base',
'PhabricatorDirectoryItem' => 'applications/directory/storage/item',
'PhabricatorDirectoryItemDeleteController' => 'applications/directory/controller/itemdelete',
'PhabricatorDirectoryItemEditController' => 'applications/directory/controller/itemedit',
'PhabricatorDirectoryItemListController' => 'applications/directory/controller/itemlist',
'PhabricatorDirectoryMainController' => 'applications/directory/controller/main',
'PhabricatorDraft' => 'applications/draft/storage/draft',
'PhabricatorDraftDAO' => 'applications/draft/storage/base',
'PhabricatorEmailLoginController' => 'applications/auth/controller/email',
'PhabricatorEmailTokenController' => 'applications/auth/controller/emailtoken',
'PhabricatorEnv' => 'infrastructure/env',
'PhabricatorFile' => 'applications/files/storage/file',
'PhabricatorFileController' => 'applications/files/controller/base',
'PhabricatorFileDAO' => 'applications/files/storage/base',
'PhabricatorFileListController' => 'applications/files/controller/list',
'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
'PhabricatorFileURI' => 'applications/files/uri',
'PhabricatorFileUploadController' => 'applications/files/controller/upload',
'PhabricatorFileViewController' => 'applications/files/controller/view',
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/goodfornothing',
'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/selector',
'PhabricatorLiskDAO' => 'applications/base/storage/lisk',
'PhabricatorLoginController' => 'applications/auth/controller/login',
'PhabricatorLogoutController' => 'applications/auth/controller/logout',
'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/base',
'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/amazonses',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/phpmailerlite',
'PhabricatorMetaMTAController' => 'applications/metamta/controller/base',
'PhabricatorMetaMTADAO' => 'applications/metamta/storage/base',
'PhabricatorMetaMTADaemon' => 'applications/metamta/daemon/mta',
'PhabricatorMetaMTAListController' => 'applications/metamta/controller/list',
'PhabricatorMetaMTAMail' => 'applications/metamta/storage/mail',
'PhabricatorMetaMTAMailingList' => 'applications/metamta/storage/mailinglist',
'PhabricatorMetaMTAMailingListEditController' => 'applications/metamta/controller/mailinglistedit',
'PhabricatorMetaMTAMailingListsController' => 'applications/metamta/controller/mailinglists',
'PhabricatorMetaMTASendController' => 'applications/metamta/controller/send',
'PhabricatorMetaMTAViewController' => 'applications/metamta/controller/view',
'PhabricatorOAuthDefaultRegistrationController' => 'applications/auth/controller/oauthregistration/default',
'PhabricatorOAuthDiagnosticsController' => 'applications/auth/controller/oauthdiagnostics',
'PhabricatorOAuthFailureView' => 'applications/auth/view/oauthfailure',
'PhabricatorOAuthLoginController' => 'applications/auth/controller/oauth',
'PhabricatorOAuthProvider' => 'applications/auth/oauth/provider/base',
'PhabricatorOAuthProviderFacebook' => 'applications/auth/oauth/provider/facebook',
'PhabricatorOAuthProviderGithub' => 'applications/auth/oauth/provider/github',
'PhabricatorOAuthRegistrationController' => 'applications/auth/controller/oauthregistration/base',
'PhabricatorOAuthUnlinkController' => 'applications/auth/controller/unlink',
'PhabricatorObjectHandle' => 'applications/phid/handle',
'PhabricatorObjectHandleData' => 'applications/phid/handle/data',
'PhabricatorObjectSelectorDialog' => 'view/control/objectselector',
'PhabricatorPHID' => 'applications/phid/storage/phid',
'PhabricatorPHIDAllocateController' => 'applications/phid/controller/allocate',
'PhabricatorPHIDConstants' => 'applications/phid/constants',
'PhabricatorPHIDController' => 'applications/phid/controller/base',
'PhabricatorPHIDDAO' => 'applications/phid/storage/base',
'PhabricatorPHIDListController' => 'applications/phid/controller/list',
'PhabricatorPHIDLookupController' => 'applications/phid/controller/lookup',
'PhabricatorPHIDType' => 'applications/phid/storage/type',
'PhabricatorPHIDTypeEditController' => 'applications/phid/controller/typeedit',
'PhabricatorPHIDTypeListController' => 'applications/phid/controller/typelist',
'PhabricatorPeopleController' => 'applications/people/controller/base',
'PhabricatorPeopleEditController' => 'applications/people/controller/edit',
'PhabricatorPeopleListController' => 'applications/people/controller/list',
'PhabricatorPeopleProfileController' => 'applications/people/controller/profile',
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/profileedit',
'PhabricatorProject' => 'applications/project/storage/project',
'PhabricatorProjectAffiliation' => 'applications/project/storage/affiliation',
'PhabricatorProjectAffiliationEditController' => 'applications/project/controller/editaffiliation',
'PhabricatorProjectController' => 'applications/project/controller/base',
'PhabricatorProjectDAO' => 'applications/project/storage/base',
'PhabricatorProjectEditController' => 'applications/project/controller/edit',
'PhabricatorProjectListController' => 'applications/project/controller/list',
'PhabricatorProjectProfile' => 'applications/project/storage/profile',
'PhabricatorProjectProfileController' => 'applications/project/controller/profile',
'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/remarkup/markuprule/differential',
'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/remarkup/markuprule/maniphest',
'PhabricatorRepository' => 'applications/repository/storage/repository',
'PhabricatorRepositoryCommit' => 'applications/repository/storage/commit',
'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/base',
'PhabricatorRepositoryCommitData' => 'applications/repository/storage/commitdata',
'PhabricatorRepositoryCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/base',
'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/base',
'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/base',
'PhabricatorRepositoryCommitTaskDaemon' => 'applications/repository/daemon/committask',
'PhabricatorRepositoryController' => 'applications/repository/controller/base',
'PhabricatorRepositoryCreateController' => 'applications/repository/controller/create',
'PhabricatorRepositoryDAO' => 'applications/repository/storage/base',
'PhabricatorRepositoryDaemon' => 'applications/repository/daemon/base',
'PhabricatorRepositoryEditController' => 'applications/repository/controller/edit',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/git',
'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/git',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/git',
'PhabricatorRepositoryGitFetchDaemon' => 'applications/repository/daemon/gitfetch',
'PhabricatorRepositoryGitHubNotification' => 'applications/repository/storage/githubnotification',
'PhabricatorRepositoryGitHubPostReceiveController' => 'applications/repository/controller/github-post-receive',
'PhabricatorRepositoryListController' => 'applications/repository/controller/list',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/svn',
'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/svn',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/svn',
'PhabricatorRepositoryType' => 'applications/repository/constants/repositorytype',
'PhabricatorSearchAbstractDocument' => 'applications/search/index/abstractdocument',
'PhabricatorSearchBaseController' => 'applications/search/controller/base',
'PhabricatorSearchController' => 'applications/search/controller/search',
'PhabricatorSearchDAO' => 'applications/search/storage/base',
'PhabricatorSearchDifferentialIndexer' => 'applications/search/index/indexer/differential',
'PhabricatorSearchDocument' => 'applications/search/storage/document/document',
'PhabricatorSearchDocumentField' => 'applications/search/storage/document/field',
'PhabricatorSearchDocumentIndexer' => 'applications/search/index/indexer/base',
'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/relationship',
'PhabricatorSearchExecutor' => 'applications/search/execute/base',
'PhabricatorSearchField' => 'applications/search/constants/field',
'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/maniphest',
'PhabricatorSearchMySQLExecutor' => 'applications/search/execute/mysql',
'PhabricatorSearchQuery' => 'applications/search/storage/query',
'PhabricatorSearchRelationship' => 'applications/search/constants/relationship',
'PhabricatorStandardPageView' => 'view/page/standard',
'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/taskmaster',
'PhabricatorTimelineCursor' => 'infrastructure/daemon/timeline/storage/cursor',
'PhabricatorTimelineDAO' => 'infrastructure/daemon/timeline/storage/base',
'PhabricatorTimelineEvent' => 'infrastructure/daemon/timeline/storage/event',
'PhabricatorTimelineEventData' => 'infrastructure/daemon/timeline/storage/eventdata',
'PhabricatorTimelineIterator' => 'infrastructure/daemon/timeline/cursor/iterator',
'PhabricatorTypeaheadCommonDatasourceController' => 'applications/typeahead/controller/common',
'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/base',
'PhabricatorUser' => 'applications/people/storage/user',
'PhabricatorUserDAO' => 'applications/people/storage/base',
'PhabricatorUserOAuthInfo' => 'applications/people/storage/useroauthinfo',
'PhabricatorUserProfile' => 'applications/people/storage/profile',
'PhabricatorUserSettingsController' => 'applications/people/controller/settings',
'PhabricatorWorker' => 'infrastructure/daemon/workers/worker',
'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/base',
'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/task',
'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/taskdata',
'PhabricatorXHProfController' => 'applications/xhprof/controller/base',
'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/profile',
'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/symbol',
'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/toplevel',
),
'function' =>
array(
'_qsprintf_check_scalar_type' => 'storage/qsprintf',
'_qsprintf_check_type' => 'storage/qsprintf',
'celerity_generate_unique_node_id' => 'infrastructure/celerity/api',
'celerity_register_resource_map' => 'infrastructure/celerity/map',
'javelin_render_tag' => 'infrastructure/javelin/markup',
'phabricator_format_relative_time' => 'view/utils',
'phabricator_format_timestamp' => 'view/utils',
'phabricator_format_units_generic' => 'view/utils',
'phabricator_render_form' => 'infrastructure/javelin/markup',
'qsprintf' => 'storage/qsprintf',
'queryfx' => 'storage/queryfx',
'queryfx_all' => 'storage/queryfx',
'queryfx_one' => 'storage/queryfx',
'require_celerity_resource' => 'infrastructure/celerity/api',
'vqsprintf' => 'storage/qsprintf',
'vqueryfx' => 'storage/queryfx',
'vqueryfx_all' => 'storage/queryfx',
'xsprintf_query' => 'storage/qsprintf',
),
'requires_class' =>
array(
'Aphront400Response' => 'AphrontResponse',
'Aphront404Response' => 'AphrontResponse',
'AphrontAjaxResponse' => 'AphrontResponse',
'AphrontCrumbsView' => 'AphrontView',
'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
'AphrontDefaultApplicationController' => 'AphrontController',
'AphrontDialogResponse' => 'AphrontResponse',
'AphrontDialogView' => 'AphrontView',
'AphrontErrorView' => 'AphrontView',
'AphrontFileResponse' => 'AphrontResponse',
'AphrontFormCheckboxControl' => 'AphrontFormControl',
'AphrontFormControl' => 'AphrontView',
'AphrontFormDividerControl' => 'AphrontFormControl',
'AphrontFormFileControl' => 'AphrontFormControl',
'AphrontFormMarkupControl' => 'AphrontFormControl',
'AphrontFormPasswordControl' => 'AphrontFormControl',
'AphrontFormRecaptchaControl' => 'AphrontFormControl',
'AphrontFormSelectControl' => 'AphrontFormControl',
'AphrontFormStaticControl' => 'AphrontFormControl',
'AphrontFormSubmitControl' => 'AphrontFormControl',
'AphrontFormTextAreaControl' => 'AphrontFormControl',
'AphrontFormTextControl' => 'AphrontFormControl',
'AphrontFormTokenizerControl' => 'AphrontFormControl',
'AphrontFormView' => 'AphrontView',
'AphrontHeadsupActionListView' => 'AphrontView',
'AphrontHeadsupActionView' => 'AphrontView',
'AphrontMySQLDatabaseConnection' => 'AphrontDatabaseConnection',
'AphrontNullView' => 'AphrontView',
'AphrontPageView' => 'AphrontView',
'AphrontPanelView' => 'AphrontView',
'AphrontQueryConnectionException' => 'AphrontQueryException',
'AphrontQueryConnectionLostException' => 'AphrontQueryRecoverableException',
'AphrontQueryCountException' => 'AphrontQueryException',
'AphrontQueryDuplicateKeyException' => 'AphrontQueryException',
'AphrontQueryObjectMissingException' => 'AphrontQueryException',
'AphrontQueryParameterException' => 'AphrontQueryException',
'AphrontQueryRecoverableException' => 'AphrontQueryException',
'AphrontRedirectException' => 'AphrontException',
'AphrontRedirectResponse' => 'AphrontResponse',
'AphrontRequestFailureView' => 'AphrontView',
'AphrontSideNavView' => 'AphrontView',
'AphrontTableView' => 'AphrontView',
'AphrontWebpageResponse' => 'AphrontResponse',
'CelerityResourceController' => 'AphrontController',
'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod',
'ConduitAPI_conduit_ping_Method' => 'ConduitAPIMethod',
'ConduitAPI_daemon_launched_Method' => 'ConduitAPIMethod',
'ConduitAPI_daemon_log_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_creatediff_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_createrevision_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_find_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod',
'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod',
'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod',
'ConduitAPI_user_find_Method' => 'ConduitAPIMethod',
'DarkConsoleConfigPlugin' => 'DarkConsolePlugin',
'DarkConsoleController' => 'PhabricatorController',
'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
'DifferentialAddCommentView' => 'AphrontView',
'DifferentialAttachController' => 'DifferentialController',
'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail',
'DifferentialChangeset' => 'DifferentialDAO',
'DifferentialChangesetDetailView' => 'AphrontView',
'DifferentialChangesetListView' => 'AphrontView',
'DifferentialChangesetViewController' => 'DifferentialController',
'DifferentialComment' => 'DifferentialDAO',
'DifferentialCommentMail' => 'DifferentialMail',
'DifferentialCommentPreviewController' => 'DifferentialController',
'DifferentialCommentSaveController' => 'DifferentialController',
'DifferentialController' => 'PhabricatorController',
'DifferentialDAO' => 'PhabricatorLiskDAO',
'DifferentialDiff' => 'DifferentialDAO',
'DifferentialDiffContentMail' => 'DifferentialMail',
'DifferentialDiffCreateController' => 'DifferentialController',
'DifferentialDiffProperty' => 'DifferentialDAO',
'DifferentialDiffTableOfContentsView' => 'AphrontView',
'DifferentialDiffViewController' => 'DifferentialController',
'DifferentialHunk' => 'DifferentialDAO',
'DifferentialInlineComment' => 'DifferentialDAO',
'DifferentialInlineCommentEditController' => 'DifferentialController',
'DifferentialInlineCommentPreviewController' => 'DifferentialController',
'DifferentialInlineCommentView' => 'AphrontView',
'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail',
'DifferentialReviewRequestMail' => 'DifferentialMail',
'DifferentialRevision' => 'DifferentialDAO',
'DifferentialRevisionCommentListView' => 'AphrontView',
'DifferentialRevisionCommentView' => 'AphrontView',
'DifferentialRevisionDetailView' => 'AphrontView',
'DifferentialRevisionEditController' => 'DifferentialController',
'DifferentialRevisionListController' => 'DifferentialController',
'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
'DifferentialRevisionViewController' => 'DifferentialController',
'DifferentialSubscribeController' => 'DifferentialController',
'DiffusionBranchTableView' => 'DiffusionView',
'DiffusionBrowseController' => 'DiffusionController',
'DiffusionBrowseFileController' => 'DiffusionController',
'DiffusionBrowseTableView' => 'DiffusionView',
'DiffusionChangeController' => 'DiffusionController',
'DiffusionCommitChangeTableView' => 'DiffusionView',
'DiffusionCommitController' => 'DiffusionController',
'DiffusionController' => 'PhabricatorController',
'DiffusionGitBranchQuery' => 'DiffusionBranchQuery',
'DiffusionGitBrowseQuery' => 'DiffusionBrowseQuery',
'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionGitHistoryQuery' => 'DiffusionHistoryQuery',
'DiffusionGitRequest' => 'DiffusionRequest',
'DiffusionHistoryController' => 'DiffusionController',
'DiffusionHistoryTableView' => 'DiffusionView',
'DiffusionHomeController' => 'DiffusionController',
'DiffusionRepositoryController' => 'DiffusionController',
'DiffusionSvnBrowseQuery' => 'DiffusionBrowseQuery',
'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
'DiffusionSvnHistoryQuery' => 'DiffusionHistoryQuery',
'DiffusionView' => 'AphrontView',
+ 'HeraldAction' => 'HeraldDAO',
+ 'HeraldApplyTranscript' => 'HeraldDAO',
+ 'HeraldCondition' => 'HeraldDAO',
+ 'HeraldDAO' => 'PhabricatorLiskDAO',
+ 'HeraldRule' => 'HeraldDAO',
+ 'HeraldTranscript' => 'HeraldDAO',
'ManiphestController' => 'PhabricatorController',
'ManiphestDAO' => 'PhabricatorLiskDAO',
'ManiphestTask' => 'ManiphestDAO',
'ManiphestTaskDetailController' => 'ManiphestController',
'ManiphestTaskEditController' => 'ManiphestController',
'ManiphestTaskListController' => 'ManiphestController',
'ManiphestTaskListView' => 'AphrontView',
'ManiphestTaskSelectorSearchController' => 'ManiphestController',
'ManiphestTaskSummaryView' => 'AphrontView',
'ManiphestTransaction' => 'ManiphestDAO',
'ManiphestTransactionDetailView' => 'AphrontView',
'ManiphestTransactionListView' => 'AphrontView',
'ManiphestTransactionSaveController' => 'ManiphestController',
'Phabricator404Controller' => 'PhabricatorController',
'PhabricatorAuthController' => 'PhabricatorController',
'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
'PhabricatorConduitController' => 'PhabricatorController',
'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
'PhabricatorConduitLogController' => 'PhabricatorConduitController',
'PhabricatorConduitMethodCallLog' => 'PhabricatorConduitDAO',
'PhabricatorController' => 'AphrontController',
'PhabricatorDaemon' => 'PhutilDaemon',
'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
'PhabricatorDaemonController' => 'PhabricatorController',
'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
'PhabricatorDaemonLog' => 'PhabricatorDaemonDAO',
'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
'PhabricatorDaemonTimelineConsoleController' => 'PhabricatorDaemonController',
'PhabricatorDaemonTimelineEventController' => 'PhabricatorDaemonController',
'PhabricatorDirectoryCategory' => 'PhabricatorDirectoryDAO',
'PhabricatorDirectoryCategoryDeleteController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryCategoryEditController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryCategoryListController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryController' => 'PhabricatorController',
'PhabricatorDirectoryDAO' => 'PhabricatorLiskDAO',
'PhabricatorDirectoryItem' => 'PhabricatorDirectoryDAO',
'PhabricatorDirectoryItemDeleteController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryItemEditController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryItemListController' => 'PhabricatorDirectoryController',
'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController',
'PhabricatorDraft' => 'PhabricatorDraftDAO',
'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
'PhabricatorEmailTokenController' => 'PhabricatorAuthController',
'PhabricatorFile' => 'PhabricatorFileDAO',
'PhabricatorFileController' => 'PhabricatorController',
'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
'PhabricatorFileListController' => 'PhabricatorFileController',
'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
'PhabricatorFileUploadController' => 'PhabricatorFileController',
'PhabricatorFileViewController' => 'PhabricatorFileController',
'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker',
'PhabricatorLiskDAO' => 'LiskDAO',
'PhabricatorLoginController' => 'PhabricatorAuthController',
'PhabricatorLogoutController' => 'PhabricatorAuthController',
'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
'PhabricatorMetaMTAController' => 'PhabricatorController',
'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
'PhabricatorMetaMTADaemon' => 'PhabricatorDaemon',
'PhabricatorMetaMTAListController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO',
'PhabricatorMetaMTAMailingListEditController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAMailingListsController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTASendController' => 'PhabricatorMetaMTAController',
'PhabricatorMetaMTAViewController' => 'PhabricatorMetaMTAController',
'PhabricatorOAuthDefaultRegistrationController' => 'PhabricatorOAuthRegistrationController',
'PhabricatorOAuthDiagnosticsController' => 'PhabricatorAuthController',
'PhabricatorOAuthFailureView' => 'AphrontView',
'PhabricatorOAuthLoginController' => 'PhabricatorAuthController',
'PhabricatorOAuthProviderFacebook' => 'PhabricatorOAuthProvider',
'PhabricatorOAuthProviderGithub' => 'PhabricatorOAuthProvider',
'PhabricatorOAuthRegistrationController' => 'PhabricatorAuthController',
'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController',
'PhabricatorPHID' => 'PhabricatorPHIDDAO',
'PhabricatorPHIDAllocateController' => 'PhabricatorPHIDController',
'PhabricatorPHIDController' => 'PhabricatorController',
'PhabricatorPHIDDAO' => 'PhabricatorLiskDAO',
'PhabricatorPHIDListController' => 'PhabricatorPHIDController',
'PhabricatorPHIDLookupController' => 'PhabricatorPHIDController',
'PhabricatorPHIDType' => 'PhabricatorPHIDDAO',
'PhabricatorPHIDTypeEditController' => 'PhabricatorPHIDController',
'PhabricatorPHIDTypeListController' => 'PhabricatorPHIDController',
'PhabricatorPeopleController' => 'PhabricatorController',
'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
'PhabricatorProject' => 'PhabricatorProjectDAO',
'PhabricatorProjectAffiliation' => 'PhabricatorProjectDAO',
'PhabricatorProjectAffiliationEditController' => 'PhabricatorProjectController',
'PhabricatorProjectController' => 'PhabricatorController',
'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
'PhabricatorProjectEditController' => 'PhabricatorProjectController',
'PhabricatorProjectListController' => 'PhabricatorProjectController',
'PhabricatorProjectProfile' => 'PhabricatorProjectDAO',
'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
'PhabricatorRemarkupRuleDifferential' => 'PhutilRemarkupRule',
'PhabricatorRemarkupRuleManiphest' => 'PhutilRemarkupRule',
'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryCommitDiscoveryDaemon' => 'PhabricatorRepositoryDaemon',
'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
'PhabricatorRepositoryCommitTaskDaemon' => 'PhabricatorRepositoryDaemon',
'PhabricatorRepositoryController' => 'PhabricatorController',
'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
'PhabricatorRepositoryDaemon' => 'PhabricatorDaemon',
'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorRepositoryGitFetchDaemon' => 'PhabricatorRepositoryDaemon',
'PhabricatorRepositoryGitHubNotification' => 'PhabricatorRepositoryDAO',
'PhabricatorRepositoryGitHubPostReceiveController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
'PhabricatorSearchBaseController' => 'PhabricatorController',
'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
'PhabricatorSearchDifferentialIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer',
'PhabricatorSearchMySQLExecutor' => 'PhabricatorSearchExecutor',
'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
'PhabricatorStandardPageView' => 'AphrontPageView',
'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
'PhabricatorTimelineCursor' => 'PhabricatorTimelineDAO',
'PhabricatorTimelineDAO' => 'PhabricatorLiskDAO',
'PhabricatorTimelineEvent' => 'PhabricatorTimelineDAO',
'PhabricatorTimelineEventData' => 'PhabricatorTimelineDAO',
'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
'PhabricatorUser' => 'PhabricatorUserDAO',
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
'PhabricatorUserOAuthInfo' => 'PhabricatorUserDAO',
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
'PhabricatorUserSettingsController' => 'PhabricatorPeopleController',
'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
'PhabricatorXHProfController' => 'PhabricatorController',
'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
'PhabricatorXHProfProfileSymbolView' => 'AphrontView',
'PhabricatorXHProfProfileTopLevelView' => 'AphrontView',
),
'requires_interface' =>
array(
+ 'DryRunHeraldable' =>
+ array(
+ 0 => 'IHeraldable',
+ ),
),
));
diff --git a/src/applications/herald/config/action/HeraldActionConfig.php b/src/applications/herald/config/action/HeraldActionConfig.php
new file mode 100644
index 0000000000..6f806822cc
--- /dev/null
+++ b/src/applications/herald/config/action/HeraldActionConfig.php
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldActionConfig {
+
+ const ACTION_ADD_CC = 'addcc';
+ const ACTION_REMOVE_CC = 'remcc';
+ const ACTION_EMAIL = 'email';
+ const ACTION_NOTHING = 'nothing';
+
+ public static function getActionMap() {
+ return array(
+ self::ACTION_ADD_CC => 'Add emails to CC',
+ self::ACTION_REMOVE_CC => 'Remove emails from CC',
+ self::ACTION_EMAIL => 'Send an email to',
+ self::ACTION_NOTHING => 'Do nothing',
+ );
+ }
+
+ public static function getActionMapForContentType($type) {
+ $map = self::getActionMap();
+ switch ($type) {
+ case HeraldContentTypeConfig::CONTENT_TYPE_DIFFERENTIAL:
+ return array_select_keys(
+ $map,
+ array(
+ self::ACTION_ADD_CC,
+ self::ACTION_REMOVE_CC,
+ self::ACTION_NOTHING,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_COMMIT:
+ return array_select_keys(
+ $map,
+ array(
+ self::ACTION_EMAIL,
+ self::ACTION_NOTHING,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_MERGE:
+ return array_select_keys(
+ $map,
+ array(
+ self::ACTION_EMAIL,
+ self::ACTION_NOTHING,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_OWNERS:
+ return array_select_keys(
+ $map,
+ array(
+ self::ACTION_EMAIL,
+ self::ACTION_NOTHING,
+ ));
+ default:
+ throw new Exception("Unknown content type '{$type}'.");
+ }
+ }
+
+}
diff --git a/src/applications/herald/config/action/__init__.php b/src/applications/herald/config/action/__init__.php
new file mode 100644
index 0000000000..67737f7071
--- /dev/null
+++ b/src/applications/herald/config/action/__init__.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/config/contenttype');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldActionConfig.php');
diff --git a/src/applications/herald/config/condition/HeraldConditionConfig.php b/src/applications/herald/config/condition/HeraldConditionConfig.php
new file mode 100644
index 0000000000..1716b640a0
--- /dev/null
+++ b/src/applications/herald/config/condition/HeraldConditionConfig.php
@@ -0,0 +1,141 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldConditionConfig {
+
+ const CONDITION_CONTAINS = 'contains';
+ const CONDITION_NOT_CONTAINS = '!contains';
+ const CONDITION_IS = 'is';
+ const CONDITION_IS_NOT = '!is';
+ const CONDITION_IS_ANY = 'isany';
+ const CONDITION_IS_NOT_ANY = '!isany';
+ const CONDITION_INCLUDE_ALL = 'all';
+ const CONDITION_INCLUDE_ANY = 'any';
+ const CONDITION_INCLUDE_NONE = 'none';
+ const CONDITION_IS_ME = 'me';
+ const CONDITION_IS_NOT_ME = '!me';
+ const CONDITION_REGEXP = 'regexp';
+ const CONDITION_RULE = 'conditions';
+ const CONDITION_NOT_RULE = '!conditions';
+ const CONDITION_EXISTS = 'exists';
+ const CONDITION_NOT_EXISTS = '!exists';
+ const CONDITION_REGEXP_PAIR = 'regexp-pair';
+
+ public static function getConditionMap() {
+ static $map = array(
+ self::CONDITION_CONTAINS => 'contains',
+ self::CONDITION_NOT_CONTAINS => 'does not contain',
+ self::CONDITION_IS => 'is',
+ self::CONDITION_IS_NOT => 'is not',
+ self::CONDITION_IS_ANY => 'is any of',
+ self::CONDITION_IS_NOT_ANY => 'is not any of',
+ self::CONDITION_INCLUDE_ALL => 'include all of',
+ self::CONDITION_INCLUDE_ANY => 'include any of',
+ self::CONDITION_INCLUDE_NONE => 'include none of',
+ self::CONDITION_IS_ME => 'is myself',
+ self::CONDITION_IS_NOT_ME => 'is not myself',
+ self::CONDITION_REGEXP => 'matches regexp',
+ self::CONDITION_RULE => 'matches:',
+ self::CONDITION_NOT_RULE => 'does not match:',
+ self::CONDITION_EXISTS => 'exists',
+ self::CONDITION_NOT_EXISTS => 'does not exist',
+ self::CONDITION_REGEXP_PAIR => 'matches regexp pair',
+ );
+
+ return $map;
+ }
+
+ public static function getConditionMapForField($field) {
+ $map = self::getConditionMap();
+ switch ($field) {
+ case HeraldFieldConfig::FIELD_TITLE:
+ case HeraldFieldConfig::FIELD_BODY:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_CONTAINS,
+ self::CONDITION_NOT_CONTAINS,
+ self::CONDITION_IS,
+ self::CONDITION_IS_NOT,
+ self::CONDITION_REGEXP,
+ ));
+ case HeraldFieldConfig::FIELD_AUTHOR:
+ case HeraldFieldConfig::FIELD_REPOSITORY:
+ case HeraldFieldConfig::FIELD_REVIEWER:
+ case HeraldFieldConfig::FIELD_MERGE_REQUESTER:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_IS_ANY,
+ self::CONDITION_IS_NOT_ANY,
+ ));
+ case HeraldFieldConfig::FIELD_TAGS:
+ case HeraldFieldConfig::FIELD_REVIEWERS:
+ case HeraldFieldConfig::FIELD_CC:
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_REVIEWERS:
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_CCS:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_INCLUDE_ALL,
+ self::CONDITION_INCLUDE_ANY,
+ self::CONDITION_INCLUDE_NONE,
+ ));
+ case HeraldFieldConfig::FIELD_DIFF_FILE:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_CONTAINS,
+ self::CONDITION_REGEXP,
+ ));
+ case HeraldFieldConfig::FIELD_DIFF_CONTENT:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_CONTAINS,
+ self::CONDITION_REGEXP,
+ self::CONDITION_REGEXP_PAIR,
+ ));
+ case HeraldFieldConfig::FIELD_RULE:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_RULE,
+ self::CONDITION_NOT_RULE,
+ ));
+ case HeraldFieldConfig::FIELD_AFFECTED_PACKAGE:
+ case HeraldFieldConfig::FIELD_AFFECTED_PACKAGE_OWNER:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_INCLUDE_ANY,
+ self::CONDITION_INCLUDE_NONE,
+ ));
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_REVISION:
+ return array_select_keys(
+ $map,
+ array(
+ self::CONDITION_EXISTS,
+ self::CONDITION_NOT_EXISTS,
+ ));
+ default:
+ throw new Exception("Unknown field type '{$field}'.");
+ }
+ }
+
+}
diff --git a/src/applications/herald/config/condition/__init__.php b/src/applications/herald/config/condition/__init__.php
new file mode 100644
index 0000000000..68fbcc4e6d
--- /dev/null
+++ b/src/applications/herald/config/condition/__init__.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/config/field');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldConditionConfig.php');
diff --git a/src/applications/herald/config/contenttype/HeraldContentTypeConfig.php b/src/applications/herald/config/contenttype/HeraldContentTypeConfig.php
new file mode 100644
index 0000000000..e1cb96a2f8
--- /dev/null
+++ b/src/applications/herald/config/contenttype/HeraldContentTypeConfig.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldContentTypeConfig {
+
+ const CONTENT_TYPE_DIFFERENTIAL = 'differential';
+ const CONTENT_TYPE_COMMIT = 'commit';
+ const CONTENT_TYPE_MERGE = 'merge';
+ const CONTENT_TYPE_OWNERS = 'owners';
+
+ public static function getContentTypeMap() {
+ static $map = array(
+ self::CONTENT_TYPE_DIFFERENTIAL => 'Differential Revisions',
+ self::CONTENT_TYPE_COMMIT => 'Commits',
+ self::CONTENT_TYPE_MERGE => 'Merge Requests',
+ self::CONTENT_TYPE_OWNERS => 'Owners Changes',
+ );
+ return $map;
+ }
+}
diff --git a/src/applications/herald/config/contenttype/__init__.php b/src/applications/herald/config/contenttype/__init__.php
new file mode 100644
index 0000000000..0224687e6d
--- /dev/null
+++ b/src/applications/herald/config/contenttype/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldContentTypeConfig.php');
diff --git a/src/applications/herald/config/field/HeraldFieldConfig.php b/src/applications/herald/config/field/HeraldFieldConfig.php
new file mode 100644
index 0000000000..5cb8e75573
--- /dev/null
+++ b/src/applications/herald/config/field/HeraldFieldConfig.php
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldFieldConfig {
+
+ const FIELD_TITLE = 'title';
+ const FIELD_BODY = 'body';
+ const FIELD_AUTHOR = 'author';
+ const FIELD_REVIEWER = 'reviewer';
+ const FIELD_REVIEWERS = 'reviewers';
+ const FIELD_CC = 'cc';
+ const FIELD_TAGS = 'tags';
+ const FIELD_DIFF_FILE = 'diff-file';
+ const FIELD_DIFF_CONTENT = 'diff-content';
+ const FIELD_REPOSITORY = 'repository';
+ const FIELD_RULE = 'rule';
+ const FIELD_AFFECTED_PACKAGE = 'affected-package';
+ const FIELD_AFFECTED_PACKAGE_OWNER = 'affected-package-owner';
+ const FIELD_DIFFERENTIAL_REVISION = 'differential-revision';
+ const FIELD_DIFFERENTIAL_REVIEWERS = 'differential-reviewers';
+ const FIELD_DIFFERENTIAL_CCS = 'differential-ccs';
+ const FIELD_MERGE_REQUESTER = 'merge-requester';
+
+ public static function getFieldMap() {
+ static $map = array(
+ self::FIELD_TITLE => 'Title',
+ self::FIELD_BODY => 'Body',
+ self::FIELD_AUTHOR => 'Author',
+ self::FIELD_REVIEWER => 'Reviewer',
+ self::FIELD_REVIEWERS => 'Reviewers',
+ self::FIELD_CC => 'CCs',
+ self::FIELD_TAGS => 'Tags',
+ self::FIELD_DIFF_FILE => 'Any changed filename',
+ self::FIELD_DIFF_CONTENT => 'Any changed file content',
+ self::FIELD_REPOSITORY => 'Repository',
+ self::FIELD_RULE => 'Another Herald rule',
+ self::FIELD_AFFECTED_PACKAGE => 'Any affected package',
+ self::FIELD_AFFECTED_PACKAGE_OWNER => "Any affected package's owner",
+ self::FIELD_DIFFERENTIAL_REVISION => 'Differential revision',
+ self::FIELD_DIFFERENTIAL_REVIEWERS => 'Differential reviewers',
+ self::FIELD_DIFFERENTIAL_CCS => 'Differential CCs',
+ self::FIELD_MERGE_REQUESTER => 'Merge requester'
+ );
+
+ return $map;
+ }
+
+ public static function getFieldMapForContentType($type) {
+ $map = self::getFieldMap();
+
+ switch ($type) {
+ case HeraldContentTypeConfig::CONTENT_TYPE_DIFFERENTIAL:
+ return array_select_keys(
+ $map,
+ array(
+ self::FIELD_TITLE,
+ self::FIELD_BODY,
+ self::FIELD_AUTHOR,
+ self::FIELD_REVIEWERS,
+ self::FIELD_CC,
+ self::FIELD_REPOSITORY,
+ self::FIELD_DIFF_FILE,
+ self::FIELD_DIFF_CONTENT,
+ self::FIELD_RULE,
+ self::FIELD_AFFECTED_PACKAGE,
+ self::FIELD_AFFECTED_PACKAGE_OWNER,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_COMMIT:
+ return array_select_keys(
+ $map,
+ array(
+ self::FIELD_BODY,
+ self::FIELD_AUTHOR,
+ self::FIELD_REVIEWER,
+ self::FIELD_REPOSITORY,
+ self::FIELD_DIFF_FILE,
+ self::FIELD_DIFF_CONTENT,
+ self::FIELD_RULE,
+ self::FIELD_AFFECTED_PACKAGE,
+ self::FIELD_AFFECTED_PACKAGE_OWNER,
+ self::FIELD_DIFFERENTIAL_REVISION,
+ self::FIELD_DIFFERENTIAL_REVIEWERS,
+ self::FIELD_DIFFERENTIAL_CCS,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_MERGE:
+ return array_select_keys(
+ $map,
+ array(
+ self::FIELD_BODY,
+ self::FIELD_AUTHOR,
+ self::FIELD_REVIEWER,
+ self::FIELD_REPOSITORY,
+ self::FIELD_DIFF_FILE,
+ self::FIELD_DIFF_CONTENT,
+ self::FIELD_RULE,
+ self::FIELD_AFFECTED_PACKAGE,
+ self::FIELD_AFFECTED_PACKAGE_OWNER,
+ self::FIELD_DIFFERENTIAL_REVISION,
+ self::FIELD_DIFFERENTIAL_REVIEWERS,
+ self::FIELD_DIFFERENTIAL_CCS,
+ self::FIELD_MERGE_REQUESTER,
+ ));
+ case HeraldContentTypeConfig::CONTENT_TYPE_OWNERS:
+ return array_select_keys(
+ $map,
+ array(
+ self::FIELD_AFFECTED_PACKAGE,
+ self::FIELD_AFFECTED_PACKAGE_OWNER,
+ ));
+ default:
+ throw new Exception("Unknown content type.");
+ }
+ }
+
+}
diff --git a/src/applications/herald/config/field/__init__.php b/src/applications/herald/config/field/__init__.php
new file mode 100644
index 0000000000..b8ff30f885
--- /dev/null
+++ b/src/applications/herald/config/field/__init__.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/config/contenttype');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldFieldConfig.php');
diff --git a/src/applications/herald/config/valuetype/HeraldValueTypeConfig.php b/src/applications/herald/config/valuetype/HeraldValueTypeConfig.php
new file mode 100644
index 0000000000..98d2731d34
--- /dev/null
+++ b/src/applications/herald/config/valuetype/HeraldValueTypeConfig.php
@@ -0,0 +1,90 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldValueTypeConfig {
+
+ const VALUE_TEXT = 'text';
+ const VALUE_NONE = 'none';
+ const VALUE_EMAIL = 'email';
+ const VALUE_USER = 'user';
+ const VALUE_TAG = 'tag';
+ const VALUE_RULE = 'rule';
+ const VALUE_REPOSITORY = 'repository';
+ const VALUE_OWNERS_PACKAGE = 'package';
+
+ public static function getValueTypeForFieldAndCondition($field, $condition) {
+ switch ($condition) {
+ case HeraldConditionConfig::CONDITION_CONTAINS:
+ case HeraldConditionConfig::CONDITION_NOT_CONTAINS:
+ case HeraldConditionConfig::CONDITION_IS:
+ case HeraldConditionConfig::CONDITION_IS_NOT:
+ case HeraldConditionConfig::CONDITION_REGEXP:
+ case HeraldConditionConfig::CONDITION_REGEXP_PAIR:
+ return self::VALUE_TEXT;
+ case HeraldConditionConfig::CONDITION_IS_ANY:
+ case HeraldConditionConfig::CONDITION_IS_NOT_ANY:
+ switch ($field) {
+ case HeraldFieldConfig::FIELD_REPOSITORY:
+ return self::VALUE_REPOSITORY;
+ default:
+ return self::VALUE_USER;
+ }
+ break;
+ case HeraldConditionConfig::CONDITION_INCLUDE_ALL:
+ case HeraldConditionConfig::CONDITION_INCLUDE_ANY:
+ case HeraldConditionConfig::CONDITION_INCLUDE_NONE:
+ switch ($field) {
+ case HeraldFieldConfig::FIELD_REPOSITORY:
+ return self::VALUE_REPOSITORY;
+ case HeraldFieldConfig::FIELD_CC:
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_CCS:
+ return self::VALUE_EMAIL;
+ case HeraldFieldConfig::FIELD_TAGS:
+ return self::VALUE_TAG;
+ case HeraldFieldConfig::FIELD_AFFECTED_PACKAGE:
+ return self::VALUE_OWNERS_PACKAGE;
+ default:
+ return self::VALUE_USER;
+ }
+ break;
+ case HeraldConditionConfig::CONDITION_IS_ME:
+ case HeraldConditionConfig::CONDITION_IS_NOT_ME:
+ case HeraldConditionConfig::CONDITION_EXISTS:
+ case HeraldConditionConfig::CONDITION_NOT_EXISTS:
+ return self::VALUE_NONE;
+ case HeraldConditionConfig::CONDITION_RULE:
+ case HeraldConditionConfig::CONDITION_NOT_RULE:
+ return self::VALUE_RULE;
+ default:
+ throw new Exception("Unknown condition.");
+ }
+ }
+
+ public static function getValueTypeForAction($action) {
+ switch ($action) {
+ case HeraldActionConfig::ACTION_ADD_CC:
+ case HeraldActionConfig::ACTION_REMOVE_CC:
+ case HeraldActionConfig::ACTION_EMAIL:
+ return self::VALUE_EMAIL;
+ case HeraldActionConfig::ACTION_NOTHING:
+ return self::VALUE_NONE;
+ default:
+ throw new Exception("Unknown action '{$action}'.");
+ }
+ }
+}
diff --git a/src/applications/herald/config/valuetype/__init__.php b/src/applications/herald/config/valuetype/__init__.php
new file mode 100644
index 0000000000..fa2853276e
--- /dev/null
+++ b/src/applications/herald/config/valuetype/__init__.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/config/action');
+phutil_require_module('phabricator', 'applications/herald/config/condition');
+phutil_require_module('phabricator', 'applications/herald/config/field');
+
+
+phutil_require_source('HeraldValueTypeConfig.php');
diff --git a/src/applications/herald/engine/effect/HeraldEffect.php b/src/applications/herald/engine/effect/HeraldEffect.php
new file mode 100644
index 0000000000..074f473d70
--- /dev/null
+++ b/src/applications/herald/engine/effect/HeraldEffect.php
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldEffect {
+
+ protected $objectID;
+ protected $action;
+ protected $target;
+
+ protected $ruleID;
+ protected $effector;
+
+ protected $reason;
+
+ public function setObjectID($object_id) {
+ $this->objectID = $object_id;
+ return $this;
+ }
+
+ public function getObjectID() {
+ return $this->objectID;
+ }
+
+ public function setAction($action) {
+ $this->action = $action;
+ return $this;
+ }
+
+ public function getAction() {
+ return $this->action;
+ }
+
+ public function setTarget($target) {
+ $this->target = $target;
+ return $this;
+ }
+
+ public function getTarget() {
+ return $this->target;
+ }
+
+ public function setRuleID($rule_id) {
+ $this->ruleID = $rule_id;
+ return $this;
+ }
+
+ public function getRuleID() {
+ return $this->ruleID;
+ }
+
+ public function setEffector($effector) {
+ $this->effector = $effector;
+ return $this;
+ }
+
+ public function getEffector() {
+ return $this->effector;
+ }
+
+ public function setReason($reason) {
+ $this->reason = $reason;
+ return $this;
+ }
+
+ public function getReason() {
+ return $this->reason;
+ }
+
+}
+
diff --git a/src/applications/herald/engine/effect/__init__.php b/src/applications/herald/engine/effect/__init__.php
new file mode 100644
index 0000000000..e3782e8021
--- /dev/null
+++ b/src/applications/herald/engine/effect/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldEffect.php');
diff --git a/src/applications/herald/engine/engine/HeraldEngine.php b/src/applications/herald/engine/engine/HeraldEngine.php
new file mode 100644
index 0000000000..96f283e977
--- /dev/null
+++ b/src/applications/herald/engine/engine/HeraldEngine.php
@@ -0,0 +1,447 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldEngine {
+
+ protected $rules = array();
+ protected $results = array();
+ protected $stack = array();
+ protected $activeRule = null;
+
+ protected $fieldCache = array();
+ protected $object = null;
+
+ public static function loadAndApplyRules(IHeraldable $object) {
+ $content_type = $object->getHeraldTypeName();
+ $rules = HeraldRule::loadAllByContentTypeWithFullData($content_type);
+
+ $engine = new HeraldEngine();
+ $effects = $engine->applyRules($rules, $object);
+ $engine->applyEffects($effects, $object);
+
+ return $engine->getTranscript();
+ }
+
+ public function applyRules(array $rules, IHeraldable $object) {
+ $t_start = microtime(true);
+
+ $rules = mpull($rules, null, 'getID');
+
+ $this->transcript = new HeraldTranscript();
+ $this->transcript->setObjectID((string)$object->getFBID());
+ $this->fieldCache = array();
+ $this->results = array();
+ $this->rules = $rules;
+ $this->object = $object;
+
+ $effects = array();
+ foreach ($rules as $id => $rule) {
+
+
+ $this->stack = array();
+ try {
+ $rule_matches = $this->doesRuleMatch($rule, $object);
+ } catch (HeraldRecursiveConditionsException $ex) {
+ $names = array();
+ foreach ($this->stack as $rule_id => $ignored) {
+ $names[] = '"'.$rules[$rule_id]->getName().'"';
+ }
+ $names = implode(', ', $names);
+ foreach ($this->stack as $rule_id => $ignored) {
+ $xscript = new HeraldRuleTranscript();
+ $xscript->setRuleID($rule_id);
+ $xscript->setResult(false);
+ $xscript->setReason(
+ "Rules {$names} are recursively dependent upon one another! ".
+ "Don't do this! You have formed an unresolvable cycle in the ".
+ "dependency graph!");
+ $xscript->setRuleName($rules[$rule_id]->getName());
+ $xscript->setRuleOwner($rules[$rule_id]->getOwnerID());
+ $this->transcript->addRuleTranscript($xscript);
+ }
+ $rule_matches = false;
+ }
+ $this->results[$id] = $rule_matches;
+
+ if ($rule_matches) {
+ foreach ($this->getRuleEffects($rule, $object) as $effect) {
+ $effects[] = $effect;
+ }
+ }
+ }
+
+ $object_transcript = new HeraldObjectTranscript();
+ $object_transcript->setFBID($object->getFBID());
+ $object_transcript->setName($object->getHeraldName());
+ $object_transcript->setType($object->getHeraldTypeName());
+ $object_transcript->setFields($this->fieldCache);
+
+ $this->transcript->setObjectTranscript($object_transcript);
+
+ $t_end = microtime(true);
+
+ $this->transcript->setDuration($t_end - $t_start);
+
+ return $effects;
+ }
+
+ public function applyEffects(array $effects, IHeraldable $object) {
+ if ($object instanceof DryRunHeraldable) {
+ $this->transcript->setDryRun(true);
+ } else {
+ $this->transcript->setDryRun(false);
+ }
+ foreach ($object->applyHeraldEffects($effects) as $apply_xscript) {
+ if (!($apply_xscript instanceof HeraldApplyTranscript)) {
+ throw new Exception(
+ "Heraldable must return HeraldApplyTranscripts from ".
+ "applyHeraldEffect().");
+ }
+ $this->transcript->addApplyTranscript($apply_xscript);
+ }
+ }
+
+ public function getTranscript() {
+ $this->transcript->save();
+ return $this->transcript;
+ }
+
+ protected function doesRuleMatch(HeraldRule $rule, IHeraldable $object) {
+ $id = $rule->getID();
+
+ if (isset($this->results[$id])) {
+ // If we've already evaluated this rule because another rule depends
+ // on it, we don't need to reevaluate it.
+ return $this->results[$id];
+ }
+
+ if (isset($this->stack[$id])) {
+ // We've recursed, fail all of the rules on the stack. This happens when
+ // there's a dependency cycle with "Rule conditions match for rule ..."
+ // conditions.
+ foreach ($this->stack as $rule_id => $ignored) {
+ $this->results[$rule_id] = false;
+ }
+ throw new HeraldRecursiveConditionsException();
+ }
+
+ $this->stack[$id] = true;
+
+ $all = $rule->getMustMatchAll();
+
+ $conditions = $rule->getConditions();
+
+ $result = null;
+
+ $local_version = id(new HeraldRule())->getConfigVersion();
+ if ($rule->getConfigVersion() > $local_version) {
+ $reason = "Rule could not be processed, it was created with a newer ".
+ "version of Herald.";
+ $result = false;
+ } else if (!$conditions) {
+ $reason = "Rule failed automatically because it has no conditions.";
+ $result = false;
+/* TOOD: Restore this in some form?
+ } else if (!is_fb_employee($rule->getOwnerID())) {
+ $reason = "Rule failed automatically because its owner is not an ".
+ "active employee.";
+ $result = false;
+*/
+ } else {
+ foreach ($conditions as $condition) {
+ $match = $this->doesConditionMatch($rule, $condition, $object);
+
+ if (!$all && $match) {
+ $reason = "Any condition matched.";
+ $result = true;
+ break;
+ }
+
+ if ($all && !$match) {
+ $reason = "Not all conditions matched.";
+ $result = false;
+ break;
+ }
+ }
+
+ if ($result === null) {
+ if ($all) {
+ $reason = "All conditions matched.";
+ $result = true;
+ } else {
+ $reason = "No conditions matched.";
+ $result = false;
+ }
+ }
+ }
+
+ $rule_transcript = new HeraldRuleTranscript();
+ $rule_transcript->setRuleID($rule->getID());
+ $rule_transcript->setResult($result);
+ $rule_transcript->setReason($reason);
+ $rule_transcript->setRuleName($rule->getName());
+ $rule_transcript->setRuleOwner($rule->getOwnerID());
+
+ $this->transcript->addRuleTranscript($rule_transcript);
+
+ return $result;
+ }
+
+ protected function doesConditionMatch(
+ HeraldRule $rule,
+ HeraldCondition $condition,
+ IHeraldable $object) {
+
+ $object_value = $this->getConditionObjectValue($condition, $object);
+ $test_value = $condition->getValue();
+
+ $cond = $condition->getCondition();
+
+ $transcript = new HeraldConditionTranscript();
+ $transcript->setRuleID($rule->getID());
+ $transcript->setConditionID($condition->getID());
+ $transcript->setFieldName($condition->getFieldName());
+ $transcript->setCondition($cond);
+ $transcript->setTestValue($test_value);
+
+ $result = null;
+ switch ($cond) {
+ case HeraldConditionConfig::CONDITION_CONTAINS:
+ // "Contains" can take an array of strings, as in "Any changed
+ // filename" for diffs.
+ foreach ((array)$object_value as $value) {
+ $result = (stripos($value, $test_value) !== false);
+ if ($result) {
+ break;
+ }
+ }
+ break;
+ case HeraldConditionConfig::CONDITION_NOT_CONTAINS:
+ $result = (stripos($object_value, $test_value) === false);
+ break;
+ case HeraldConditionConfig::CONDITION_IS:
+ $result = ($object_value == $test_value);
+ break;
+ case HeraldConditionConfig::CONDITION_IS_NOT:
+ $result = ($object_value != $test_value);
+ break;
+ case HeraldConditionConfig::CONDITION_IS_ME:
+ $result = ($object_value == $rule->getOwnerID());
+ break;
+ case HeraldConditionConfig::CONDITION_IS_NOT_ME:
+ $result = ($object_value != $rule->getOwnerID());
+ break;
+ case HeraldConditionConfig::CONDITION_IS_ANY:
+ $test_value = array_flip($test_value);
+ $result = isset($test_value[$object_value]);
+ break;
+ case HeraldConditionConfig::CONDITION_IS_NOT_ANY:
+ $test_value = array_flip($test_value);
+ $result = !isset($test_value[$object_value]);
+ break;
+ case HeraldConditionConfig::CONDITION_INCLUDE_ALL:
+ if (!is_array($object_value)) {
+ $transcript->setNote('Object produced bad value!');
+ $result = false;
+ } else {
+ $have = array_select_keys(array_flip($object_value),
+ $test_value);
+ $result = (count($have) == count($test_value));
+ }
+ break;
+ case HeraldConditionConfig::CONDITION_INCLUDE_ANY:
+ $result = (bool)array_select_keys(array_flip($object_value),
+ $test_value);
+ break;
+ case HeraldConditionConfig::CONDITION_INCLUDE_NONE:
+ $result = !array_select_keys(array_flip($object_value),
+ $test_value);
+ break;
+ case HeraldConditionConfig::CONDITION_EXISTS:
+ $result = (bool)$object_value;
+ break;
+ case HeraldConditionConfig::CONDITION_NOT_EXISTS:
+ $result = !$object_value;
+ break;
+ case HeraldConditionConfig::CONDITION_REGEXP:
+ foreach ((array)$object_value as $value) {
+ $result = @preg_match($test_value, $value);
+ if ($result === false) {
+ $transcript->setNote(
+ "Regular expression is not valid!");
+ break;
+ }
+ if ($result) {
+ break;
+ }
+ }
+ $result = (bool)$result;
+ break;
+ case HeraldConditionConfig::CONDITION_REGEXP_PAIR:
+ // Match a JSON-encoded pair of regular expressions against a
+ // dictionary. The first regexp must match the dictionary key, and the
+ // second regexp must match the dictionary value. If any key/value pair
+ // in the dictionary matches both regexps, the condition is satisfied.
+ $regexp_pair = json_decode($test_value, true);
+ if (!is_array($regexp_pair)) {
+ $result = false;
+ $transcript->setNote("Regular expression pair is not valid JSON!");
+ break;
+ }
+ if (count($regexp_pair) != 2) {
+ $result = false;
+ $transcript->setNote("Regular expression pair is not a pair!");
+ break;
+ }
+
+ $key_regexp = array_shift($regexp_pair);
+ $value_regexp = array_shift($regexp_pair);
+
+ foreach ((array)$object_value as $key => $value) {
+ $key_matches = @preg_match($key_regexp, $key);
+ if ($key_matches === false) {
+ $result = false;
+ $transcript->setNote("First regular expression is invalid!");
+ break 2;
+ }
+ if ($key_matches) {
+ $value_matches = @preg_match($value_regexp, $value);
+ if ($value_matches === false) {
+ $result = false;
+ $transcript->setNote("Second regular expression is invalid!");
+ break 2;
+ }
+ if ($value_matches) {
+ $result = true;
+ break 2;
+ }
+ }
+ }
+ $result = false;
+ break;
+ case HeraldConditionConfig::CONDITION_RULE:
+ case HeraldConditionConfig::CONDITION_NOT_RULE:
+
+ $rule = idx($this->rules, $test_value);
+ if (!$rule) {
+ $transcript->setNote(
+ "Condition references a rule which does not exist!");
+ $result = false;
+ } else {
+ $is_not = ($cond == HeraldConditionConfig::CONDITION_NOT_RULE);
+ $result = $this->doesRuleMatch($rule, $object);
+ if ($is_not) {
+ $result = !$result;
+ }
+ }
+ break;
+ default:
+ throw new HeraldInvalidConditionException(
+ "Unknown condition '{$cond}'.");
+ }
+
+ $transcript->setResult($result);
+
+ $this->transcript->addConditionTranscript($transcript);
+
+ return $result;
+ }
+
+ protected function getConditionObjectValue(
+ HeraldCondition $condition,
+ IHeraldable $object) {
+
+ $field = $condition->getFieldName();
+
+ return $this->getObjectFieldValue($field);
+ }
+
+ public function getObjectFieldValue($field) {
+ if (isset($this->fieldCache[$field])) {
+ return $this->fieldCache[$field];
+ }
+
+ $result = null;
+ switch ($field) {
+ case HeraldFieldConfig::FIELD_RULE:
+ $result = null;
+ break;
+ case HeraldFieldConfig::FIELD_TITLE:
+ case HeraldFieldConfig::FIELD_BODY:
+ case HeraldFieldConfig::FIELD_DIFF_FILE:
+ case HeraldFieldConfig::FIELD_DIFF_CONTENT:
+ // TODO: Type should be string.
+ $result = $this->object->getHeraldField($field);
+ break;
+ case HeraldFieldConfig::FIELD_AUTHOR:
+ case HeraldFieldConfig::FIELD_REPOSITORY:
+ case HeraldFieldConfig::FIELD_MERGE_REQUESTER:
+ // TODO: Type should be fbid.
+ $result = $this->object->getHeraldField($field);
+ break;
+ case HeraldFieldConfig::FIELD_TAGS:
+ case HeraldFieldConfig::FIELD_REVIEWER:
+ case HeraldFieldConfig::FIELD_REVIEWERS:
+ case HeraldFieldConfig::FIELD_CC:
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_REVIEWERS:
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_CCS:
+ // TODO: Type should be list.
+ $result = $this->object->getHeraldField($field);
+ break;
+ case HeraldFieldConfig::FIELD_AFFECTED_PACKAGE:
+ case HeraldFieldConfig::FIELD_AFFECTED_PACKAGE_OWNER:
+ $result = $this->object->getHeraldField($field);
+ if (!is_array($result)) {
+ throw new HeraldInvalidFieldException(
+ "Value of field type {$field} is not an array!");
+ }
+ break;
+ case HeraldFieldConfig::FIELD_DIFFERENTIAL_REVISION:
+ // TODO: Type should be boolean I guess.
+ $result = $this->object->getHeraldField($field);
+ break;
+ default:
+ throw new HeraldInvalidConditionException(
+ "Unknown field type '{$field}'!");
+ }
+
+ $this->fieldCache[$field] = $result;
+ return $result;
+ }
+
+ protected function getRuleEffects(HeraldRule $rule, IHeraldable $object) {
+ $effects = array();
+ foreach ($rule->getActions() as $action) {
+ $effect = new HeraldEffect();
+ $effect->setObjectID($object->getFBID());
+ $effect->setAction($action->getAction());
+ $effect->setTarget($action->getTarget());
+
+ $effect->setRuleID($rule->getID());
+
+ $name = $rule->getName();
+ $id = $rule->getID();
+ $effect->setReason(
+ 'Conditions were met for Herald rule "'.$name.'" (#'.$id.').');
+
+ $effects[] = $effect;
+ }
+ return $effects;
+ }
+
+}
diff --git a/src/applications/herald/engine/engine/__init__.php b/src/applications/herald/engine/engine/__init__.php
new file mode 100644
index 0000000000..5b7eab228c
--- /dev/null
+++ b/src/applications/herald/engine/engine/__init__.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/config/condition');
+phutil_require_module('phabricator', 'applications/herald/config/field');
+phutil_require_module('phabricator', 'applications/herald/engine/effect');
+phutil_require_module('phabricator', 'applications/herald/engine/engine/exception');
+phutil_require_module('phabricator', 'applications/herald/storage/rule');
+phutil_require_module('phabricator', 'applications/herald/storage/transcript/base');
+phutil_require_module('phabricator', 'applications/herald/storage/transcript/condition');
+phutil_require_module('phabricator', 'applications/herald/storage/transcript/object');
+phutil_require_module('phabricator', 'applications/herald/storage/transcript/rule');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldEngine.php');
diff --git a/src/applications/herald/engine/engine/exception/HeraldInvalidConditionException.php b/src/applications/herald/engine/engine/exception/HeraldInvalidConditionException.php
new file mode 100644
index 0000000000..44f316109e
--- /dev/null
+++ b/src/applications/herald/engine/engine/exception/HeraldInvalidConditionException.php
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldInvalidConditionException extends Exception {}
diff --git a/src/applications/herald/engine/engine/exception/HeraldInvalidFieldException.php b/src/applications/herald/engine/engine/exception/HeraldInvalidFieldException.php
new file mode 100644
index 0000000000..636084e90f
--- /dev/null
+++ b/src/applications/herald/engine/engine/exception/HeraldInvalidFieldException.php
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldInvalidFieldException extends Exception {}
diff --git a/src/applications/herald/engine/engine/exception/HeraldRecursiveConditionsException.php b/src/applications/herald/engine/engine/exception/HeraldRecursiveConditionsException.php
new file mode 100644
index 0000000000..20c732da8d
--- /dev/null
+++ b/src/applications/herald/engine/engine/exception/HeraldRecursiveConditionsException.php
@@ -0,0 +1,19 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldRecursiveConditionsException extends Exception {}
diff --git a/src/applications/herald/engine/engine/exception/__init__.php b/src/applications/herald/engine/engine/exception/__init__.php
new file mode 100644
index 0000000000..df108e61fc
--- /dev/null
+++ b/src/applications/herald/engine/engine/exception/__init__.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldInvalidConditionException.php');
+phutil_require_source('HeraldInvalidFieldException.php');
+phutil_require_source('HeraldRecursiveConditionsException.php');
diff --git a/src/applications/herald/heraldable/base/IHeraldable.php b/src/applications/herald/heraldable/base/IHeraldable.php
new file mode 100644
index 0000000000..7fb5061ae6
--- /dev/null
+++ b/src/applications/herald/heraldable/base/IHeraldable.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+interface IHeraldable {
+
+ public function getFBID();
+ public function getHeraldName();
+ public function getHeraldTypeName();
+ public function getHeraldField($field_name);
+ public function applyHeraldEffects(array $effects);
+
+}
+
diff --git a/src/applications/herald/heraldable/base/__init__.php b/src/applications/herald/heraldable/base/__init__.php
new file mode 100644
index 0000000000..a7adec53e8
--- /dev/null
+++ b/src/applications/herald/heraldable/base/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('IHeraldable.php');
diff --git a/src/applications/herald/heraldable/dryrun/DryRunHeraldable.php b/src/applications/herald/heraldable/dryrun/DryRunHeraldable.php
new file mode 100644
index 0000000000..b2e9cedacf
--- /dev/null
+++ b/src/applications/herald/heraldable/dryrun/DryRunHeraldable.php
@@ -0,0 +1,47 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class DryRunHeraldable implements IHeraldable {
+
+ public function getFBID() {
+ return 0;
+ }
+
+ public function getHeraldName() {
+ return 'Dry Run';
+ }
+
+ public function getHeraldTypeName() {
+ return null;
+ }
+
+ public function getHeraldField($field) {
+ return null;
+ }
+
+ public function applyHeraldEffects(array $effects) {
+ $results = array();
+ foreach ($effects as $effect) {
+ $results[] = new HeraldApplyTranscript(
+ $effect,
+ false,
+ 'This was a dry run, so no actions were actually taken.');
+ }
+ return $results;
+ }
+}
diff --git a/src/applications/herald/heraldable/dryrun/__init__.php b/src/applications/herald/heraldable/dryrun/__init__.php
new file mode 100644
index 0000000000..bc8ecabf94
--- /dev/null
+++ b/src/applications/herald/heraldable/dryrun/__init__.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/heraldable/base');
+phutil_require_module('phabricator', 'applications/herald/storage/transcript/apply');
+
+
+phutil_require_source('DryRunHeraldable.php');
diff --git a/src/applications/herald/storage/action/HeraldAction.php b/src/applications/herald/storage/action/HeraldAction.php
new file mode 100644
index 0000000000..b667095181
--- /dev/null
+++ b/src/applications/herald/storage/action/HeraldAction.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldAction extends HeraldDAO {
+
+ protected $ruleID;
+
+ protected $action;
+ protected $target;
+
+ protected function getConfiguration() {
+ return array(
+ self::CONFIG_SERIALIZATION => array(
+ 'target' => self::SERIALIZATION_JSON,
+ )
+ ) + parent::getConfiguration();
+ }
+
+
+}
diff --git a/src/applications/herald/storage/action/__init__.php b/src/applications/herald/storage/action/__init__.php
new file mode 100644
index 0000000000..e1803d6a7a
--- /dev/null
+++ b/src/applications/herald/storage/action/__init__.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/storage/base');
+
+
+phutil_require_source('HeraldAction.php');
diff --git a/src/applications/herald/storage/base/HeraldDAO.php b/src/applications/herald/storage/base/HeraldDAO.php
new file mode 100644
index 0000000000..183d25c343
--- /dev/null
+++ b/src/applications/herald/storage/base/HeraldDAO.php
@@ -0,0 +1,25 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+abstract class HeraldDAO extends PhabricatorLiskDAO {
+
+ public function getApplicationName() {
+ return 'herald';
+ }
+
+}
diff --git a/src/applications/herald/storage/base/__init__.php b/src/applications/herald/storage/base/__init__.php
new file mode 100644
index 0000000000..52809f3353
--- /dev/null
+++ b/src/applications/herald/storage/base/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+phutil_require_module('phabricator', 'applications/base/storage/lisk');
+
+phutil_require_source('HeraldDAO.php');
diff --git a/src/applications/herald/storage/condition/HeraldCondition.php b/src/applications/herald/storage/condition/HeraldCondition.php
new file mode 100644
index 0000000000..ac819c769e
--- /dev/null
+++ b/src/applications/herald/storage/condition/HeraldCondition.php
@@ -0,0 +1,35 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldCondition extends HeraldDAO {
+
+ protected $ruleID;
+
+ protected $fieldName;
+ protected $condition;
+ protected $value;
+
+ protected function getConfiguration() {
+ return array(
+ self::CONFIG_SERIALIZATION => array(
+ 'value' => self::SERIALIZATION_JSON,
+ )
+ ) + parent::getConfiguration();
+ }
+
+}
diff --git a/src/applications/herald/storage/condition/__init__.php b/src/applications/herald/storage/condition/__init__.php
new file mode 100644
index 0000000000..b32ed32bea
--- /dev/null
+++ b/src/applications/herald/storage/condition/__init__.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/storage/base');
+
+
+phutil_require_source('HeraldCondition.php');
diff --git a/src/applications/herald/storage/rule/HeraldRule.php b/src/applications/herald/storage/rule/HeraldRule.php
new file mode 100644
index 0000000000..b19603b4fe
--- /dev/null
+++ b/src/applications/herald/storage/rule/HeraldRule.php
@@ -0,0 +1,141 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldRule extends HeraldDAO {
+
+ protected $name;
+ protected $ownerID;
+
+ protected $contentType;
+ protected $mustMatchAll;
+
+ protected $configVersion = 7;
+
+ public static function loadAllByContentTypeWithFullData($content_type) {
+ $rules = id(new HeraldRule())->loadAllWhere(
+ 'contentType = %s',
+ $content_type);
+ $rule_ids = mpull($rules, 'getID');
+
+ $conditions = id(new HeraldCondition())->loadAllWhere(
+ 'ruleID in (%Ld)',
+ $rule_ids);
+
+ $actions = id(new HeraldAction())->loadAllWhere(
+ 'ruleID in (%Ld)',
+ $rule_ids);
+
+ $conditions = mgroup($conditions, 'getRuleID');
+ $actions = mgroup($actions, 'getRuleID');
+
+ foreach ($rules as $rule) {
+ $rule->attachConditions(idx($conditions, $rule->getID(), array()));
+ $rule->attachActions(idx($actions, $rule->getID(), array()));
+ }
+
+ return $rules;
+ }
+
+ public function loadConditions() {
+ if (!$this->getID()) {
+ return array();
+ }
+ return id(new HeraldCondition())->loadAllWhere(
+ 'ruleID = %d',
+ $this->getID());
+ }
+
+ public function attachConditions(array $conditions) {
+ $this->conditions = $conditions;
+ return $this;
+ }
+
+ public function getConditions() {
+ // TODO: validate conditions have been attached.
+ return $this->conditions;
+ }
+
+ public function loadActions() {
+ if (!$this->getID()) {
+ return array();
+ }
+ return id(new HeraldAction())->loadAllWhere(
+ 'ruleID = %d',
+ $this->getID());
+ }
+
+ public function attachActions(array $actions) {
+ // TODO: validate actions have been attached.
+ $this->actions = $actions;
+ return $this;
+ }
+
+ public function getActions() {
+ return $this->actions;
+ }
+
+ public function saveConditions(array $conditions) {
+ return $this->saveChildren(
+ id(new HeraldCondition())->getTableName(),
+ $conditions);
+ }
+
+ public function saveActions(array $actions) {
+ return $this->saveChildren(
+ id(new HeraldAction())->getTableName(),
+ $actions);
+ }
+
+ protected function saveChildren($table_name, array $children) {
+ if (!$this->getID()) {
+ throw new Exception("Save rule before saving children.");
+ }
+
+ foreach ($children as $child) {
+ $child->setRuleID($this->getID());
+ }
+
+// TODO:
+// $this->openTransaction();
+ $this->getLink('w')->query(
+ 'DELETE FROM %T WHERE ruleID = %d',
+ $table_name,
+ $this->getID());
+ foreach ($children as $child) {
+ $child->save();
+ }
+// $this->saveTransaction();
+ }
+
+ public function delete() {
+
+// TODO:
+// $this->openTransaction();
+ $this->getLink('w')->query(
+ 'DELETE FROM %T WHERE ruleID = %d',
+ id(new HeraldCondition())->getTableName(),
+ $this->getID());
+ $this->getLink('w')->query(
+ 'DELETE FROM %T WHERE ruleID = %d',
+ id(new HeraldAction())->getTableName(),
+ $this->getID());
+ parent::delete();
+// $this->saveTransaction();
+ }
+
+}
diff --git a/src/applications/herald/storage/rule/__init__.php b/src/applications/herald/storage/rule/__init__.php
new file mode 100644
index 0000000000..d40a9ab37c
--- /dev/null
+++ b/src/applications/herald/storage/rule/__init__.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/storage/action');
+phutil_require_module('phabricator', 'applications/herald/storage/base');
+phutil_require_module('phabricator', 'applications/herald/storage/condition');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldRule.php');
diff --git a/src/applications/herald/storage/transcript/apply/HeraldApplyTranscript.php b/src/applications/herald/storage/transcript/apply/HeraldApplyTranscript.php
new file mode 100644
index 0000000000..8e3146241a
--- /dev/null
+++ b/src/applications/herald/storage/transcript/apply/HeraldApplyTranscript.php
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldApplyTranscript extends HeraldDAO {
+
+ protected $action;
+ protected $target;
+
+ protected $ruleID;
+ protected $effector;
+
+ protected $reason;
+
+ protected $applied;
+ protected $appliedReason;
+
+ public function __construct(
+ HeraldEffect $effect,
+ $applied,
+ $reason = null) {
+
+ $this->setAction($effect->getAction());
+ $this->setTarget($effect->getTarget());
+ $this->setRuleID($effect->getRuleID());
+ $this->setEffector($effect->getEffector());
+ $this->setReason($effect->getReason());
+ $this->setApplied($applied);
+ $this->setAppliedReason($reason);
+
+ }
+
+ public function getAction() {
+ return $this->action;
+ }
+
+ public function getTarget() {
+ return $this->target;
+ }
+
+ public function getRuleID() {
+ return $this->ruleID;
+ }
+
+ public function getEffector() {
+ return $this->effector;
+ }
+
+ public function getReason() {
+ return $this->reason;
+ }
+
+ public function getApplied() {
+ return $this->applied;
+ }
+
+ public function setAppliedReason($applied_reason) {
+ $this->appliedReason = $applied_reason;
+ return $this;
+ }
+
+ public function getAppliedReason() {
+ return $this->appliedReason;
+ }
+
+}
diff --git a/src/applications/herald/storage/transcript/apply/__init__.php b/src/applications/herald/storage/transcript/apply/__init__.php
new file mode 100644
index 0000000000..3f4fbdec95
--- /dev/null
+++ b/src/applications/herald/storage/transcript/apply/__init__.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/storage/base');
+
+
+phutil_require_source('HeraldApplyTranscript.php');
diff --git a/src/applications/herald/storage/transcript/base/HeraldTranscript.php b/src/applications/herald/storage/transcript/base/HeraldTranscript.php
new file mode 100644
index 0000000000..48df40ebec
--- /dev/null
+++ b/src/applications/herald/storage/transcript/base/HeraldTranscript.php
@@ -0,0 +1,144 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldTranscript extends HeraldDAO {
+
+ protected $id;
+ protected $fbid;
+
+ protected $objectTranscript;
+ protected $ruleTranscripts = array();
+ protected $conditionTranscripts = array();
+ protected $applyTranscripts = array();
+
+ protected $time;
+ protected $host;
+ protected $path;
+ protected $duration;
+
+ protected $objectID;
+ protected $dryRun;
+
+ public function getXHeraldRulesHeader() {
+ $ids = array();
+ foreach ($this->applyTranscripts as $xscript) {
+ if ($xscript->getApplied()) {
+ if ($xscript->getRuleID()) {
+ $ids[] = $xscript->getRuleID();
+ }
+ }
+ }
+ if (!$ids) {
+ return 'none';
+ }
+
+ // A rule may have multiple effects, which will cause it to be listed
+ // multiple times.
+ $ids = array_unique($ids);
+
+ foreach ($ids as $k => $id) {
+ $ids[$k] = '<'.$id.'>';
+ }
+
+ return implode(', ', $ids);
+ }
+
+ protected function getConfiguration() {
+ // Ugh. Too much of a mess to deal with.
+ return array(
+ self::CONFIG_AUX_FBID => 'HERALD_TRANSCRIPT',
+ self::CONFIG_SERIALIZATION => array(
+ 'objectTranscript' => self::SERIALIZATION_PHP,
+ 'ruleTranscripts' => self::SERIALIZATION_PHP,
+ 'conditionTranscripts' => self::SERIALIZATION_PHP,
+ 'applyTranscripts' => self::SERIALIZATION_PHP,
+ ),
+ ) + parent::getConfiguration();
+ }
+
+ public function __construct() {
+ $this->time = time();
+ $this->host = php_uname('n');
+ $this->path = realpath($_SERVER['PHP_ROOT']);
+ }
+
+ public function addApplyTranscript(HeraldApplyTranscript $transcript) {
+ $this->applyTranscripts[] = $transcript;
+ return $this;
+ }
+
+ public function getApplyTranscripts() {
+ return nonempty($this->applyTranscripts, array());
+ }
+
+ public function setDuration($duration) {
+ $this->duration = $duration;
+ return $this;
+ }
+
+ public function setObjectTranscript(HeraldObjectTranscript $transcript) {
+ $this->objectTranscript = $transcript;
+ return $this;
+ }
+
+ public function getObjectTranscript() {
+ return $this->objectTranscript;
+ }
+
+ public function addRuleTranscript(HeraldRuleTranscript $transcript) {
+ $this->ruleTranscripts[$transcript->getRuleID()] = $transcript;
+ return $this;
+ }
+
+ public function discardDetails() {
+ $this->applyTranscripts = null;
+ $this->ruleTranscripts = null;
+ $this->objectTranscript = null;
+ $this->conditionTranscripts = null;
+ }
+
+ public function getRuleTranscripts() {
+ return nonempty($this->ruleTranscripts, array());
+ }
+
+ public function addConditionTranscript(
+ HeraldConditionTranscript $transcript) {
+ $rule_id = $transcript->getRuleID();
+ $cond_id = $transcript->getConditionID();
+
+ $this->conditionTranscripts[$rule_id][$cond_id] = $transcript;
+ return $this;
+ }
+
+ public function getConditionTranscriptsForRule($rule_id) {
+ return idx($this->conditionTranscripts, $rule_id, array());
+ }
+
+ public function getMetadataMap() {
+ return array(
+ 'Run At Epoch' => date('F jS, g:i A', $this->time),
+ 'Run On Host' => $this->host.':'.$this->path,
+ 'Run Duration' => (int)(1000 * $this->duration).' ms',
+ );
+ }
+
+ public function getURI() {
+ return 'http://tools.facebook.com/herald/transcript/'.$this->getID().'/';
+ }
+
+}
diff --git a/src/applications/herald/storage/transcript/base/__init__.php b/src/applications/herald/storage/transcript/base/__init__.php
new file mode 100644
index 0000000000..dd3d4f4993
--- /dev/null
+++ b/src/applications/herald/storage/transcript/base/__init__.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/herald/storage/base');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('HeraldTranscript.php');
diff --git a/src/applications/herald/storage/transcript/condition/HeraldConditionTranscript.php b/src/applications/herald/storage/transcript/condition/HeraldConditionTranscript.php
new file mode 100644
index 0000000000..130edf22a5
--- /dev/null
+++ b/src/applications/herald/storage/transcript/condition/HeraldConditionTranscript.php
@@ -0,0 +1,91 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldConditionTranscript {
+
+ protected $ruleID;
+ protected $conditionID;
+ protected $fieldName;
+ protected $condition;
+ protected $testValue;
+ protected $note;
+ protected $result;
+
+ public function setRuleID($rule_id) {
+ $this->ruleID = $rule_id;
+ return $this;
+ }
+
+ public function getRuleID() {
+ return $this->ruleID;
+ }
+
+ public function setConditionID($condition_id) {
+ $this->conditionID = $condition_id;
+ return $this;
+ }
+
+ public function getConditionID() {
+ return $this->conditionID;
+ }
+
+ public function setFieldName($field_name) {
+ $this->fieldName = $field_name;
+ return $this;
+ }
+
+ public function getFieldName() {
+ return $this->fieldName;
+ }
+
+ public function setCondition($condition) {
+ $this->condition = $condition;
+ return $this;
+ }
+
+ public function getCondition() {
+ return $this->condition;
+ }
+
+ public function setTestValue($test_value) {
+ $this->testValue = $test_value;
+ return $this;
+ }
+
+ public function getTestValue() {
+ return $this->testValue;
+ }
+
+ public function setNote($note) {
+ $this->note = $note;
+ return $this;
+ }
+
+ public function getNote() {
+ return $this->note;
+ }
+
+ public function setResult($result) {
+ $this->result = $result;
+ return $this;
+ }
+
+ public function getResult() {
+ return $this->result;
+ }
+}
diff --git a/src/applications/herald/storage/transcript/condition/__init__.php b/src/applications/herald/storage/transcript/condition/__init__.php
new file mode 100644
index 0000000000..16c51962d2
--- /dev/null
+++ b/src/applications/herald/storage/transcript/condition/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldConditionTranscript.php');
diff --git a/src/applications/herald/storage/transcript/object/HeraldObjectTranscript.php b/src/applications/herald/storage/transcript/object/HeraldObjectTranscript.php
new file mode 100644
index 0000000000..4e9fc1e712
--- /dev/null
+++ b/src/applications/herald/storage/transcript/object/HeraldObjectTranscript.php
@@ -0,0 +1,61 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldObjectTranscript {
+
+ protected $fbid;
+ protected $type;
+ protected $name;
+ protected $fields;
+
+ public function setFBID($fbid) {
+ $this->fbid = $fbid;
+ return $this;
+ }
+
+ public function getFBID() {
+ return $this->fbid;
+ }
+
+ public function setType($type) {
+ $this->type = $type;
+ return $this;
+ }
+
+ public function getType() {
+ return $this->type;
+ }
+
+ public function setName($name) {
+ $this->name = $name;
+ return $this;
+ }
+
+ public function getName() {
+ return $this->name;
+ }
+
+ public function setFields(array $fields) {
+ $this->fields = $fields;
+ return $this;
+ }
+
+ public function getFields() {
+ return $this->fields;
+ }
+}
diff --git a/src/applications/herald/storage/transcript/object/__init__.php b/src/applications/herald/storage/transcript/object/__init__.php
new file mode 100644
index 0000000000..e3e9604f63
--- /dev/null
+++ b/src/applications/herald/storage/transcript/object/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldObjectTranscript.php');
diff --git a/src/applications/herald/storage/transcript/rule/HeraldRuleTranscript.php b/src/applications/herald/storage/transcript/rule/HeraldRuleTranscript.php
new file mode 100644
index 0000000000..5728ac7657
--- /dev/null
+++ b/src/applications/herald/storage/transcript/rule/HeraldRuleTranscript.php
@@ -0,0 +1,72 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class HeraldRuleTranscript {
+
+ protected $ruleID;
+ protected $result;
+ protected $reason;
+
+ protected $ruleName;
+ protected $ruleOwner;
+
+ public function setResult($result) {
+ $this->result = $result;
+ return $this;
+ }
+
+ public function getResult() {
+ return $this->result;
+ }
+
+ public function setReason($reason) {
+ $this->reason = $reason;
+ return $this;
+ }
+
+ public function getReason() {
+ return $this->reason;
+ }
+
+ public function setRuleID($rule_id) {
+ $this->ruleID = $rule_id;
+ return $this;
+ }
+
+ public function getRuleID() {
+ return $this->ruleID;
+ }
+
+ public function setRuleName($rule_name) {
+ $this->ruleName = $rule_name;
+ return $this;
+ }
+
+ public function getRuleName() {
+ return $this->ruleName;
+ }
+
+ public function setRuleOwner($rule_owner) {
+ $this->ruleOwner = $rule_owner;
+ return $this;
+ }
+
+ public function getRuleOwner() {
+ return $this->ruleOwner;
+ }
+}
diff --git a/src/applications/herald/storage/transcript/rule/__init__.php b/src/applications/herald/storage/transcript/rule/__init__.php
new file mode 100644
index 0000000000..6d346629fb
--- /dev/null
+++ b/src/applications/herald/storage/transcript/rule/__init__.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+
+phutil_require_source('HeraldRuleTranscript.php');
diff --git a/src/applications/phid/handle/data/__init__.php b/src/applications/phid/handle/data/__init__.php
index b01d560e70..119c32a871 100644
--- a/src/applications/phid/handle/data/__init__.php
+++ b/src/applications/phid/handle/data/__init__.php
@@ -1,17 +1,18 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'applications/files/uri');
phutil_require_module('phabricator', 'applications/phid/constants');
phutil_require_module('phabricator', 'applications/phid/handle');
+phutil_require_module('phabricator', 'infrastructure/env');
phutil_require_module('phutil', 'symbols');
phutil_require_module('phutil', 'utils');
phutil_require_source('PhabricatorObjectHandleData.php');
diff --git a/src/applications/repository/worker/commitmessageparser/svn/__init__.php b/src/applications/repository/worker/commitmessageparser/svn/__init__.php
index df72cc9af5..f556fb375d 100644
--- a/src/applications/repository/worker/commitmessageparser/svn/__init__.php
+++ b/src/applications/repository/worker/commitmessageparser/svn/__init__.php
@@ -1,15 +1,16 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'applications/repository/worker/commitmessageparser/base');
phutil_require_module('phabricator', 'infrastructure/daemon/workers/storage/task');
phutil_require_module('phutil', 'future/exec');
+phutil_require_module('phutil', 'utils');
phutil_require_source('PhabricatorRepositorySvnCommitMessageParserWorker.php');
diff --git a/src/applications/search/controller/search/__init__.php b/src/applications/search/controller/search/__init__.php
index c91e268a6f..83ea025bb2 100644
--- a/src/applications/search/controller/search/__init__.php
+++ b/src/applications/search/controller/search/__init__.php
@@ -1,23 +1,24 @@
<?php
/**
* This file is automatically generated. Lint this module to rebuild it.
* @generated
*/
phutil_require_module('phabricator', 'aphront/response/404');
phutil_require_module('phabricator', 'aphront/response/redirect');
phutil_require_module('phabricator', 'applications/phid/constants');
phutil_require_module('phabricator', 'applications/phid/handle/data');
phutil_require_module('phabricator', 'applications/search/controller/base');
phutil_require_module('phabricator', 'applications/search/execute/mysql');
phutil_require_module('phabricator', 'applications/search/storage/query');
+phutil_require_module('phabricator', 'infrastructure/env');
phutil_require_module('phabricator', 'view/form/base');
phutil_require_module('phabricator', 'view/form/control/submit');
phutil_require_module('phabricator', 'view/layout/panel');
phutil_require_module('phutil', 'utils');
phutil_require_source('PhabricatorSearchController.php');

File Metadata

Mime Type
text/x-diff
Expires
Sun, Jul 27, 2:19 PM (1 w, 5 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
185837
Default Alt Text
(121 KB)

Event Timeline