Page MenuHomePhabricator

D12993.diff
No OneTemporary

D12993.diff

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 @@
+<?php
+
+final class PhabricatorCommitMergedCommitsField
+ extends PhabricatorCommitCustomField {
+
+ public function getFieldKey() {
+ return 'diffusion:mergedcommits';
+ }
+
+ public function shouldDisableByDefault() {
+ return true;
+ }
+
+ public function shouldAppearInTransactionMail() {
+ return true;
+ }
+
+ public function updateTransactionMailBody(
+ PhabricatorMetaMTAMailBody $body,
+ PhabricatorApplicationTransactionEditor $editor,
+ array $xactions) {
+
+ // Put all the merged commits info int the mail body if this is a merge
+ $merges_caption = '';
+ // TODO: Make this limit configurable after T6030
+ $limit = 50;
+ $commit = $this->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() {

File Metadata

Mime Type
text/plain
Expires
Mar 12 2025, 1:47 PM (6 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7587638
Default Alt Text
D12993.diff (5 KB)

Event Timeline