diff --git a/src/applications/differential/data/commitmessage/DifferentialCommitMessageData.php b/src/applications/differential/data/commitmessage/DifferentialCommitMessageData.php index ee562f128..46c1a97f0 100644 --- a/src/applications/differential/data/commitmessage/DifferentialCommitMessageData.php +++ b/src/applications/differential/data/commitmessage/DifferentialCommitMessageData.php @@ -1,196 +1,196 @@ <?php /* * Copyright 2011 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ class DifferentialCommitMessageData { protected $revision; protected $fields = array(); protected $mode; protected $comments; const MODE_EDIT = 'edit'; const MODE_AMEND = 'amend'; public function __construct(DifferentialRevision $revision, $mode) { $this->revision = $revision; $this->mode = $mode; $comments = id(new DifferentialComment())->loadAllWhere( 'revisionID = %d', $revision->getID()); $this->comments = $comments; } protected function getCommenters() { $revision = $this->revision; $map = array(); foreach ($this->comments as $comment) { $map[$comment->getAuthorPHID()] = true; } unset($map[$revision->getAuthorPHID()]); if ($this->getReviewer()) { unset($map[$this->getReviewer()]); } return array_keys($map); } private function getReviewer() { $reviewer = null; foreach ($this->comments as $comment) { if ($comment->getAction() == DifferentialAction::ACTION_ACCEPT) { $reviewer = $comment->getAuthorPHID(); } else if ($comment->getAction() == DifferentialAction::ACTION_REJECT) { $reviewer = null; } } return $reviewer; } public function prepare() { $revision = $this->revision; if ($revision->getSummary()) { $this->setField('Summary', $revision->getSummary()); } $this->setField('Test Plan', $revision->getTestPlan()); $reviewer = null; $commenters = array(); $revision->loadRelationships(); if ($this->mode == self::MODE_AMEND) { $reviewer = $this->getReviewer(); $commenters = $this->getCommenters(); } $reviewers = $revision->getReviewers(); $ccphids = $revision->getCCPHIDs(); $phids = array_merge($ccphids, $commenters, $reviewers); if ($reviewer) { $phids[] = $reviewer; } $handles = id(new PhabricatorObjectHandleData($phids)) ->loadHandles(); if ($this->mode == self::MODE_AMEND) { if ($reviewer) { $this->setField('Reviewed By', $handles[$reviewer]->getName()); } } if ($reviewers) { $reviewer_names = array(); foreach ($reviewers as $uid) { $reviewer_names[] = $handles[$uid]->getName(); } $reviewer_names = implode(', ', $reviewer_names); $this->setField('Reviewers', $reviewer_names); } $user_handles = array_select_keys($handles, $commenters); if ($user_handles) { $commenters = implode(', ', mpull($user_handles, 'getName')); $this->setField('Commenters', $commenters); } $cc_handles = array_select_keys($handles, $ccphids); if ($cc_handles) { $cc = implode(', ', mpull($cc_handles, 'getName')); $this->setField('CC', $cc); } if ($revision->getRevertPlan()) { $this->setField('Revert Plan', $revision->getRevertPlan()); } if ($revision->getBlameRevision()) { $this->setField('Blame Revision', $revision->getBlameRevision()); } if ($this->mode == self::MODE_EDIT) { // In edit mode, include blank fields. $blank_fields = array('Summary', 'Reviewers', 'CC', 'Revert Plan', 'Blame Revision'); foreach ($blank_fields as $blank_field) { if (!$this->getField($blank_field)) { $this->setField($blank_field, ''); } } } $this->setField('Title', $revision->getTitle()); $this->setField('Differential Revision', $revision->getID()); // append custom commit message fields $modify_class = PhabricatorEnv::getEnvConfig( 'differential.modify-commit-message-class'); if ($modify_class) { $modifier = newv($modify_class, array($revision)); - $fields = $modifier->modifyFields($fields); + $this->fields = $modifier->modifyFields($this->fields); } } public function setField($name, $value) { $field = $this->getField($name); if ($field) { $field->setValue($value); } else { $this->fields[] = new DifferentialCommitMessageField($name, $value); } return $this; } private function getField($name) { foreach ($this->fields as $field) { if ($field->getName() == $name) { return $field; } } return null; } public function getCommitMessage() { $fields = $this->fields; $message = array(); $title = $this->getField('Title'); $message[] = $title->getValue() . "\n"; foreach ($fields as $field) { if ($field->getName() != 'Title') { $message[] = $field->render(); } } $message = implode("\n", $message); $message = str_replace( array("\r\n", "\r"), array("\n", "\n"), $message); $message = $message."\n"; return $message; } }