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 @@ -1541,6 +1541,7 @@ '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 @@ '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 --- a/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php +++ b/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php @@ -20,6 +20,21 @@ } 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 @@ '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 --- /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 --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -349,9 +349,7 @@ 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() {