diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -321,21 +321,12 @@ 'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php', 'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php', 'DifferentialApplyPatchField' => 'applications/differential/customfield/DifferentialApplyPatchField.php', - 'DifferentialApplyPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php', 'DifferentialArcanistProjectField' => 'applications/differential/customfield/DifferentialArcanistProjectField.php', - 'DifferentialArcanistProjectFieldSpecification' => 'applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php', 'DifferentialAsanaRepresentationField' => 'applications/differential/customfield/DifferentialAsanaRepresentationField.php', - 'DifferentialAsanaRepresentationFieldSpecification' => 'applications/differential/field/specification/DifferentialAsanaRepresentationFieldSpecification.php', 'DifferentialAuditorsField' => 'applications/differential/customfield/DifferentialAuditorsField.php', - 'DifferentialAuditorsFieldSpecification' => 'applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php', 'DifferentialAuthorField' => 'applications/differential/customfield/DifferentialAuthorField.php', - 'DifferentialAuthorFieldSpecification' => 'applications/differential/field/specification/DifferentialAuthorFieldSpecification.php', - 'DifferentialAuxiliaryField' => 'applications/differential/storage/DifferentialAuxiliaryField.php', 'DifferentialBlameRevisionField' => 'applications/differential/customfield/DifferentialBlameRevisionField.php', - 'DifferentialBlameRevisionFieldSpecification' => 'applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php', 'DifferentialBranchField' => 'applications/differential/customfield/DifferentialBranchField.php', - 'DifferentialBranchFieldSpecification' => 'applications/differential/field/specification/DifferentialBranchFieldSpecification.php', - 'DifferentialCCsFieldSpecification' => 'applications/differential/field/specification/DifferentialCCsFieldSpecification.php', 'DifferentialCapabilityDefaultView' => 'applications/differential/capability/DifferentialCapabilityDefaultView.php', 'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php', 'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php', @@ -359,9 +350,7 @@ 'DifferentialCommitMessageParser' => 'applications/differential/parser/DifferentialCommitMessageParser.php', 'DifferentialCommitMessageParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php', 'DifferentialCommitsField' => 'applications/differential/customfield/DifferentialCommitsField.php', - 'DifferentialCommitsFieldSpecification' => 'applications/differential/field/specification/DifferentialCommitsFieldSpecification.php', 'DifferentialConflictsField' => 'applications/differential/customfield/DifferentialConflictsField.php', - 'DifferentialConflictsFieldSpecification' => 'applications/differential/field/specification/DifferentialConflictsFieldSpecification.php', 'DifferentialController' => 'applications/differential/controller/DifferentialController.php', 'DifferentialCoreCustomField' => 'applications/differential/customfield/DifferentialCoreCustomField.php', 'DifferentialCustomField' => 'applications/differential/customfield/DifferentialCustomField.php', @@ -373,12 +362,8 @@ 'DifferentialCustomFieldStorage' => 'applications/differential/storage/DifferentialCustomFieldStorage.php', 'DifferentialCustomFieldStringIndex' => 'applications/differential/storage/DifferentialCustomFieldStringIndex.php', 'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php', - 'DifferentialDateCreatedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateCreatedFieldSpecification.php', - 'DifferentialDateModifiedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php', 'DifferentialDependenciesField' => 'applications/differential/customfield/DifferentialDependenciesField.php', - 'DifferentialDependenciesFieldSpecification' => 'applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php', 'DifferentialDependsOnField' => 'applications/differential/customfield/DifferentialDependsOnField.php', - 'DifferentialDependsOnFieldSpecification' => 'applications/differential/field/specification/DifferentialDependsOnFieldSpecification.php', 'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php', 'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php', 'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php', @@ -386,25 +371,16 @@ 'DifferentialDiffTableOfContentsView' => 'applications/differential/view/DifferentialDiffTableOfContentsView.php', 'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php', 'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php', - 'DifferentialDiffViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php', 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php', 'DifferentialDraft' => 'applications/differential/storage/DifferentialDraft.php', 'DifferentialEditPolicyField' => 'applications/differential/customfield/DifferentialEditPolicyField.php', - 'DifferentialEditPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php', 'DifferentialException' => 'applications/differential/exception/DifferentialException.php', 'DifferentialExceptionMail' => 'applications/differential/mail/DifferentialExceptionMail.php', - 'DifferentialExportPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php', - 'DifferentialFieldDataNotAvailableException' => 'applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php', 'DifferentialFieldParseException' => 'applications/differential/field/exception/DifferentialFieldParseException.php', - 'DifferentialFieldSpecification' => 'applications/differential/field/specification/DifferentialFieldSpecification.php', - 'DifferentialFieldSpecificationIncompleteException' => 'applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php', 'DifferentialFieldValidationException' => 'applications/differential/field/exception/DifferentialFieldValidationException.php', - 'DifferentialFreeformFieldSpecification' => 'applications/differential/field/specification/DifferentialFreeformFieldSpecification.php', 'DifferentialGetWorkingCopy' => 'applications/differential/DifferentialGetWorkingCopy.php', 'DifferentialGitSVNIDField' => 'applications/differential/customfield/DifferentialGitSVNIDField.php', - 'DifferentialGitSVNIDFieldSpecification' => 'applications/differential/field/specification/DifferentialGitSVNIDFieldSpecification.php', 'DifferentialHostField' => 'applications/differential/customfield/DifferentialHostField.php', - 'DifferentialHostFieldSpecification' => 'applications/differential/field/specification/DifferentialHostFieldSpecification.php', 'DifferentialHovercardEventListener' => 'applications/differential/event/DifferentialHovercardEventListener.php', 'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php', 'DifferentialHunkParser' => 'applications/differential/parser/DifferentialHunkParser.php', @@ -417,13 +393,11 @@ 'DifferentialInlineCommentQuery' => 'applications/differential/query/DifferentialInlineCommentQuery.php', 'DifferentialInlineCommentView' => 'applications/differential/view/DifferentialInlineCommentView.php', 'DifferentialJIRAIssuesField' => 'applications/differential/customfield/DifferentialJIRAIssuesField.php', - 'DifferentialJIRAIssuesFieldSpecification' => 'applications/differential/field/specification/DifferentialJIRAIssuesFieldSpecification.php', 'DifferentialLandingActionMenuEventListener' => 'applications/differential/landing/DifferentialLandingActionMenuEventListener.php', 'DifferentialLandingStrategy' => 'applications/differential/landing/DifferentialLandingStrategy.php', 'DifferentialLandingToGitHub' => 'applications/differential/landing/DifferentialLandingToGitHub.php', 'DifferentialLandingToHostedGit' => 'applications/differential/landing/DifferentialLandingToHostedGit.php', 'DifferentialLandingToHostedMercurial' => 'applications/differential/landing/DifferentialLandingToHostedMercurial.php', - 'DifferentialLinesFieldSpecification' => 'applications/differential/field/specification/DifferentialLinesFieldSpecification.php', 'DifferentialLintField' => 'applications/differential/customfield/DifferentialLintField.php', 'DifferentialLintFieldSpecification' => 'applications/differential/field/specification/DifferentialLintFieldSpecification.php', 'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php', @@ -431,40 +405,31 @@ 'DifferentialMail' => 'applications/differential/mail/DifferentialMail.php', 'DifferentialMailPhase' => 'applications/differential/constants/DifferentialMailPhase.php', 'DifferentialManiphestTasksField' => 'applications/differential/customfield/DifferentialManiphestTasksField.php', - 'DifferentialManiphestTasksFieldSpecification' => 'applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php', 'DifferentialPHIDTypeDiff' => 'applications/differential/phid/DifferentialPHIDTypeDiff.php', 'DifferentialPHIDTypeRevision' => 'applications/differential/phid/DifferentialPHIDTypeRevision.php', 'DifferentialParseCacheGarbageCollector' => 'applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php', 'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php', 'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php', - 'DifferentialPathFieldSpecification' => 'applications/differential/field/specification/DifferentialPathFieldSpecification.php', 'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php', 'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php', - 'DifferentialProjectReviewersFieldSpecification' => 'applications/differential/field/specification/DifferentialProjectReviewersFieldSpecification.php', 'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php', 'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php', 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', 'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php', 'DifferentialRepositoryField' => 'applications/differential/customfield/DifferentialRepositoryField.php', - 'DifferentialRepositoryFieldSpecification' => 'applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php', 'DifferentialRepositoryLookup' => 'applications/differential/query/DifferentialRepositoryLookup.php', 'DifferentialResultsTableView' => 'applications/differential/view/DifferentialResultsTableView.php', 'DifferentialRevertPlanField' => 'applications/differential/customfield/DifferentialRevertPlanField.php', - 'DifferentialRevertPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php', 'DifferentialReviewedByField' => 'applications/differential/customfield/DifferentialReviewedByField.php', - 'DifferentialReviewedByFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php', 'DifferentialReviewer' => 'applications/differential/storage/DifferentialReviewer.php', 'DifferentialReviewerStatus' => 'applications/differential/constants/DifferentialReviewerStatus.php', 'DifferentialReviewersField' => 'applications/differential/customfield/DifferentialReviewersField.php', - 'DifferentialReviewersFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewersFieldSpecification.php', 'DifferentialReviewersView' => 'applications/differential/view/DifferentialReviewersView.php', 'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php', 'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php', 'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php', 'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php', 'DifferentialRevisionIDField' => 'applications/differential/customfield/DifferentialRevisionIDField.php', - 'DifferentialRevisionIDFieldParserTestCase' => 'applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php', - 'DifferentialRevisionIDFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php', 'DifferentialRevisionLandController' => 'applications/differential/controller/DifferentialRevisionLandController.php', 'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php', 'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php', @@ -472,19 +437,15 @@ 'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php', 'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php', 'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php', - 'DifferentialRevisionStatusFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php', 'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php', 'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php', 'DifferentialSearchIndexer' => 'applications/differential/search/DifferentialSearchIndexer.php', 'DifferentialStoredCustomField' => 'applications/differential/customfield/DifferentialStoredCustomField.php', 'DifferentialSubscribersField' => 'applications/differential/customfield/DifferentialSubscribersField.php', 'DifferentialSummaryField' => 'applications/differential/customfield/DifferentialSummaryField.php', - 'DifferentialSummaryFieldSpecification' => 'applications/differential/field/specification/DifferentialSummaryFieldSpecification.php', 'DifferentialTasksAttacher' => 'applications/differential/DifferentialTasksAttacher.php', 'DifferentialTestPlanField' => 'applications/differential/customfield/DifferentialTestPlanField.php', - 'DifferentialTestPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php', 'DifferentialTitleField' => 'applications/differential/customfield/DifferentialTitleField.php', - 'DifferentialTitleFieldSpecification' => 'applications/differential/field/specification/DifferentialTitleFieldSpecification.php', 'DifferentialTransaction' => 'applications/differential/storage/DifferentialTransaction.php', 'DifferentialTransactionComment' => 'applications/differential/storage/DifferentialTransactionComment.php', 'DifferentialTransactionEditor' => 'applications/differential/editor/DifferentialTransactionEditor.php', @@ -495,7 +456,6 @@ 'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php', 'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php', 'DifferentialViewPolicyField' => 'applications/differential/customfield/DifferentialViewPolicyField.php', - 'DifferentialViewPolicyFieldSpecification' => 'applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php', 'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php', 'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php', 'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php', @@ -2891,20 +2851,12 @@ 'DifferentialAddCommentView' => 'AphrontView', 'DifferentialAffectedPath' => 'DifferentialDAO', 'DifferentialApplyPatchField' => 'DifferentialCustomField', - 'DifferentialApplyPatchFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialArcanistProjectField' => 'DifferentialCustomField', - 'DifferentialArcanistProjectFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialAsanaRepresentationField' => 'DifferentialCustomField', - 'DifferentialAsanaRepresentationFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialAuditorsField' => 'DifferentialStoredCustomField', - 'DifferentialAuditorsFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialAuthorField' => 'DifferentialCustomField', - 'DifferentialAuthorFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialBlameRevisionField' => 'DifferentialStoredCustomField', - 'DifferentialBlameRevisionFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialBranchField' => 'DifferentialCustomField', - 'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialCCsFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialCapabilityDefaultView' => 'PhabricatorPolicyCapability', 'DifferentialChangeset' => 'DifferentialDAO', 'DifferentialChangesetDetailView' => 'AphrontView', @@ -2923,9 +2875,7 @@ 'DifferentialCommentSaveController' => 'DifferentialController', 'DifferentialCommitMessageParserTestCase' => 'PhabricatorTestCase', 'DifferentialCommitsField' => 'DifferentialCustomField', - 'DifferentialCommitsFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialConflictsField' => 'DifferentialCustomField', - 'DifferentialConflictsFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialController' => 'PhabricatorController', 'DifferentialCoreCustomField' => 'DifferentialCustomField', 'DifferentialCustomField' => 'PhabricatorCustomField', @@ -2937,12 +2887,8 @@ 'DifferentialCustomFieldStorage' => 'PhabricatorCustomFieldStorage', 'DifferentialCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'DifferentialDAO' => 'PhabricatorLiskDAO', - 'DifferentialDateCreatedFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialDateModifiedFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialDependenciesField' => 'DifferentialCustomField', - 'DifferentialDependenciesFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialDependsOnField' => 'DifferentialCustomField', - 'DifferentialDependsOnFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialDiff' => array( 0 => 'DifferentialDAO', @@ -2955,23 +2901,15 @@ 'DifferentialDiffTableOfContentsView' => 'AphrontView', 'DifferentialDiffTestCase' => 'ArcanistPhutilTestCase', 'DifferentialDiffViewController' => 'DifferentialController', - 'DifferentialDiffViewPolicyFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher', 'DifferentialDraft' => 'DifferentialDAO', 'DifferentialEditPolicyField' => 'DifferentialCoreCustomField', - 'DifferentialEditPolicyFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialException' => 'Exception', 'DifferentialExceptionMail' => 'DifferentialMail', - 'DifferentialExportPatchFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialFieldDataNotAvailableException' => 'Exception', 'DifferentialFieldParseException' => 'Exception', - 'DifferentialFieldSpecificationIncompleteException' => 'Exception', 'DifferentialFieldValidationException' => 'Exception', - 'DifferentialFreeformFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialGitSVNIDField' => 'DifferentialCustomField', - 'DifferentialGitSVNIDFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialHostField' => 'DifferentialCustomField', - 'DifferentialHostFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialHovercardEventListener' => 'PhabricatorEventListener', 'DifferentialHunk' => 'DifferentialDAO', 'DifferentialHunkParserTestCase' => 'PhabricatorTestCase', @@ -2983,40 +2921,29 @@ 'DifferentialInlineCommentQuery' => 'PhabricatorOffsetPagedQuery', 'DifferentialInlineCommentView' => 'AphrontView', 'DifferentialJIRAIssuesField' => 'DifferentialStoredCustomField', - 'DifferentialJIRAIssuesFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialLandingActionMenuEventListener' => 'PhabricatorEventListener', 'DifferentialLandingToGitHub' => 'DifferentialLandingStrategy', 'DifferentialLandingToHostedGit' => 'DifferentialLandingStrategy', 'DifferentialLandingToHostedMercurial' => 'DifferentialLandingStrategy', - 'DifferentialLinesFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialLintField' => 'DifferentialCustomField', - 'DifferentialLintFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialLocalCommitsView' => 'AphrontView', 'DifferentialMail' => 'PhabricatorMail', 'DifferentialManiphestTasksField' => 'DifferentialCoreCustomField', - 'DifferentialManiphestTasksFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialPHIDTypeDiff' => 'PhabricatorPHIDType', 'DifferentialPHIDTypeRevision' => 'PhabricatorPHIDType', 'DifferentialParseCacheGarbageCollector' => 'PhabricatorGarbageCollector', 'DifferentialParseRenderTestCase' => 'PhabricatorTestCase', 'DifferentialPathField' => 'DifferentialCustomField', - 'DifferentialPathFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialPrimaryPaneView' => 'AphrontView', 'DifferentialProjectReviewersField' => 'DifferentialCustomField', - 'DifferentialProjectReviewersFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialReleephRequestFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler', 'DifferentialRepositoryField' => 'DifferentialCoreCustomField', - 'DifferentialRepositoryFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialRepositoryLookup' => 'Phobject', 'DifferentialResultsTableView' => 'AphrontView', 'DifferentialRevertPlanField' => 'DifferentialStoredCustomField', - 'DifferentialRevertPlanFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialReviewedByField' => 'DifferentialCoreCustomField', - 'DifferentialReviewedByFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialReviewersField' => 'DifferentialCoreCustomField', - 'DifferentialReviewersFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialReviewersView' => 'AphrontView', 'DifferentialRevision' => array( @@ -3032,8 +2959,6 @@ 'DifferentialRevisionDetailView' => 'AphrontView', 'DifferentialRevisionEditController' => 'DifferentialController', 'DifferentialRevisionIDField' => 'DifferentialCustomField', - 'DifferentialRevisionIDFieldParserTestCase' => 'PhabricatorTestCase', - 'DifferentialRevisionIDFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialRevisionLandController' => 'DifferentialController', 'DifferentialRevisionListController' => array( @@ -3044,27 +2969,21 @@ 'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver', 'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine', - 'DifferentialRevisionStatusFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialRevisionUpdateHistoryView' => 'AphrontView', 'DifferentialRevisionViewController' => 'DifferentialController', 'DifferentialSearchIndexer' => 'PhabricatorSearchDocumentIndexer', 'DifferentialStoredCustomField' => 'DifferentialCustomField', 'DifferentialSubscribersField' => 'DifferentialCoreCustomField', 'DifferentialSummaryField' => 'DifferentialCoreCustomField', - 'DifferentialSummaryFieldSpecification' => 'DifferentialFreeformFieldSpecification', 'DifferentialTestPlanField' => 'DifferentialCoreCustomField', - 'DifferentialTestPlanFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialTitleField' => 'DifferentialCoreCustomField', - 'DifferentialTitleFieldSpecification' => 'DifferentialFreeformFieldSpecification', 'DifferentialTransaction' => 'PhabricatorApplicationTransaction', 'DifferentialTransactionComment' => 'PhabricatorApplicationTransactionComment', 'DifferentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor', 'DifferentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'DifferentialTransactionView' => 'PhabricatorApplicationTransactionView', 'DifferentialUnitField' => 'DifferentialCustomField', - 'DifferentialUnitFieldSpecification' => 'DifferentialFieldSpecification', 'DifferentialViewPolicyField' => 'DifferentialCoreCustomField', - 'DifferentialViewPolicyFieldSpecification' => 'DifferentialFieldSpecification', 'DiffusionBranchTableController' => 'DiffusionController', 'DiffusionBranchTableView' => 'DiffusionView', 'DiffusionBrowseController' => 'DiffusionController', diff --git a/src/applications/differential/customfield/DifferentialRevisionIDField.php b/src/applications/differential/customfield/DifferentialRevisionIDField.php --- a/src/applications/differential/customfield/DifferentialRevisionIDField.php +++ b/src/applications/differential/customfield/DifferentialRevisionIDField.php @@ -34,12 +34,35 @@ } public function parseValueFromCommitMessage($value) { - return DifferentialRevisionIDFieldSpecification::parseRevisionIDFromURI( - $value); + return self::parseRevisionIDFromURI($value); } public function renderCommitMessageValue(array $handles) { return PhabricatorEnv::getProductionURI('/D'.$this->getObject()->getID()); } + private static function parseRevisionIDFromURI($uri) { + $path = id(new PhutilURI($uri))->getPath(); + + $matches = null; + if (preg_match('#^/D(\d+)$#', $path, $matches)) { + $id = (int)$matches[1]; + // Make sure the URI is the same as our URI. Basically, we want to ignore + // commits from other Phabricator installs. + if ($uri == PhabricatorEnv::getProductionURI('/D'.$id)) { + return $id; + } + + $allowed_uris = PhabricatorEnv::getAllowedURIs('/D'.$id); + + foreach ($allowed_uris as $allowed_uri) { + if ($uri == $allowed_uri) { + return $id; + } + } + } + + return null; + } + } diff --git a/src/applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php b/src/applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php deleted file mode 100644 --- a/src/applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php +++ /dev/null @@ -1,14 +0,0 @@ -getStorageKey(); - $class = get_class($spec); - - parent::__construct( - "Differential field specification for '{$key}' (of class '{$class}') is ". - "attempting to access data which is not available in this context."); - } - -} diff --git a/src/applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php b/src/applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php deleted file mode 100644 --- a/src/applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php +++ /dev/null @@ -1,16 +0,0 @@ -getStorageKey(); - $class = get_class($spec); - - parent::__construct( - "Differential field specification for '{$key}' (of class '{$class}') is ". - "incompletely implemented: it claims it should appear in a context but ". - "does not implement all the required methods for that context."); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php b/src/applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php +++ /dev/null @@ -1,19 +0,0 @@ -getRevision(); - return phutil_tag('tt', array(), 'arc patch D'.$revision->getID()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php b/src/applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php +++ /dev/null @@ -1,38 +0,0 @@ -getArcanistProjectPHID(); - if (!$arcanist_phid) { - return array(); - } - - return array($arcanist_phid); - } - - public function renderLabelForRevisionView() { - return 'Arcanist Project:'; - } - - public function renderValueForRevisionView() { - $arcanist_phid = $this->getArcanistProjectPHID(); - if (!$arcanist_phid) { - return null; - } - - $handle = $this->getHandle($arcanist_phid); - return $handle->getName(); - } - - private function getArcanistProjectPHID() { - $diff = $this->getDiff(); - return $diff->getArcanistProjectPHID(); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialAsanaRepresentationFieldSpecification.php b/src/applications/differential/field/specification/DifferentialAsanaRepresentationFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialAsanaRepresentationFieldSpecification.php +++ /dev/null @@ -1,76 +0,0 @@ -getUser(); - $src_phid = $this->getRevision()->getPHID(); - $edge_type = PhabricatorEdgeConfig::TYPE_PHOB_HAS_ASANATASK; - - $query = id(new PhabricatorEdgeQuery()) - ->withSourcePHIDs(array($src_phid)) - ->withEdgeTypes(array($edge_type)) - ->needEdgeData(true); - - $edges = $query->execute(); - if (!$edges) { - return null; - } - - $edge = head($edges[$src_phid][$edge_type]); - - if (!empty($edge['data']['gone'])) { - return phutil_tag( - 'em', - array(), - pht('Asana Task Deleted')); - } - - $ref = id(new DoorkeeperImportEngine()) - ->setViewer($viewer) - ->withPHIDs(array($edge['dst'])) - ->needLocalOnly(true) - ->executeOne(); - - if (!$ref) { - return null; - } - - $tag_id = celerity_generate_unique_node_id(); - $xobj = $ref->getExternalObject(); - $href = $xobj->getObjectURI(); - - Javelin::initBehavior( - 'doorkeeper-tag', - array( - 'tags' => array( - array( - 'id' => $tag_id, - 'ref' => array( - $ref->getApplicationType(), - $ref->getApplicationDomain(), - $ref->getObjectType(), - $ref->getObjectID(), - ), - ), - ), - )); - - return id(new PHUITagView()) - ->setID($tag_id) - ->setName($href) - ->setHref($href) - ->setType(PHUITagView::TYPE_OBJECT) - ->setExternal(true); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php b/src/applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php +++ /dev/null @@ -1,67 +0,0 @@ -auditors = nonempty($value, array()); - return $this; - } - - public function renderLabelForCommitMessage() { - return 'Auditors'; - } - - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->auditors; - } - - public function renderValueForCommitMessage($is_edit) { - if (!$this->auditors) { - return null; - } - - $names = array(); - foreach ($this->auditors as $phid) { - $names[] = $this->getHandle($phid)->getName(); - } - - return implode(', ', $names); - } - - public function parseValueFromCommitMessage($value) { - return $this->parseCommitMessageUserList($value); - } - - public function getStorageKey() { - return 'phabricator:auditors'; - } - - public function getValueForStorage() { - return json_encode($this->auditors); - } - - public function setValueFromStorage($value) { - $auditors = json_decode($value, true); - if (!is_array($auditors)) { - $auditors = array(); - } - $this->auditors = $auditors; - return $this; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialAuthorFieldSpecification.php b/src/applications/differential/field/specification/DifferentialAuthorFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialAuthorFieldSpecification.php +++ /dev/null @@ -1,44 +0,0 @@ -getAuthorPHID()); - } - - public function renderLabelForRevisionView() { - return 'Author:'; - } - - public function renderValueForRevisionView() { - return $this->renderUserList(array($this->getAuthorPHID())); - } - - private function getAuthorPHID() { - $revision = $this->getRevision(); - return $revision->getAuthorPHID(); - } - - public function shouldAppearOnRevisionList() { - return true; - } - - public function renderHeaderForRevisionList() { - return 'Author'; - } - - public function renderValueForRevisionList(DifferentialRevision $revision) { - return $this->getHandle($revision->getAuthorPHID())->renderLink(); - } - - public function getRequiredHandlePHIDsForRevisionList( - DifferentialRevision $revision) { - return array($revision->getAuthorPHID()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php b/src/applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php +++ /dev/null @@ -1,92 +0,0 @@ -value; - } - - public function setValueFromStorage($value) { - $this->value = $value; - return $this; - } - - public function shouldAppearOnEdit() { - return true; - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->value = $request->getStr($this->getStorageKey()); - return $this; - } - - public function renderEditControl() { - return id(new AphrontFormTextControl()) - ->setLabel(pht('Blame Revision')) - ->setCaption( - pht('Revision which broke the stuff which this change fixes.')) - ->setName($this->getStorageKey()) - ->setValue($this->value); - } - - public function shouldAppearOnRevisionView() { - return true; - } - - public function renderLabelForRevisionView() { - return pht('Blame Revision:'); - } - - public function renderValueForRevisionView() { - if (!$this->value) { - return null; - } - $engine = PhabricatorMarkupEngine::newDifferentialMarkupEngine(); - $engine->setConfig('viewer', $this->getUser()); - return $engine->markupText($this->value); - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'blameRevision'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->value = $value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'Blame Revision'; - } - - public function renderValueForCommitMessage($is_edit) { - return $this->value; - } - - public function getSupportedCommitMessageLabels() { - return array( - 'Blame Revision', - 'Blame Rev', - ); - } - - public function parseValueFromCommitMessage($value) { - return $value; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialBranchFieldSpecification.php b/src/applications/differential/field/specification/DifferentialBranchFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialBranchFieldSpecification.php +++ /dev/null @@ -1,34 +0,0 @@ -getBranch(); - $bookmark = $diff->getBookmark(); - $has_branch = ($branch != ''); - $has_bookmark = ($bookmark != ''); - if ($has_branch && $has_bookmark) { - return "{$bookmark} bookmark on {$branch} branch"; - } else if ($has_bookmark) { - return "{$bookmark} bookmark"; - } else if ($has_branch) { - return $branch; - } - return null; - } - - public function renderValueForRevisionView() { - $diff = $this->getManualDiff(); - return $this->getBranchOrBookmarkDescription($diff); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialCCsFieldSpecification.php b/src/applications/differential/field/specification/DifferentialCCsFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialCCsFieldSpecification.php +++ /dev/null @@ -1,106 +0,0 @@ -getCCPHIDs(); - } - - public function renderLabelForRevisionView() { - return 'CCs:'; - } - - public function renderValueForRevisionView() { - return $this->renderUserList($this->getCCPHIDs()); - } - - private function getCCPHIDs() { - $revision = $this->getRevision(); - return $revision->getCCPHIDs(); - } - - public function shouldAppearOnEdit() { - return true; - } - - protected function didSetRevision() { - $this->ccs = $this->getCCPHIDs(); - } - - public function getRequiredHandlePHIDsForRevisionEdit() { - return $this->ccs; - } - - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->ccs; - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->ccs = $request->getArr('cc'); - return $this; - } - - public function renderEditControl() { - $cc_map = array(); - foreach ($this->ccs as $phid) { - $cc_map[] = $this->getHandle($phid); - } - return id(new AphrontFormTokenizerControl()) - ->setLabel('CC') - ->setName('cc') - ->setUser($this->getUser()) - ->setDatasource('/typeahead/common/mailable/') - ->setValue($cc_map); - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'ccPHIDs'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->ccs = array_unique(nonempty($value, array())); - return $this; - } - - public function renderLabelForCommitMessage() { - return 'CC'; - } - - public function renderValueForCommitMessage($is_edit) { - if (!$this->ccs) { - return null; - } - - $names = array(); - foreach ($this->ccs as $phid) { - $handle = $this->getHandle($phid); - if ($handle->isComplete()) { - $names[] = $handle->getObjectName(); - } - } - return implode(', ', $names); - } - - public function getSupportedCommitMessageLabels() { - return array( - 'CC', - 'CCs', - ); - } - - public function parseValueFromCommitMessage($value) { - return $this->parseCommitMessageMailableList($value); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialCommitsFieldSpecification.php b/src/applications/differential/field/specification/DifferentialCommitsFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialCommitsFieldSpecification.php +++ /dev/null @@ -1,37 +0,0 @@ -getCommitPHIDs(); - } - - public function renderLabelForRevisionView() { - return 'Commits:'; - } - - public function renderValueForRevisionView() { - $commit_phids = $this->getCommitPHIDs(); - if (!$commit_phids) { - return null; - } - - $links = array(); - foreach ($commit_phids as $commit_phid) { - $links[] = $this->getHandle($commit_phid)->renderLink(); - } - - return phutil_implode_html(phutil_tag('br'), $links); - } - - private function getCommitPHIDs() { - $revision = $this->getRevision(); - return $revision->getCommitPHIDs(); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialConflictsFieldSpecification.php b/src/applications/differential/field/specification/DifferentialConflictsFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialConflictsFieldSpecification.php +++ /dev/null @@ -1,34 +0,0 @@ -getDateCreated(), $this->getUser()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php b/src/applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php +++ /dev/null @@ -1,18 +0,0 @@ -getDateModified(), $this->getUser()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php b/src/applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php +++ /dev/null @@ -1,38 +0,0 @@ -getDependentRevisionPHIDs(); - } - - public function renderLabelForRevisionView() { - return 'Dependents:'; - } - - public function renderValueForRevisionView() { - $revision_phids = $this->getDependentRevisionPHIDs(); - if (!$revision_phids) { - return null; - } - - $links = array(); - foreach ($revision_phids as $revision_phids) { - $links[] = $this->getHandle($revision_phids)->renderLink(); - } - - return phutil_implode_html(phutil_tag('br'), $links); - } - - private function getDependentRevisionPHIDs() { - return PhabricatorEdgeQuery::loadDestinationPHIDs( - $this->getRevision()->getPHID(), - PhabricatorEdgeConfig::TYPE_DREV_DEPENDED_ON_BY_DREV); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialDependsOnFieldSpecification.php b/src/applications/differential/field/specification/DifferentialDependsOnFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialDependsOnFieldSpecification.php +++ /dev/null @@ -1,38 +0,0 @@ -getDependentRevisionPHIDs(); - } - - public function renderLabelForRevisionView() { - return 'Depends On:'; - } - - public function renderValueForRevisionView() { - $revision_phids = $this->getDependentRevisionPHIDs(); - if (!$revision_phids) { - return null; - } - - $links = array(); - foreach ($revision_phids as $revision_phid) { - $links[] = $this->getHandle($revision_phid)->renderLink(); - } - - return phutil_implode_html(phutil_tag('br'), $links); - } - - private function getDependentRevisionPHIDs() { - return PhabricatorEdgeQuery::loadDestinationPHIDs( - $this->getRevision()->getPHID(), - PhabricatorEdgeConfig::TYPE_DREV_DEPENDS_ON_DREV); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php b/src/applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialDiffViewPolicyFieldSpecification.php +++ /dev/null @@ -1,25 +0,0 @@ -getUser(); - $diff = $this->getDiff(); - - $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( - $user, - $diff); - - return idx($descriptions, PhabricatorPolicyCapability::CAN_VIEW); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php b/src/applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialEditPolicyFieldSpecification.php +++ /dev/null @@ -1,38 +0,0 @@ -value = $this->getRevision()->getEditPolicy(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->value = $request->getStr('editPolicy'); - return $this; - } - - public function renderEditControl() { - $viewer = $this->getUser(); - $revision = $this->getRevision(); - - $policies = id(new PhabricatorPolicyQuery()) - ->setViewer($viewer) - ->setObject($revision) - ->execute(); - - return id(new AphrontFormPolicyControl()) - ->setUser($viewer) - ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) - ->setPolicyObject($revision) - ->setPolicies($policies) - ->setName('editPolicy'); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php b/src/applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php +++ /dev/null @@ -1,22 +0,0 @@ -getRevision(); - return phutil_tag( - 'tt', - array(), - 'arc export --revision '.$revision->getID()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialFieldSpecification.php b/src/applications/differential/field/specification/DifferentialFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialFieldSpecification.php +++ /dev/null @@ -1,903 +0,0 @@ -value = $request->getStr('my-custom-field'); - * - * If you have some particularly complicated field, you may need to read - * more data; this is why you have access to the entire request. - * - * You must implement this if you implement @{method:shouldAppearOnEdit}. - * - * You should not perform field validation here; instead, you should implement - * @{method:validateField}. - * - * @param AphrontRequest HTTP request representing a user submitting a form - * with this field in it. - * @return this - * @task edit - */ - public function setValueFromRequest(AphrontRequest $request) { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Build a renderable object (generally, some @{class:AphrontFormControl}) - * which can be appended to a @{class:AphrontFormView} and represents the - * interface the user sees on the "Edit Revision" screen when interacting - * with this field. - * - * For example: - * - * return id(new AphrontFormTextControl()) - * ->setLabel('Custom Field') - * ->setName('my-custom-key') - * ->setValue($this->value); - * - * You must implement this if you implement @{method:shouldAppearOnEdit}. - * - * @return AphrontView|string Something renderable. - * @task edit - */ - public function renderEditControl() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Optionally, build a preview panel for the field which will appear on the - * edit interface. This is used for the "Summary" field, but custom fields - * generally need not implement it. - * - * @return AphrontView|string Something renderable. - * @task edit - */ - public function renderEditPreview() { - return null; - } - - - /** - * This method will be called after @{method:setValueFromRequest} but before - * the field is saved. It gives you an opportunity to inspect the field value - * and throw a @{class:DifferentialFieldValidationException} if there is a - * problem with the value the user has provided (for example, the value the - * user entered is not correctly formatted). This method is also called after - * @{method:setValueFromParsedCommitMessage} before the revision is saved. - * - * By default, fields are not validated. - * - * @return void - * @task edit - */ - public function validateField() { - return; - } - - /** - * Determine if user mentions should be extracted from the value and added to - * CC when creating revision. Mentions are then extracted from the string - * returned by @{method:renderValueForCommitMessage}. - * - * By default, mentions are not extracted. - * - * @return bool - * @task edit - */ - public function shouldExtractMentions() { - return false; - } - - -/* -( Extending the Revision View Interface )------------------------------ */ - - - /** - * Determine if this field should appear on the revision detail view - * interface. One use of this interface is to add purely informational - * fields to the revision view, without any sort of backing storage. - * - * If you return true from this method, you must implement the methods - * @{method:renderLabelForRevisionView} and - * @{method:renderValueForRevisionView}. - * - * @return bool True if this field should appear when viewing a revision. - * @task view - */ - public function shouldAppearOnRevisionView() { - return false; - } - - - /** - * Return a string field label which will appear in the revision detail - * table. - * - * You must implement this method if you return true from - * @{method:shouldAppearOnRevisionView}. - * - * @return string Label for field in revision detail view. - * @task view - */ - public function renderLabelForRevisionView() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Return a markup block representing the field for the revision detail - * view. Note that you can return null to suppress display (for instance, - * if the field shows related objects of some type and the revision doesn't - * have any related objects). - * - * You must implement this method if you return true from - * @{method:shouldAppearOnRevisionView}. - * - * @return string|null Display markup for field value, or null to suppress - * field rendering. - * @task view - */ - public function renderValueForRevisionView() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Load users, their current statuses and return a markup with links to the - * user profiles and information about their current status. - * - * @return string Display markup. - * @task view - */ - public function renderUserList(array $user_phids) { - if (!$user_phids) { - return phutil_tag('em', array(), pht('None')); - } - - return implode_selected_handle_links(', ', - $this->getLoadedHandles(), $user_phids); - } - - - /** - * Return a markup block representing a warning to display with the comment - * box when preparing to accept a diff. A return value of null indicates no - * warning box should be displayed for this field. - * - * @return string|null Display markup for warning box, or null for no warning - */ - public function renderWarningBoxForRevisionAccept() { - return null; - } - - -/* -( Extending the Revision List Interface )------------------------------ */ - - - /** - * Determine if this field should appear in the table on the revision list - * interface. - * - * @return bool True if this field should appear in the table. - * - * @task list - */ - public function shouldAppearOnRevisionList() { - return false; - } - - - /** - * Return a column header for revision list tables. - * - * @return string Column header. - * - * @task list - */ - public function renderHeaderForRevisionList() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Optionally, return a column class for revision list tables. - * - * @return string CSS class for table cells. - * - * @task list - */ - public function getColumnClassForRevisionList() { - return null; - } - - - /** - * Return a table cell value for revision list tables. - * - * @param DifferentialRevision The revision to render a value for. - * @return string Table cell value. - * - * @task list - */ - public function renderValueForRevisionList(DifferentialRevision $revision) { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - -/* -( Extending the Diff View Interface )------------------------------ */ - - - /** - * Determine if this field should appear on the diff detail view - * interface. One use of this interface is to add purely informational - * fields to the diff view, without any sort of backing storage. - * - * NOTE: These diffs are not necessarily attached yet to a revision. - * As such, a field on the diff view can not rely on the existence of a - * revision or use storage attached to the revision. - * - * If you return true from this method, you must implement the methods - * @{method:renderLabelForDiffView} and - * @{method:renderValueForDiffView}. - * - * @return bool True if this field should appear when viewing a diff. - * @task view - */ - public function shouldAppearOnDiffView() { - return false; - } - - - /** - * Return a string field label which will appear in the diff detail - * table. - * - * You must implement this method if you return true from - * @{method:shouldAppearOnDiffView}. - * - * @return string Label for field in revision detail view. - * @task view - */ - public function renderLabelForDiffView() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - /** - * Return a markup block representing the field for the diff detail - * view. Note that you can return null to suppress display (for instance, - * if the field shows related objects of some type and the revision doesn't - * have any related objects). - * - * You must implement this method if you return true from - * @{method:shouldAppearOnDiffView}. - * - * @return string|null Display markup for field value, or null to suppress - * field rendering. - * @task view - */ - public function renderValueForDiffView() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - -/* -( Extending the Search Interface )------------------------------------ */ - - /** - * @task search - */ - public function shouldAddToSearchIndex() { - return false; - } - - /** - * @task search - */ - public function getValueForSearchIndex() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - /** - * NOTE: Keys *must be* 4 characters for - * @{class:PhabricatorSearchEngineMySQL}. - * - * @task search - */ - public function getKeyForSearchIndex() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - -/* -( Extending Commit Messages )------------------------------------------ */ - - - /** - * Determine if this field should appear in commit messages. You should return - * true if this field participates in any part of the commit message workflow, - * even if it is not rendered by default. - * - * If you implement this method, you must implement - * @{method:getCommitMessageKey} and - * @{method:setValueFromParsedCommitMessage}. - * - * @return bool True if this field appears in commit messages in any capacity. - * @task commit - */ - public function shouldAppearOnCommitMessage() { - return false; - } - - /** - * Key which identifies this field in parsed commit messages. Commit messages - * exist in two forms: raw textual commit messages and parsed dictionaries of - * fields. This method must return a unique string which identifies this field - * in dictionaries. Principally, this dictionary is shipped to and from arc - * over Conduit. Keys should be appropriate property names, like "testPlan" - * (not "Test Plan") and must be globally unique. - * - * You must implement this method if you return true from - * @{method:shouldAppearOnCommitMessage}. - * - * @return string Key which identifies the field in dictionaries. - * @task commit - */ - public function getCommitMessageKey() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - /** - * Set this field's value from a value in a parsed commit message dictionary. - * Afterward, this field will go through the normal write workflows and the - * change will be permanently stored via either the storage mechanisms (if - * your field implements them), revision write hooks (if your field implements - * them) or discarded (if your field implements neither, e.g. is just a - * display field). - * - * The value you receive will either be null or something you originally - * returned from @{method:parseValueFromCommitMessage}. - * - * You must implement this method if you return true from - * @{method:shouldAppearOnCommitMessage}. - * - * @param mixed Field value from a parsed commit message dictionary. - * @return this - * @task commit - */ - public function setValueFromParsedCommitMessage($value) { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - /** - * In revision control systems which read revision information from the - * working copy, the user may edit the commit message outside of invoking - * "arc diff --edit". When they do this, only some fields (those fields which - * can not be edited by other users) are safe to overwrite. For instance, it - * is fine to overwrite "Summary" because no one else can edit it, but not - * to overwrite "Reviewers" because reviewers may have been added or removed - * via the web interface. - * - * If a field is safe to overwrite when edited in a working copy commit - * message, return true. If the authoritative value should always be used, - * return false. By default, fields can not be overwritten. - * - * arc will only attempt to overwrite field values if run with "--verbatim". - * - * @return bool True to indicate the field is save to overwrite. - * @task commit - */ - public function shouldOverwriteWhenCommitMessageIsEdited() { - return false; - } - - /** - * Return true if this field should be suggested to the user during - * "arc diff --edit". Basicially, return true if the field is something the - * user might want to fill out (like "Summary"), and false if it's a - * system/display/readonly field (like "Differential Revision"). If this - * method returns true, the field will be rendered even if it has no value - * during edit and update operations. - * - * @return bool True to indicate the field should appear in the edit template. - * @task commit - */ - public function shouldAppearOnCommitMessageTemplate() { - return true; - } - - /** - * Render a human-readable label for this field, like "Summary" or - * "Test Plan". This is distinct from the commit message key, but generally - * they should be similar. - * - * @return string Human-readable field label for commit messages. - * @task commit - */ - public function renderLabelForCommitMessage() { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - /** - * Render a human-readable value for this field when it appears in commit - * messages (for instance, lists of users should be rendered as user names). - * - * The ##$is_edit## parameter allows you to distinguish between commit - * messages being rendered for editing and those being rendered for amending - * or commit. Some fields may decline to render a value in one mode (for - * example, "Reviewed By" appears only when doing commit/amend, not while - * editing). - * - * @param bool True if the message is being edited. - * @return string Human-readable field value. - * @task commit - */ - public function renderValueForCommitMessage($is_edit) { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - /** - * Return one or more labels which this field parses in commit messages. For - * example, you might parse all of "Task", "Tasks" and "Task Numbers" or - * similar. This is just to make it easier to get commit messages to parse - * when users are typing in the fields manually as opposed to using a - * template, by accepting alternate spellings / pluralizations / etc. By - * default, only the label returned from @{method:renderLabelForCommitMessage} - * is parsed. - * - * @return list List of supported labels that this field can parse from commit - * messages. - * @task commit - */ - public function getSupportedCommitMessageLabels() { - return array($this->renderLabelForCommitMessage()); - } - - /** - * Parse a raw text block from a commit message into a canonical - * representation of the field value. For example, the "CC" field accepts a - * comma-delimited list of usernames and emails and parses them into valid - * PHIDs, emitting a PHID list. - * - * If you encounter errors (like a nonexistent username) while parsing, - * you should throw a @{class:DifferentialFieldParseException}. - * - * Generally, this method should accept whatever you return from - * @{method:renderValueForCommitMessage} and parse it back into a sensible - * representation. - * - * You must implement this method if you return true from - * @{method:shouldAppearOnCommitMessage}. - * - * @param string - * @return mixed The canonical representation of the field value. For example, - * you should lookup usernames and object references. - * @task commit - */ - public function parseValueFromCommitMessage($value) { - throw new DifferentialFieldSpecificationIncompleteException($this); - } - - - -/* -( Loading Additional Data )-------------------------------------------- */ - - - /** - * Specify which @{class:PhabricatorObjectHandle}s need to be loaded for your - * field to render correctly. - * - * This is a convenience method which makes the handles available on all - * interfaces where the field appears. If your field needs handles on only - * some interfaces (or needs different handles on different interfaces) you - * can overload the more specific methods to customize which interfaces you - * retrieve handles for. Requesting only the handles you need will improve - * the performance of your field. - * - * You can later retrieve these handles by calling @{method:getHandle}. - * - * @return list List of PHIDs to load handles for. - * @task load - */ - protected function getRequiredHandlePHIDs() { - return array(); - } - - - /** - * Specify which @{class:PhabricatorObjectHandle}s need to be loaded for your - * field to render correctly on the view interface. - * - * This is a more specific version of @{method:getRequiredHandlePHIDs} which - * can be overridden to improve field performance by loading only data you - * need. - * - * @return list List of PHIDs to load handles for. - * @task load - */ - public function getRequiredHandlePHIDsForRevisionView() { - return $this->getRequiredHandlePHIDs(); - } - - - /** - * Specify which @{class:PhabricatorObjectHandle}s need to be loaded for your - * field to render correctly on the list interface. - * - * This is a more specific version of @{method:getRequiredHandlePHIDs} which - * can be overridden to improve field performance by loading only data you - * need. - * - * @param DifferentialRevision The revision to pull PHIDs for. - * @return list List of PHIDs to load handles for. - * @task load - */ - public function getRequiredHandlePHIDsForRevisionList( - DifferentialRevision $revision) { - return array(); - } - - - /** - * Specify which @{class:PhabricatorObjectHandle}s need to be loaded for your - * field to render correctly on the edit interface. - * - * This is a more specific version of @{method:getRequiredHandlePHIDs} which - * can be overridden to improve field performance by loading only data you - * need. - * - * @return list List of PHIDs to load handles for. - * @task load - */ - public function getRequiredHandlePHIDsForRevisionEdit() { - return $this->getRequiredHandlePHIDs(); - } - - /** - * Specify which @{class:PhabricatorObjectHandle}s need to be loaded for your - * field to render correctly on the commit message interface. - * - * This is a more specific version of @{method:getRequiredHandlePHIDs} which - * can be overridden to improve field performance by loading only data you - * need. - * - * @return list List of PHIDs to load handles for. - * @task load - */ - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->getRequiredHandlePHIDs(); - } - - /** - * Parse a list of users into a canonical PHID list. - * - * @param string Raw list of comma-separated user names. - * @return list List of corresponding PHIDs. - * @task load - */ - protected function parseCommitMessageUserList($value) { - return $this->parseCommitMessageObjectList($value, $mailables = false); - } - - protected function parseCommitMessageUserOrProjectList($value) { - return $this->parseCommitMessageObjectList( - $value, - $mailables = false, - $allow_partial = false); - } - - /** - * Parse a list of mailable objects into a canonical PHID list. - * - * @param string Raw list of comma-separated mailable names. - * @return list List of corresponding PHIDs. - * @task load - */ - protected function parseCommitMessageMailableList($value) { - return $this->parseCommitMessageObjectList($value, $mailables = true); - } - - - /** - * Parse and lookup a list of object names, converting them to PHIDs. - * - * @param string Raw list of comma-separated object names. - * @param bool True to include mailing lists. - * @param bool True to make a best effort. By default, an exception is - * thrown if any item is invalid. - * @return list List of corresponding PHIDs. - * @task load - */ - public static function parseCommitMessageObjectList( - $value, - $include_mailables, - $allow_partial = false) { - - $types = array( - PhabricatorPeoplePHIDTypeUser::TYPECONST, - PhabricatorProjectPHIDTypeProject::TYPECONST, - ); - - if ($include_mailables) { - $types[] = PhabricatorMailingListPHIDTypeList::TYPECONST; - } - - return id(new PhabricatorObjectListQuery()) - ->setViewer(PhabricatorUser::getOmnipotentUser()) - ->setAllowPartialResults($allow_partial) - ->setAllowedTypes($types) - ->setObjectList($value) - ->execute(); - } - - -/* -( Contextual Data )---------------------------------------------------- */ - - - /** - * @task context - */ - final public function setRevision(DifferentialRevision $revision) { - $this->revision = $revision; - $this->didSetRevision(); - return $this; - } - - /** - * @task context - */ - protected function didSetRevision() { - return; - } - - - /** - * @task context - */ - final public function setDiff(DifferentialDiff $diff) { - $this->diff = $diff; - return $this; - } - - /** - * @task context - */ - final public function setManualDiff(DifferentialDiff $diff) { - $this->manualDiff = $diff; - return $this; - } - - /** - * @task context - */ - final public function setHandles(array $handles) { - assert_instances_of($handles, 'PhabricatorObjectHandle'); - $this->handles = $handles; - return $this; - } - - /** - * @task context - */ - final public function setDiffProperties(array $diff_properties) { - $this->diffProperties = $diff_properties; - return $this; - } - - /** - * @task context - */ - final public function setUser(PhabricatorUser $user) { - $this->user = $user; - return $this; - } - - /** - * @task context - */ - final protected function getRevision() { - if (empty($this->revision)) { - throw new DifferentialFieldDataNotAvailableException($this); - } - return $this->revision; - } - - - /** - * Determine if revision context is currently available. - * - * @task context - */ - final protected function hasRevision() { - return (bool)$this->revision; - } - - - /** - * @task context - */ - final protected function getDiff() { - if (empty($this->diff)) { - throw new DifferentialFieldDataNotAvailableException($this); - } - return $this->diff; - } - - /** - * @task context - */ - final protected function getManualDiff() { - if (!$this->manualDiff) { - return $this->getDiff(); - } - return $this->manualDiff; - } - - /** - * @task context - */ - final protected function getUser() { - if (empty($this->user)) { - throw new DifferentialFieldDataNotAvailableException($this); - } - return $this->user; - } - - /** - * Get the handle for an object PHID. You must overload - * @{method:getRequiredHandlePHIDs} (or a more specific version thereof) - * and include the PHID you want in the list for it to be available here. - * - * @return PhabricatorObjectHandle Handle to the object. - * @task context - */ - final protected function getHandle($phid) { - if ($this->handles === null) { - throw new DifferentialFieldDataNotAvailableException($this); - } - if (empty($this->handles[$phid])) { - $class = get_class($this); - throw new Exception( - "A differential field (of class '{$class}') is attempting to retrieve ". - "a handle ('{$phid}') which it did not request. Return all handle ". - "PHIDs you need from getRequiredHandlePHIDs()."); - } - return $this->handles[$phid]; - } - - final protected function getLoadedHandles() { - if ($this->handles === null) { - throw new DifferentialFieldDataNotAvailableException($this); - } - - return $this->handles; - } - - /** - * Get the list of properties for a diff set by @{method:setManualDiff}. - * - * @return array Array of all Diff properties. - * @task context - */ - final public function getDiffProperties() { - if ($this->diffProperties === null) { - // This will be set to some (possibly empty) array if we've loaded - // properties, so null means diff properties aren't available in this - // context. - throw new DifferentialFieldDataNotAvailableException($this); - } - return $this->diffProperties; - } - - /** - * Get a property of a diff set by @{method:setManualDiff}. - * - * @param string Diff property key. - * @return mixed|null Diff property, or null if the property does not have - * a value. - * @task context - */ - final public function getDiffProperty($key) { - return idx($this->getDiffProperties(), $key); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialFreeformFieldSpecification.php b/src/applications/differential/field/specification/DifferentialFreeformFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialFreeformFieldSpecification.php +++ /dev/null @@ -1,6 +0,0 @@ -gitSVNID = $value; - return $this; - } - - public function renderLabelForCommitMessage() { - return 'git-svn-id'; - } - - public function renderValueForCommitMessage($is_edit) { - return null; - } - - public function parseValueFromCommitMessage($value) { - return $value; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialHostFieldSpecification.php b/src/applications/differential/field/specification/DifferentialHostFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialHostFieldSpecification.php +++ /dev/null @@ -1,6 +0,0 @@ -value); - } - - public function setValueFromStorage($value) { - if (!strlen($value)) { - $this->value = array(); - } else { - $this->value = json_decode($value, true); - } - return $this; - } - - public function shouldAppearOnEdit() { - return true; - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->value = $request->getStrList($this->getStorageKey()); - return $this; - } - - public function renderEditControl() { - return id(new AphrontFormTextControl()) - ->setLabel(pht('JIRA Issues')) - ->setCaption( - pht('Example: %s', phutil_tag('tt', array(), 'JIS-3, JIS-9'))) - ->setName($this->getStorageKey()) - ->setValue(implode(', ', nonempty($this->value, array()))) - ->setError($this->error); - } - - public function shouldAppearOnRevisionView() { - return true; - } - - public function renderLabelForRevisionView() { - return pht('JIRA Issues:'); - } - - public function renderValueForRevisionView() { - $xobjs = $this->loadDoorkeeperExternalObjects(); - if (!$xobjs) { - return null; - } - - $links = array(); - foreach ($xobjs as $xobj) { - $links[] = id(new DoorkeeperTagView()) - ->setExternalObject($xobj); - } - - return phutil_implode_html(phutil_tag('br'), $links); - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'jira.issues'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->value = $value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'JIRA Issues'; - } - - public function renderValueForCommitMessage($is_edit) { - return implode(', ', $this->value); - } - - public function getSupportedCommitMessageLabels() { - return array( - 'JIRA', - 'JIRA Issues', - 'JIRA Issue', - ); - } - - public function parseValueFromCommitMessage($value) { - return preg_split('/[\s,]+/', $value, $limit = -1, PREG_SPLIT_NO_EMPTY); - } - - public function validateField() { - if ($this->value) { - $refs = id(new DoorkeeperImportEngine()) - ->setViewer($this->getUser()) - ->setRefs($this->buildDoorkeeperRefs()) - ->execute(); - - $bad = array(); - foreach ($refs as $ref) { - if (!$ref->getIsVisible()) { - $bad[] = $ref->getObjectID(); - } - } - - if ($bad) { - $bad = implode(', ', $bad); - $this->error = pht('Invalid'); - throw new DifferentialFieldValidationException( - pht( - "Some JIRA issues could not be loaded. They may not exist, or ". - "you may not have permission to view them: %s", - $bad)); - } - } - } - - private function buildDoorkeeperRefs() { - $provider = PhabricatorAuthProviderOAuth1JIRA::getJIRAProvider(); - - $refs = array(); - if ($this->value) { - foreach ($this->value as $jira_key) { - $refs[] = id(new DoorkeeperObjectRef()) - ->setApplicationType(DoorkeeperBridgeJIRA::APPTYPE_JIRA) - ->setApplicationDomain($provider->getProviderDomain()) - ->setObjectType(DoorkeeperBridgeJIRA::OBJTYPE_ISSUE) - ->setObjectID($jira_key); - } - } - - return $refs; - } - - private function loadDoorkeeperExternalObjects() { - $refs = $this->buildDoorkeeperRefs(); - if (!$refs) { - return array(); - } - - $xobjs = id(new DoorkeeperExternalObjectQuery()) - ->setViewer($this->getUser()) - ->withObjectKeys(mpull($refs, 'getObjectKey')) - ->execute(); - - return $xobjs; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialLinesFieldSpecification.php b/src/applications/differential/field/specification/DifferentialLinesFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialLinesFieldSpecification.php +++ /dev/null @@ -1,35 +0,0 @@ -getDiff(); - return number_format($diff->getLineCount()); - } - - public function shouldAppearOnRevisionList() { - return true; - } - - public function renderHeaderForRevisionList() { - return 'Lines'; - } - - public function getColumnClassForRevisionList() { - return 'n'; - } - - public function renderValueForRevisionList(DifferentialRevision $revision) { - return number_format($revision->getLineCount()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialLintFieldSpecification.php b/src/applications/differential/field/specification/DifferentialLintFieldSpecification.php --- a/src/applications/differential/field/specification/DifferentialLintFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialLintFieldSpecification.php @@ -1,234 +1,6 @@ renderLabelForRevisionView(); - } - - public function renderValueForDiffView() { - return $this->renderValueForRevisionView(); - } - - public function shouldAppearOnRevisionView() { - return true; - } - - public function renderLabelForRevisionView() { - return 'Lint:'; - } - - private function getLintExcuse() { - return $this->getDiffProperty('arc:lint-excuse'); - } - - private function getPostponedLinters() { - return $this->getDiffProperty('arc:lint-postponed'); - } - - public function renderValueForRevisionView() { - $diff = $this->getManualDiff(); - $path_changesets = mpull($diff->loadChangesets(), 'getID', 'getFilename'); - - $lstar = DifferentialRevisionUpdateHistoryView::renderDiffLintStar($diff); - $lmsg = DifferentialRevisionUpdateHistoryView::getDiffLintMessage($diff); - $ldata = $this->getDiffProperty('arc:lint'); - $ltail = null; - - $rows = array(); - - $rows[] = array( - 'style' => 'star', - 'name' => $lstar, - 'value' => $lmsg, - 'show' => true, - ); - - $excuse = $this->getLintExcuse(); - if ($excuse) { - $rows[] = array( - 'style' => 'excuse', - 'name' => 'Excuse', - 'value' => phutil_escape_html_newlines($excuse), - 'show' => true, - ); - } - - $show_limit = 10; - $hidden = array(); - - if ($ldata) { - $ldata = igroup($ldata, 'path'); - foreach ($ldata as $path => $messages) { - - $rows[] = array( - 'style' => 'section', - 'name' => $path, - 'show' => $show_limit, - ); - - foreach ($messages as $message) { - $path = idx($message, 'path'); - $line = idx($message, 'line'); - - $code = idx($message, 'code'); - $severity = idx($message, 'severity'); - - $name = idx($message, 'name'); - $description = idx($message, 'description'); - - $line_link = 'line '.intval($line); - if (isset($path_changesets[$path])) { - $href = '#C'.$path_changesets[$path].'NL'.max(1, $line); - if ($diff->getID() != $this->getDiff()->getID()) { - $href = '/D'.$diff->getRevisionID().'?id='.$diff->getID().$href; - } - $line_link = phutil_tag( - 'a', - array( - 'href' => $href, - ), - $line_link); - } - - if ($show_limit) { - --$show_limit; - $show = true; - } else { - $show = false; - if (empty($hidden[$severity])) { - $hidden[$severity] = 0; - } - $hidden[$severity]++; - } - - $rows[] = array( - 'style' => $this->getSeverityStyle($severity), - 'name' => ucwords($severity), - 'value' => hsprintf( - '(%s) %s at %s', - $code, - $name, - $line_link), - 'show' => $show, - ); - - if (!empty($message['locations'])) { - $locations = array(); - foreach ($message['locations'] as $location) { - $other_line = idx($location, 'line'); - $locations[] = - idx($location, 'path', $path). - ($other_line ? ":{$other_line}" : ""); - } - $description .= "\nOther locations: ".implode(", ", $locations); - } - - if (strlen($description)) { - $rows[] = array( - 'style' => 'details', - 'value' => phutil_escape_html_newlines($description), - 'show' => false, - ); - if (empty($hidden['details'])) { - $hidden['details'] = 0; - } - $hidden['details']++; - } - } - } - } - - $postponed = $this->getPostponedLinters(); - if ($postponed) { - foreach ($postponed as $linter) { - $rows[] = array( - 'style' => $this->getPostponedStyle(), - 'name' => 'Postponed', - 'value' => $linter, - 'show' => false, - ); - if (empty($hidden['postponed'])) { - $hidden['postponed'] = 0; - } - $hidden['postponed']++; - } - } - - $show_string = $this->renderShowString($hidden); - - $view = new DifferentialResultsTableView(); - $view->setRows($rows); - $view->setShowMoreString($show_string); - - return $view->render(); - } - - private function getSeverityStyle($severity) { - $map = array( - ArcanistLintSeverity::SEVERITY_ERROR => 'red', - ArcanistLintSeverity::SEVERITY_WARNING => 'yellow', - ArcanistLintSeverity::SEVERITY_AUTOFIX => 'yellow', - ArcanistLintSeverity::SEVERITY_ADVICE => 'yellow', - ); - return idx($map, $severity); - } - - private function getPostponedStyle() { - return 'blue'; - } - - private function renderShowString(array $hidden) { - if (!$hidden) { - return null; - } - - // Reorder hidden things by severity. - $hidden = array_select_keys( - $hidden, - array( - ArcanistLintSeverity::SEVERITY_ERROR, - ArcanistLintSeverity::SEVERITY_WARNING, - ArcanistLintSeverity::SEVERITY_AUTOFIX, - ArcanistLintSeverity::SEVERITY_ADVICE, - 'details', - 'postponed', - )) + $hidden; - - $show = array(); - foreach ($hidden as $key => $value) { - switch ($key) { - case ArcanistLintSeverity::SEVERITY_ERROR: - $show[] = pht('%d Error(s)', $value); - break; - case ArcanistLintSeverity::SEVERITY_WARNING: - $show[] = pht('%d Warning(s)', $value); - break; - case ArcanistLintSeverity::SEVERITY_AUTOFIX: - $show[] = pht('%d Auto-Fix(es)', $value); - break; - case ArcanistLintSeverity::SEVERITY_ADVICE: - $show[] = pht('%d Advice(s)', $value); - break; - case 'details': - $show[] = pht('%d Detail(s)', $value); - break; - case 'postponed': - $show[] = pht('%d Postponed', $value); - break; - default: - $show[] = $value; - break; - } - } - - return "Show Full Lint Results (".implode(', ', $show).")"; - } +final class DifferentialLintFieldSpecification { public function renderWarningBoxForRevisionAccept() { $status = $this->getDiff()->getLintStatus(); diff --git a/src/applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php b/src/applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php +++ /dev/null @@ -1,130 +0,0 @@ -getManiphestTaskPHIDs(); - } - - public function renderLabelForRevisionView() { - return 'Maniphest Tasks:'; - } - - public function renderValueForRevisionView() { - $task_phids = $this->getManiphestTaskPHIDs(); - if (!$task_phids) { - return null; - } - - $links = array(); - foreach ($task_phids as $task_phid) { - $links[] = $this->getHandle($task_phid)->renderLink(); - } - - return phutil_implode_html(phutil_tag('br'), $links); - } - - private function getManiphestTaskPHIDs() { - $revision = $this->getRevision(); - if (!$revision->getPHID()) { - return array(); - } - return PhabricatorEdgeQuery::loadDestinationPHIDs( - $revision->getPHID(), - PhabricatorEdgeConfig::TYPE_DREV_HAS_RELATED_TASK); - } - - protected function didSetRevision() { - $this->maniphestTasks = $this->getManiphestTaskPHIDs(); - $this->oldManiphestTasks = $this->maniphestTasks; - } - - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->maniphestTasks; - } - - public function shouldAppearOnCommitMessageTemplate() { - return false; - } - - public function shouldAppearOnCommitMessage() { - return $this->shouldAppearOnRevisionView(); - } - - public function getCommitMessageKey() { - return 'maniphestTaskPHIDs'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->maniphestTasks = array_unique(nonempty($value, array())); - return $this; - } - - public function renderLabelForCommitMessage() { - return 'Maniphest Tasks'; - } - - public function getSupportedCommitMessageLabels() { - return array( - 'Maniphest Task', - 'Maniphest Tasks', - ); - } - - public function renderValueForCommitMessage($is_edit) { - if (!$this->maniphestTasks) { - return null; - } - - $names = array(); - foreach ($this->maniphestTasks as $phid) { - $handle = $this->getHandle($phid); - $names[] = $handle->getName(); - } - return implode(', ', $names); - } - - public function parseValueFromCommitMessage($value) { - $matches = null; - preg_match_all('/T(\d+)/', $value, $matches); - if (empty($matches[0])) { - return array(); - } - - // TODO: T603 Get a viewer here so we can issue the right query. - - $task_ids = $matches[1]; - $tasks = id(new ManiphestTask()) - ->loadAllWhere('id in (%Ld)', $task_ids); - - $task_phids = array(); - $invalid = array(); - foreach ($task_ids as $task_id) { - $task = idx($tasks, $task_id); - if (empty($task)) { - $invalid[] = 'T'.$task_id; - } else { - $task_phids[] = $task->getPHID(); - } - } - - if ($invalid) { - $what = pht('Maniphest Task(s)', count($invalid)); - $invalid = implode(', ', $invalid); - throw new DifferentialFieldParseException( - "Commit message references nonexistent {$what}: {$invalid}."); - } - - return $task_phids; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialPathFieldSpecification.php b/src/applications/differential/field/specification/DifferentialPathFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialPathFieldSpecification.php +++ /dev/null @@ -1,6 +0,0 @@ -getRevision()->getReviewers(); - } - - public function renderLabelForRevisionView() { - return pht('Project Reviewers'); - } - - public function renderValueForRevisionView() { - $reviewers = array(); - foreach ($this->getRevision()->getReviewerStatus() as $reviewer) { - if (!$reviewer->isUser()) { - $reviewers[] = $reviewer; - } - } - - if (!$reviewers) { - return null; - } - - $view = id(new DifferentialReviewersView()) - ->setUser($this->getUser()) - ->setReviewers($reviewers) - ->setHandles($this->getLoadedHandles()); - - $diff = $this->getRevision()->loadActiveDiff(); - if ($diff) { - $view->setActiveDiff($diff); - } - - return $view; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php b/src/applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialRepositoryFieldSpecification.php +++ /dev/null @@ -1,44 +0,0 @@ -value = $this->getRevision()->getRepositoryPHID(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $value = head($request->getArr('repositoryPHID')); - $this->value = nonempty($value, null); - return $this; - } - - - public function getRequiredHandlePHIDsForRevisionEdit() { - return array_filter(array($this->value)); - } - - public function renderEditControl() { - $value = array(); - if ($this->value) { - $value = array( - $this->getHandle($this->value), - ); - } - - return id(new AphrontFormTokenizerControl()) - ->setLabel('Repository') - ->setName('repositoryPHID') - ->setUser($this->getUser()) - ->setLimit(1) - ->setDatasource('/typeahead/common/repositories/') - ->setValue($value); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php b/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php +++ /dev/null @@ -1,102 +0,0 @@ -value; - } - - public function setValueFromStorage($value) { - $this->value = $value; - return $this; - } - - public function shouldAppearOnEdit() { - return true; - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->value = $request->getStr($this->getStorageKey()); - return $this; - } - - public function renderEditControl() { - return id(new AphrontFormTextAreaControl()) - ->setLabel('Revert Plan') - ->setName($this->getStorageKey()) - ->setCaption('Special steps required to safely revert this change.') - ->setValue($this->value); - } - - public function shouldAppearOnRevisionView() { - return true; - } - - public function renderLabelForRevisionView() { - return 'Revert Plan:'; - } - - public function renderValueForRevisionView() { - if (!$this->value) { - return null; - } - return $this->value; - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'revertPlan'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->value = $value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'Revert Plan'; - } - - - public function renderValueForCommitMessage($is_edit) { - return $this->value; - } - - public function getSupportedCommitMessageLabels() { - return array( - 'Revert Plan', - 'Revert', - ); - } - - public function parseValueFromCommitMessage($value) { - return $value; - } - - public function shouldAddToSearchIndex() { - return true; - } - - public function getValueForSearchIndex() { - return $this->value; - } - - public function getKeyForSearchIndex() { - return 'rpln'; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php b/src/applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php +++ /dev/null @@ -1,64 +0,0 @@ -reviewedBy = array(); - $revision = $this->getRevision(); - $reviewer = $revision->loadReviewedBy(); - - if ($reviewer) { - $this->reviewedBy = array($reviewer); - } - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'reviewedByPHIDs'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->reviewedBy = $value; - return $this; - } - - public function shouldAppearOnCommitMessageTemplate() { - return false; - } - - public function renderLabelForCommitMessage() { - return 'Reviewed By'; - } - - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->reviewedBy; - } - - public function renderValueForCommitMessage($is_edit) { - if ($is_edit) { - return null; - } - - if (!$this->reviewedBy) { - return null; - } - - $names = array(); - foreach ($this->reviewedBy as $phid) { - $names[] = $this->getHandle($phid)->getName(); - } - - return implode(', ', $names); - } - - public function parseValueFromCommitMessage($value) { - return $this->parseCommitMessageUserList($value); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialReviewersFieldSpecification.php b/src/applications/differential/field/specification/DifferentialReviewersFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialReviewersFieldSpecification.php +++ /dev/null @@ -1,176 +0,0 @@ -getReviewerPHIDs(); - } - - public function renderLabelForRevisionView() { - return pht('Reviewers'); - } - - public function renderValueForRevisionView() { - $reviewers = array(); - foreach ($this->getRevision()->getReviewerStatus() as $reviewer) { - if ($reviewer->isUser()) { - $reviewers[] = $reviewer; - } - } - - if (!$reviewers) { - // Renders "None". - return $this->renderUserList(array()); - } - - $view = id(new DifferentialReviewersView()) - ->setUser($this->getUser()) - ->setReviewers($reviewers) - ->setHandles($this->getLoadedHandles()); - - $diff = $this->getRevision()->loadActiveDiff(); - if ($diff) { - $view->setActiveDiff($diff); - } - - return $view; - } - - private function getReviewerPHIDs() { - $revision = $this->getRevision(); - return $revision->getReviewers(); - } - - public function shouldAppearOnEdit() { - return true; - } - - protected function didSetRevision() { - $this->reviewers = $this->getReviewerPHIDs(); - } - - public function getRequiredHandlePHIDsForRevisionEdit() { - return $this->reviewers; - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->reviewers = $request->getArr('reviewers'); - return $this; - } - - public function validateField() { - if (!$this->hasRevision()) { - return; - } - - $self = PhabricatorEnv::getEnvConfig('differential.allow-self-accept'); - if ($self) { - return; - } - - $author_phid = $this->getRevision()->getAuthorPHID(); - if (!in_array($author_phid, $this->reviewers)) { - return; - } - - $this->error = 'Invalid'; - throw new DifferentialFieldValidationException( - "The owner of a revision may not be a reviewer."); - } - - public function renderEditControl() { - $reviewer_map = array(); - foreach ($this->reviewers as $phid) { - $reviewer_map[] = $this->getHandle($phid); - } - return id(new AphrontFormTokenizerControl()) - ->setLabel(pht('Reviewers')) - ->setName('reviewers') - ->setUser($this->getUser()) - ->setDatasource('/typeahead/common/usersorprojects/') - ->setValue($reviewer_map) - ->setError($this->error); - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'reviewerPHIDs'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->reviewers = array_unique(nonempty($value, array())); - return $this; - } - - public function renderLabelForCommitMessage() { - return 'Reviewers'; - } - - public function getRequiredHandlePHIDsForCommitMessage() { - return $this->reviewers; - } - - public function renderValueForCommitMessage($is_edit) { - if (!$this->reviewers) { - return null; - } - - $names = array(); - foreach ($this->reviewers as $phid) { - $names[] = $this->getHandle($phid)->getObjectName(); - } - - return implode(', ', $names); - } - - public function getSupportedCommitMessageLabels() { - return array( - 'Reviewer', - 'Reviewers', - ); - } - - public function parseValueFromCommitMessage($value) { - return $this->parseCommitMessageUserOrProjectList($value); - } - - public function shouldAppearOnRevisionList() { - return true; - } - - public function renderHeaderForRevisionList() { - return 'Reviewers'; - } - - public function renderValueForRevisionList(DifferentialRevision $revision) { - $primary_reviewer = $revision->getPrimaryReviewer(); - if ($primary_reviewer) { - $names = array(); - - foreach ($revision->getReviewers() as $reviewer) { - $names[] = $this->getHandle($reviewer)->renderLink(); - } - - return phutil_implode_html(', ', $names); - } else { - return phutil_tag('em', array(), 'None'); - } - } - - public function getRequiredHandlePHIDsForRevisionList( - DifferentialRevision $revision) { - return $revision->getReviewers(); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php b/src/applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php +++ /dev/null @@ -1,99 +0,0 @@ -id = $this->getRevision()->getID(); - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function shouldAppearOnCommitMessageTemplate() { - return false; - } - - public function getCommitMessageKey() { - return 'revisionID'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->id = $value; - return $this; - } - - public function renderLabelForCommitMessage() { - return 'Differential Revision'; - } - - public function renderValueForCommitMessage($is_edit) { - if (!$this->id) { - return null; - } - return PhabricatorEnv::getProductionURI('/D'.$this->id); - } - - public function parseValueFromCommitMessage($value) { - $rev = trim(head(explode("\n", $value))); - - if (!strlen($rev)) { - return null; - } - - if (is_numeric($rev)) { - // TODO: Eventually, remove support for bare revision numbers. - return (int)$rev; - } - - $rev = self::parseRevisionIDFromURI($rev); - if ($rev !== null) { - return $rev; - } - - $example_uri = PhabricatorEnv::getProductionURI('/D123'); - throw new DifferentialFieldParseException( - "Commit references invalid 'Differential Revision'. Expected a ". - "Phabricator URI like '{$example_uri}', got '{$value}'."); - } - - public static function parseRevisionIDFromURI($uri) { - $path = id(new PhutilURI($uri))->getPath(); - - $matches = null; - if (preg_match('#^/D(\d+)$#', $path, $matches)) { - $id = (int)$matches[1]; - // Make sure the URI is the same as our URI. Basically, we want to ignore - // commits from other Phabricator installs. - if ($uri == PhabricatorEnv::getProductionURI('/D'.$id)) { - return $id; - } - - $allowed_uris = PhabricatorEnv::getAllowedURIs('/D'.$id); - - foreach ($allowed_uris as $allowed_uri) { - if ($uri == $allowed_uri) { - return $id; - } - } - } - - return null; - } - - public function shouldAppearOnRevisionList() { - return true; - } - - public function renderHeaderForRevisionList() { - return 'ID'; - } - - public function renderValueForRevisionList(DifferentialRevision $revision) { - return 'D'.$revision->getID(); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php b/src/applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php +++ /dev/null @@ -1,23 +0,0 @@ -getStatus()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php b/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialSummaryFieldSpecification.php +++ /dev/null @@ -1,89 +0,0 @@ -summary = (string)$this->getRevision()->getSummary(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->summary = $request->getStr('summary'); - return $this; - } - - public function renderEditControl() { - return id(new PhabricatorRemarkupControl()) - ->setLabel(pht('Summary')) - ->setName('summary') - ->setID($this->getControlID()) - ->setValue($this->summary); - } - - public function renderEditPreview() { - return id(new PHUIRemarkupPreviewPanel()) - ->setHeader(pht('Summary Preview')) - ->setControlID($this->getControlID()) - ->setPreviewURI('/differential/preview/'); - } - - public function shouldExtractMentions() { - return true; - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'summary'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->summary = (string)$value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'Summary'; - } - - public function renderValueForCommitMessage($is_edit) { - return $this->summary; - } - - public function parseValueFromCommitMessage($value) { - return (string)$value; - } - - public function shouldAddToSearchIndex() { - return true; - } - - public function getValueForSearchIndex() { - return $this->summary; - } - - public function getKeyForSearchIndex() { - return PhabricatorSearchField::FIELD_BODY; - } - - private function getControlID() { - if (!$this->controlID) { - $this->controlID = celerity_generate_unique_node_id(); - } - return $this->controlID; - } - -} diff --git a/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php b/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php +++ /dev/null @@ -1,112 +0,0 @@ -plan = (string)$this->getRevision()->getTestPlan(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->plan = $request->getStr('testplan'); - $this->error = null; - return $this; - } - - public function renderEditControl() { - if ($this->error === false) { - if ($this->isRequired()) { - $this->error = true; - } else { - $this->error = null; - } - } - - return id(new PhabricatorRemarkupControl()) - ->setLabel('Test Plan') - ->setName('testplan') - ->setValue($this->plan) - ->setError($this->error); - } - - public function shouldExtractMentions() { - return true; - } - - public function validateField() { - if ($this->isRequired()) { - if (!strlen($this->plan)) { - $this->error = 'Required'; - throw new DifferentialFieldValidationException( - "You must provide a test plan."); - } - } - } - - public function shouldAppearOnCommitMessage() { - return false; - } - - public function getCommitMessageKey() { - return 'testPlan'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->plan = (string)$value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'Test Plan'; - } - - public function getSupportedCommitMessageLabels() { - return array( - 'Test Plan', - 'Testplan', - 'Tested', - 'Tests', - ); - } - - - public function renderValueForCommitMessage($is_edit) { - return $this->plan; - } - - public function parseValueFromCommitMessage($value) { - return $value; - } - - public function shouldAddToSearchIndex() { - return true; - } - - public function getValueForSearchIndex() { - return $this->plan; - } - - public function getKeyForSearchIndex() { - return 'tpln'; - } - - private function isRequired() { - return PhabricatorEnv::getEnvConfig('differential.require-test-plan-field'); - } - - - -} diff --git a/src/applications/differential/field/specification/DifferentialTitleFieldSpecification.php b/src/applications/differential/field/specification/DifferentialTitleFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialTitleFieldSpecification.php +++ /dev/null @@ -1,107 +0,0 @@ -title = $this->getRevision()->getTitle(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->title = $request->getStr('title'); - $this->error = null; - return $this; - } - - public function renderEditControl() { - return id(new AphrontFormTextAreaControl()) - ->setLabel('Title') - ->setName('title') - ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT) - ->setError($this->error) - ->setValue($this->title); - } - - public function shouldExtractMentions() { - return true; - } - - public function validateField() { - if (!strlen($this->title)) { - $this->error = 'Required'; - throw new DifferentialFieldValidationException( - "You must provide a revision title in the first line ". - "of your commit message."); - } - - if (preg_match('/^<<.*>>$/', $this->title)) { - $default_title = self::getDefaultRevisionTitle(); - $this->error = 'Required'; - throw new DifferentialFieldValidationException( - "Replace the line '{$default_title}' with a revision title ". - "that describes the change."); - } - } - - public function shouldAppearOnCommitMessage() { - return true; - } - - public function getCommitMessageKey() { - return 'title'; - } - - public function setValueFromParsedCommitMessage($value) { - $this->title = $value; - return $this; - } - - public function shouldOverwriteWhenCommitMessageIsEdited() { - return true; - } - - public function renderLabelForCommitMessage() { - return 'Title'; - } - - public function renderValueForCommitMessage($is_edit) { - return $this->title; - } - - public function parseValueFromCommitMessage($value) { - return preg_replace('/\s*\n\s*/', ' ', $value); - } - - public function shouldAppearOnRevisionList() { - return true; - } - - public function renderHeaderForRevisionList() { - return 'Revision'; - } - - public function getColumnClassForRevisionList() { - return 'wide pri'; - } - - public static function getDefaultRevisionTitle() { - return '<>'; - } - - public function renderValueForRevisionList(DifferentialRevision $revision) { - return phutil_tag( - 'a', - array( - 'href' => '/D'.$revision->getID(), - ), - $revision->getTitle()); - } - -} diff --git a/src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php b/src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php --- a/src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php +++ b/src/applications/differential/field/specification/DifferentialUnitFieldSpecification.php @@ -1,204 +1,6 @@ renderLabelForRevisionView(); - } - - public function renderValueForDiffView() { - return $this->renderValueForRevisionView(); - } - - public function shouldAppearOnRevisionView() { - return true; - } - - public function renderLabelForRevisionView() { - return 'Unit:'; - } - - private function getUnitExcuse() { - return $this->getDiffProperty('arc:unit-excuse'); - } - - public function renderValueForRevisionView() { - $diff = $this->getManualDiff(); - - $ustar = DifferentialRevisionUpdateHistoryView::renderDiffUnitStar($diff); - $umsg = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage($diff); - - $rows = array(); - - $rows[] = array( - 'style' => 'star', - 'name' => $ustar, - 'value' => $umsg, - 'show' => true, - ); - - $excuse = $this->getUnitExcuse(); - if ($excuse) { - $rows[] = array( - 'style' => 'excuse', - 'name' => 'Excuse', - 'value' => phutil_escape_html_newlines($excuse), - 'show' => true, - ); - } - - $show_limit = 10; - $hidden = array(); - - $udata = $this->getDiffProperty('arc:unit'); - if ($udata) { - $sort_map = array( - ArcanistUnitTestResult::RESULT_BROKEN => 0, - ArcanistUnitTestResult::RESULT_FAIL => 1, - ArcanistUnitTestResult::RESULT_UNSOUND => 2, - ArcanistUnitTestResult::RESULT_SKIP => 3, - ArcanistUnitTestResult::RESULT_POSTPONED => 4, - ArcanistUnitTestResult::RESULT_PASS => 5, - ); - - foreach ($udata as $key => $test) { - $udata[$key]['sort'] = idx($sort_map, idx($test, 'result')); - } - $udata = isort($udata, 'sort'); - $engine = new PhabricatorMarkupEngine(); - $engine->setViewer($this->getUser()); - $markup_objects = array(); - foreach ($udata as $key => $test) { - $userdata = idx($test, 'userdata'); - if ($userdata) { - if ($userdata !== false) { - $userdata = str_replace("\000", '', $userdata); - } - $markup_object = id(new PhabricatorMarkupOneOff()) - ->setContent($userdata) - ->setPreserveLinebreaks(true); - $engine->addObject($markup_object, 'default'); - $markup_objects[$key] = $markup_object; - } - } - $engine->process(); - foreach ($udata as $key => $test) { - $result = idx($test, 'result'); - - $default_hide = false; - switch ($result) { - case ArcanistUnitTestResult::RESULT_POSTPONED: - case ArcanistUnitTestResult::RESULT_PASS: - $default_hide = true; - break; - } - - if ($show_limit && !$default_hide) { - --$show_limit; - $show = true; - } else { - $show = false; - if (empty($hidden[$result])) { - $hidden[$result] = 0; - } - $hidden[$result]++; - } - - $value = idx($test, 'name'); - if (!empty($test['link'])) { - $value = phutil_tag( - 'a', - array( - 'href' => $test['link'], - 'target' => '_blank', - ), - $value); - } - $rows[] = array( - 'style' => $this->getResultStyle($result), - 'name' => ucwords($result), - 'value' => $value, - 'show' => $show, - ); - - if (isset($markup_objects[$key])) { - $rows[] = array( - 'style' => 'details', - 'value' => $engine->getOutput($markup_objects[$key], 'default'), - 'show' => false, - ); - if (empty($hidden['details'])) { - $hidden['details'] = 0; - } - $hidden['details']++; - } - } - } - - $show_string = $this->renderShowString($hidden); - - $view = new DifferentialResultsTableView(); - $view->setRows($rows); - $view->setShowMoreString($show_string); - - return $view->render(); - } - - private function getResultStyle($result) { - $map = array( - ArcanistUnitTestResult::RESULT_PASS => 'green', - ArcanistUnitTestResult::RESULT_FAIL => 'red', - ArcanistUnitTestResult::RESULT_SKIP => 'blue', - ArcanistUnitTestResult::RESULT_BROKEN => 'red', - ArcanistUnitTestResult::RESULT_UNSOUND => 'yellow', - ArcanistUnitTestResult::RESULT_POSTPONED => 'blue', - ); - return idx($map, $result); - } - - private function renderShowString(array $hidden) { - if (!$hidden) { - return null; - } - - // Reorder hidden things by severity. - $hidden = array_select_keys( - $hidden, - array( - ArcanistUnitTestResult::RESULT_BROKEN, - ArcanistUnitTestResult::RESULT_FAIL, - ArcanistUnitTestResult::RESULT_UNSOUND, - ArcanistUnitTestResult::RESULT_SKIP, - ArcanistUnitTestResult::RESULT_POSTPONED, - ArcanistUnitTestResult::RESULT_PASS, - 'details', - )) + $hidden; - - $noun = array( - ArcanistUnitTestResult::RESULT_BROKEN => 'Broken', - ArcanistUnitTestResult::RESULT_FAIL => 'Failed', - ArcanistUnitTestResult::RESULT_UNSOUND => 'Unsound', - ArcanistUnitTestResult::RESULT_SKIP => 'Skipped', - ArcanistUnitTestResult::RESULT_POSTPONED => 'Postponed', - ArcanistUnitTestResult::RESULT_PASS => 'Passed', - ); - - $show = array(); - foreach ($hidden as $key => $value) { - if ($key == 'details') { - $show[] = pht('%d Detail(s)', $value); - } else { - $show[] = $value.' '.idx($noun, $key); - } - } - - return "Show Full Unit Results (".implode(', ', $show).")"; - } +final class DifferentialUnitFieldSpecification { public function renderWarningBoxForRevisionAccept() { $diff = $this->getDiff(); diff --git a/src/applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php b/src/applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php deleted file mode 100644 --- a/src/applications/differential/field/specification/DifferentialViewPolicyFieldSpecification.php +++ /dev/null @@ -1,38 +0,0 @@ -value = $this->getRevision()->getViewPolicy(); - } - - public function setValueFromRequest(AphrontRequest $request) { - $this->value = $request->getStr('viewPolicy'); - return $this; - } - - public function renderEditControl() { - $viewer = $this->getUser(); - $revision = $this->getRevision(); - - $policies = id(new PhabricatorPolicyQuery()) - ->setViewer($viewer) - ->setObject($revision) - ->execute(); - - return id(new AphrontFormPolicyControl()) - ->setUser($viewer) - ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) - ->setPolicyObject($revision) - ->setPolicies($policies) - ->setName('viewPolicy'); - } - -} diff --git a/src/applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php b/src/applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php deleted file mode 100644 --- a/src/applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php +++ /dev/null @@ -1,32 +0,0 @@ -assertEqual( - null, - $this->parse('123')); - - $this->assertEqual( - null, - $this->parse('D123')); - - // NOTE: We expect foreign, validly-formatted URIs to be ignored. - $this->assertEqual( - null, - $this->parse('http://phabricator.example.com/D123')); - - $this->assertEqual( - 123, - $this->parse(PhabricatorEnv::getProductionURI('/D123'))); - - } - - private function parse($value) { - return DifferentialRevisionIDFieldSpecification::parseRevisionIDFromURI( - $value); - } - -} diff --git a/src/applications/differential/storage/DifferentialAuxiliaryField.php b/src/applications/differential/storage/DifferentialAuxiliaryField.php deleted file mode 100644 --- a/src/applications/differential/storage/DifferentialAuxiliaryField.php +++ /dev/null @@ -1,40 +0,0 @@ -loadAllWhere( - 'objectPHID = %s AND fieldIndex IN (%Ls)', - $revision->getPHID(), - array_keys($index_map)); - $index_data = mpull($index_data, 'getFieldValue', 'getFieldIndex'); - - foreach ($index_data as $index => $data) { - $field_data[$index_map[$index]] = $data; - } - } - - foreach ($aux_fields as $aux_field) { - $aux_field->setRevision($revision); - $key = $aux_field->getStorageKey(); - if ($key) { - $aux_field->setValueFromStorage(idx($field_data, $key)); - } - } - - return $aux_fields; - } - -} diff --git a/src/applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php b/src/applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php --- a/src/applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php +++ b/src/applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php @@ -16,8 +16,9 @@ * button.) * */ -final class DifferentialReleephRequestFieldSpecification - extends DifferentialFieldSpecification { +final class DifferentialReleephRequestFieldSpecification { + + // TODO: This class is essentially dead right now, see T2222. const ACTION_PICKS = 'picks'; const ACTION_REVERTS = 'reverts';