1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-20 09:18:48 +02:00

Implement "Add to CC" rule for Audits

Summary:
D6660 accidentally allowed you to build Herald rules for commits that take action "Add to CC", but provided no implementation.

Someone at Facebook then wrote such a rule.

Fix forward since there's no real reason not to allow this.

Test Plan: Used `./scripts/repository/reparse.php --herald rXnnnn` to trigger rules. Observed rule trigger and subsequent subscription.

Reviewers: wez, btrahan

Reviewed By: btrahan

CC: aran

Differential Revision: https://secure.phabricator.com/D6845
This commit is contained in:
epriestley 2013-08-29 17:03:40 -07:00
parent b16d5b9ba4
commit b932c606cb
3 changed files with 103 additions and 67 deletions

View file

@ -3670,7 +3670,7 @@ celerity_register_resource_map(array(
), ),
'phabricator-zindex-css' => 'phabricator-zindex-css' =>
array( array(
'uri' => '/res/1767701c/rsrc/css/core/z-index.css', 'uri' => '/res/b443d508/rsrc/css/core/z-index.css',
'type' => 'css', 'type' => 'css',
'requires' => 'requires' =>
array( array(
@ -4171,7 +4171,7 @@ celerity_register_resource_map(array(
), array( ), array(
'packages' => 'packages' =>
array( array(
'5f35f9d7' => 'beac5d1a' =>
array( array(
'name' => 'core.pkg.css', 'name' => 'core.pkg.css',
'symbols' => 'symbols' =>
@ -4218,7 +4218,7 @@ celerity_register_resource_map(array(
39 => 'phabricator-property-list-view-css', 39 => 'phabricator-property-list-view-css',
40 => 'phabricator-tag-view-css', 40 => 'phabricator-tag-view-css',
), ),
'uri' => '/res/pkg/5f35f9d7/core.pkg.css', 'uri' => '/res/pkg/beac5d1a/core.pkg.css',
'type' => 'css', 'type' => 'css',
), ),
'8977e356' => '8977e356' =>
@ -4409,15 +4409,15 @@ celerity_register_resource_map(array(
), ),
'reverse' => 'reverse' =>
array( array(
'aphront-dialog-view-css' => '5f35f9d7', 'aphront-dialog-view-css' => 'beac5d1a',
'aphront-error-view-css' => '5f35f9d7', 'aphront-error-view-css' => 'beac5d1a',
'aphront-list-filter-view-css' => '5f35f9d7', 'aphront-list-filter-view-css' => 'beac5d1a',
'aphront-pager-view-css' => '5f35f9d7', 'aphront-pager-view-css' => 'beac5d1a',
'aphront-panel-view-css' => '5f35f9d7', 'aphront-panel-view-css' => 'beac5d1a',
'aphront-table-view-css' => '5f35f9d7', 'aphront-table-view-css' => 'beac5d1a',
'aphront-tokenizer-control-css' => '5f35f9d7', 'aphront-tokenizer-control-css' => 'beac5d1a',
'aphront-tooltip-css' => '5f35f9d7', 'aphront-tooltip-css' => 'beac5d1a',
'aphront-typeahead-control-css' => '5f35f9d7', 'aphront-typeahead-control-css' => 'beac5d1a',
'differential-changeset-view-css' => '09216861', 'differential-changeset-view-css' => '09216861',
'differential-core-view-css' => '09216861', 'differential-core-view-css' => '09216861',
'differential-inline-comment-editor' => 'd07a3bc2', 'differential-inline-comment-editor' => 'd07a3bc2',
@ -4431,7 +4431,7 @@ celerity_register_resource_map(array(
'differential-table-of-contents-css' => '09216861', 'differential-table-of-contents-css' => '09216861',
'diffusion-commit-view-css' => 'c8ce2d88', 'diffusion-commit-view-css' => 'c8ce2d88',
'diffusion-icons-css' => 'c8ce2d88', 'diffusion-icons-css' => 'c8ce2d88',
'global-drag-and-drop-css' => '5f35f9d7', 'global-drag-and-drop-css' => 'beac5d1a',
'inline-comment-summary-css' => '09216861', 'inline-comment-summary-css' => '09216861',
'javelin-aphlict' => '8977e356', 'javelin-aphlict' => '8977e356',
'javelin-behavior' => '2dbbb7d1', 'javelin-behavior' => '2dbbb7d1',
@ -4504,55 +4504,55 @@ celerity_register_resource_map(array(
'javelin-util' => '2dbbb7d1', 'javelin-util' => '2dbbb7d1',
'javelin-vector' => '2dbbb7d1', 'javelin-vector' => '2dbbb7d1',
'javelin-workflow' => '2dbbb7d1', 'javelin-workflow' => '2dbbb7d1',
'lightbox-attachment-css' => '5f35f9d7', 'lightbox-attachment-css' => 'beac5d1a',
'maniphest-task-summary-css' => '06bacb9a', 'maniphest-task-summary-css' => '06bacb9a',
'maniphest-transaction-detail-css' => '06bacb9a', 'maniphest-transaction-detail-css' => '06bacb9a',
'phabricator-action-list-view-css' => '5f35f9d7', 'phabricator-action-list-view-css' => 'beac5d1a',
'phabricator-application-launch-view-css' => '5f35f9d7', 'phabricator-application-launch-view-css' => 'beac5d1a',
'phabricator-busy' => '8977e356', 'phabricator-busy' => '8977e356',
'phabricator-content-source-view-css' => '09216861', 'phabricator-content-source-view-css' => '09216861',
'phabricator-core-css' => '5f35f9d7', 'phabricator-core-css' => 'beac5d1a',
'phabricator-crumbs-view-css' => '5f35f9d7', 'phabricator-crumbs-view-css' => 'beac5d1a',
'phabricator-drag-and-drop-file-upload' => 'd07a3bc2', 'phabricator-drag-and-drop-file-upload' => 'd07a3bc2',
'phabricator-dropdown-menu' => '8977e356', 'phabricator-dropdown-menu' => '8977e356',
'phabricator-file-upload' => '8977e356', 'phabricator-file-upload' => '8977e356',
'phabricator-filetree-view-css' => '5f35f9d7', 'phabricator-filetree-view-css' => 'beac5d1a',
'phabricator-flag-css' => '5f35f9d7', 'phabricator-flag-css' => 'beac5d1a',
'phabricator-header-view-css' => '5f35f9d7', 'phabricator-header-view-css' => 'beac5d1a',
'phabricator-hovercard' => '8977e356', 'phabricator-hovercard' => '8977e356',
'phabricator-jump-nav' => '5f35f9d7', 'phabricator-jump-nav' => 'beac5d1a',
'phabricator-keyboard-shortcut' => '8977e356', 'phabricator-keyboard-shortcut' => '8977e356',
'phabricator-keyboard-shortcut-manager' => '8977e356', 'phabricator-keyboard-shortcut-manager' => '8977e356',
'phabricator-main-menu-view' => '5f35f9d7', 'phabricator-main-menu-view' => 'beac5d1a',
'phabricator-menu-item' => '8977e356', 'phabricator-menu-item' => '8977e356',
'phabricator-nav-view-css' => '5f35f9d7', 'phabricator-nav-view-css' => 'beac5d1a',
'phabricator-notification' => '8977e356', 'phabricator-notification' => '8977e356',
'phabricator-notification-css' => '5f35f9d7', 'phabricator-notification-css' => 'beac5d1a',
'phabricator-notification-menu-css' => '5f35f9d7', 'phabricator-notification-menu-css' => 'beac5d1a',
'phabricator-object-item-list-view-css' => '5f35f9d7', 'phabricator-object-item-list-view-css' => 'beac5d1a',
'phabricator-object-selector-css' => '09216861', 'phabricator-object-selector-css' => '09216861',
'phabricator-phtize' => '8977e356', 'phabricator-phtize' => '8977e356',
'phabricator-prefab' => '8977e356', 'phabricator-prefab' => '8977e356',
'phabricator-project-tag-css' => '06bacb9a', 'phabricator-project-tag-css' => '06bacb9a',
'phabricator-property-list-view-css' => '5f35f9d7', 'phabricator-property-list-view-css' => 'beac5d1a',
'phabricator-remarkup-css' => '5f35f9d7', 'phabricator-remarkup-css' => 'beac5d1a',
'phabricator-shaped-request' => 'd07a3bc2', 'phabricator-shaped-request' => 'd07a3bc2',
'phabricator-side-menu-view-css' => '5f35f9d7', 'phabricator-side-menu-view-css' => 'beac5d1a',
'phabricator-standard-page-view' => '5f35f9d7', 'phabricator-standard-page-view' => 'beac5d1a',
'phabricator-tag-view-css' => '5f35f9d7', 'phabricator-tag-view-css' => 'beac5d1a',
'phabricator-textareautils' => '8977e356', 'phabricator-textareautils' => '8977e356',
'phabricator-tooltip' => '8977e356', 'phabricator-tooltip' => '8977e356',
'phabricator-transaction-view-css' => '5f35f9d7', 'phabricator-transaction-view-css' => 'beac5d1a',
'phabricator-zindex-css' => '5f35f9d7', 'phabricator-zindex-css' => 'beac5d1a',
'phui-button-css' => '5f35f9d7', 'phui-button-css' => 'beac5d1a',
'phui-form-css' => '5f35f9d7', 'phui-form-css' => 'beac5d1a',
'phui-form-view-css' => '5f35f9d7', 'phui-form-view-css' => 'beac5d1a',
'phui-icon-view-css' => '5f35f9d7', 'phui-icon-view-css' => 'beac5d1a',
'phui-spacing-css' => '5f35f9d7', 'phui-spacing-css' => 'beac5d1a',
'sprite-apps-large-css' => '5f35f9d7', 'sprite-apps-large-css' => 'beac5d1a',
'sprite-gradient-css' => '5f35f9d7', 'sprite-gradient-css' => 'beac5d1a',
'sprite-icons-css' => '5f35f9d7', 'sprite-icons-css' => 'beac5d1a',
'sprite-menu-css' => '5f35f9d7', 'sprite-menu-css' => 'beac5d1a',
'syntax-highlighting-css' => '5f35f9d7', 'syntax-highlighting-css' => 'beac5d1a',
), ),
)); ));

View file

@ -18,6 +18,7 @@ final class HeraldCommitAdapter extends HeraldAdapter {
protected $commitData; protected $commitData;
protected $emailPHIDs = array(); protected $emailPHIDs = array();
protected $addCCPHIDs = array();
protected $auditMap = array(); protected $auditMap = array();
protected $affectedPaths; protected $affectedPaths;
@ -95,7 +96,6 @@ final class HeraldCommitAdapter extends HeraldAdapter {
case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL: case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
return array( return array(
self::ACTION_ADD_CC, self::ACTION_ADD_CC,
self::ACTION_REMOVE_CC,
self::ACTION_EMAIL, self::ACTION_EMAIL,
self::ACTION_AUDIT, self::ACTION_AUDIT,
self::ACTION_NOTHING, self::ACTION_NOTHING,
@ -103,7 +103,6 @@ final class HeraldCommitAdapter extends HeraldAdapter {
case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL: case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
return array( return array(
self::ACTION_ADD_CC, self::ACTION_ADD_CC,
self::ACTION_REMOVE_CC,
self::ACTION_EMAIL, self::ACTION_EMAIL,
self::ACTION_FLAG, self::ACTION_FLAG,
self::ACTION_AUDIT, self::ACTION_AUDIT,
@ -145,6 +144,10 @@ final class HeraldCommitAdapter extends HeraldAdapter {
return array_keys($this->emailPHIDs); return array_keys($this->emailPHIDs);
} }
public function getAddCCMap() {
return $this->addCCPHIDs;
}
public function getAuditMap() { public function getAuditMap() {
return $this->auditMap; return $this->auditMap;
} }
@ -323,6 +326,18 @@ final class HeraldCommitAdapter extends HeraldAdapter {
true, true,
pht('Added address to email targets.')); pht('Added address to email targets.'));
break; break;
case self::ACTION_ADD_CC:
foreach ($effect->getTarget() as $phid) {
if (empty($this->addCCPHIDs[$phid])) {
$this->addCCPHIDs[$phid] = array();
}
$this->addCCPHIDs[$phid][] = $effect->getRuleID();
}
$result[] = new HeraldApplyTranscript(
$effect,
true,
pht('Added address to CC.'));
break;
case self::ACTION_AUDIT: case self::ACTION_AUDIT:
foreach ($effect->getTarget() as $phid) { foreach ($effect->getTarget() as $phid) {
if (empty($this->auditMap[$phid])) { if (empty($this->auditMap[$phid])) {

View file

@ -41,8 +41,9 @@ final class PhabricatorRepositoryCommitHeraldWorker
$xscript = $engine->getTranscript(); $xscript = $engine->getTranscript();
$audit_phids = $adapter->getAuditMap(); $audit_phids = $adapter->getAuditMap();
if ($audit_phids) { $cc_phids = $adapter->getAddCCMap();
$this->createAudits($commit, $audit_phids, $rules); if ($audit_phids || $cc_phids) {
$this->createAudits($commit, $audit_phids, $cc_phids, $rules);
} }
$explicit_auditors = $this->createAuditsFromCommitMessage($commit, $data); $explicit_auditors = $this->createAuditsFromCommitMessage($commit, $data);
@ -59,6 +60,7 @@ final class PhabricatorRepositoryCommitHeraldWorker
$email_phids = array_unique( $email_phids = array_unique(
array_merge( array_merge(
$explicit_auditors, $explicit_auditors,
array_keys($cc_phids),
$herald_targets)); $herald_targets));
if (!$email_phids) { if (!$email_phids) {
return; return;
@ -174,6 +176,7 @@ final class PhabricatorRepositoryCommitHeraldWorker
private function createAudits( private function createAudits(
PhabricatorRepositoryCommit $commit, PhabricatorRepositoryCommit $commit,
array $map, array $map,
array $ccmap,
array $rules) { array $rules) {
assert_instances_of($rules, 'HeraldRule'); assert_instances_of($rules, 'HeraldRule');
@ -183,6 +186,13 @@ final class PhabricatorRepositoryCommitHeraldWorker
$requests = mpull($requests, null, 'getAuditorPHID'); $requests = mpull($requests, null, 'getAuditorPHID');
$rules = mpull($rules, null, 'getID'); $rules = mpull($rules, null, 'getID');
$maps = array(
PhabricatorAuditStatusConstants::AUDIT_REQUIRED => $map,
PhabricatorAuditStatusConstants::CC => $ccmap,
);
foreach ($maps as $status => $map) {
foreach ($map as $phid => $rule_ids) { foreach ($map as $phid => $rule_ids) {
$request = idx($requests, $phid); $request = idx($requests, $phid);
if ($request) { if ($request) {
@ -194,16 +204,27 @@ final class PhabricatorRepositoryCommitHeraldWorker
if ($rules[$id]) { if ($rules[$id]) {
$rule_name = $rules[$id]->getName(); $rule_name = $rules[$id]->getName();
} }
$reasons[] = 'Herald Rule #'.$id.' "'.$rule_name.'" Triggered Audit'; if ($status == PhabricatorAuditStatusConstants::AUDIT_REQUIRED) {
$reasons[] = pht(
'Herald Rule #%d "%s" Triggered Audit',
$id,
$rule_name);
} else {
$reasons[] = pht(
'Herald Rule #%d "%s" Triggered CC',
$id,
$rule_name);
}
} }
$request = new PhabricatorRepositoryAuditRequest(); $request = new PhabricatorRepositoryAuditRequest();
$request->setCommitPHID($commit->getPHID()); $request->setCommitPHID($commit->getPHID());
$request->setAuditorPHID($phid); $request->setAuditorPHID($phid);
$request->setAuditStatus(PhabricatorAuditStatusConstants::AUDIT_REQUIRED); $request->setAuditStatus($status);
$request->setAuditReasons($reasons); $request->setAuditReasons($reasons);
$request->save(); $request->save();
} }
}
$commit->updateAuditStatus($requests); $commit->updateAuditStatus($requests);
$commit->save(); $commit->save();