diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index bb4a613cae..44bf8afe24 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1541,6 +1541,7 @@ phutil_register_library_map(array( 'PhabricatorClusterConfigOptions' => 'applications/config/option/PhabricatorClusterConfigOptions.php', 'PhabricatorCommitBranchesField' => 'applications/repository/customfield/PhabricatorCommitBranchesField.php', 'PhabricatorCommitCustomField' => 'applications/repository/customfield/PhabricatorCommitCustomField.php', + 'PhabricatorCommitMergedCommitsField' => 'applications/repository/customfield/PhabricatorCommitMergedCommitsField.php', 'PhabricatorCommitSearchEngine' => 'applications/audit/query/PhabricatorCommitSearchEngine.php', 'PhabricatorCommitTagsField' => 'applications/repository/customfield/PhabricatorCommitTagsField.php', 'PhabricatorCommonPasswords' => 'applications/auth/constants/PhabricatorCommonPasswords.php', @@ -4906,6 +4907,7 @@ phutil_register_library_map(array( 'PhabricatorClusterConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorCommitBranchesField' => 'PhabricatorCommitCustomField', 'PhabricatorCommitCustomField' => 'PhabricatorCustomField', + 'PhabricatorCommitMergedCommitsField' => 'PhabricatorCommitCustomField', 'PhabricatorCommitSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorCommitTagsField' => 'PhabricatorCommitCustomField', 'PhabricatorCommonPasswords' => 'Phobject', diff --git a/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php b/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php index 28a9e1b670..89a20fac68 100644 --- a/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php +++ b/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php @@ -20,6 +20,21 @@ final class PhabricatorDiffusionConfigOptions } public function getOptions() { + $custom_field_type = 'custom:PhabricatorCustomFieldConfigOptionType'; + + $fields = array( + new PhabricatorCommitBranchesField(), + new PhabricatorCommitTagsField(), + new PhabricatorCommitMergedCommitsField(), + ); + + $default_fields = array(); + foreach ($fields as $field) { + $default_fields[$field->getFieldKey()] = array( + 'disabled' => $field->shouldDisableByDefault(), + ); + } + return array( $this->newOption( 'metamta.diffusion.subject-prefix', @@ -124,6 +139,13 @@ final class PhabricatorDiffusionConfigOptions 'from web traffic (for example, if you use different SSH and '. 'web load balancers), you can set the SSH hostname here. This '. 'is an advanced option.')), + $this->newOption('diffusion.fields', $custom_field_type, $default_fields) + ->setCustomData( + id(new PhabricatorRepositoryCommit()) + ->getCustomFieldBaseClass()) + ->setDescription(pht( + "Select and reorder diffusion fields.\n\n". + "These will primarily show up in Mail Notifications.")), ); } diff --git a/src/applications/repository/customfield/PhabricatorCommitMergedCommitsField.php b/src/applications/repository/customfield/PhabricatorCommitMergedCommitsField.php new file mode 100644 index 0000000000..57a0dd9bdb --- /dev/null +++ b/src/applications/repository/customfield/PhabricatorCommitMergedCommitsField.php @@ -0,0 +1,66 @@ +getObject(); + + try { + $merges = DiffusionPathChange::newFromConduit( + id(new ConduitCall('diffusion.mergedcommitsquery', array( + 'commit' => $commit->getCommitIdentifier(), + 'limit' => $limit + 1, + 'callsign' => $commit->getRepository()->getCallsign(), + ))) + ->setUser($this->getViewer()) + ->execute()); + + if (count($merges) > $limit) { + $merges = array_slice($merges, 0, $limit); + $merges_caption = + pht("This commit merges more than %d changes. Only the first ". + "%d are shown.\n", $limit, $limit); + } + + if ($merges) { + $merge_commits = array(); + foreach ($merges as $merge) { + $merge_commits[] = $merge->getAuthorName(). + ': '. + $merge->getSummary(); + } + $body->addTextSection( + pht('MERGED COMMITS'), + $merges_caption.implode("\n", $merge_commits)); + } + } catch (ConduitException $ex) { + // Log the exception into the email body + $body->addTextSection( + pht('MERGED COMMITS'), + pht('Error generating merged commits: ').$ex->getMessage()); + } + + } + +} diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php index a3b4bf0609..18328758ba 100644 --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -349,9 +349,7 @@ final class PhabricatorRepositoryCommit public function getCustomFieldSpecificationForRole($role) { - // TODO: We could make this configurable eventually, but just use the - // defaults for now. - return array(); + return PhabricatorEnv::getEnvConfig('diffusion.fields'); } public function getCustomFieldBaseClass() {