diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 99b39faa49..7fc1ec5e13 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -391,6 +391,7 @@ phutil_register_library_map(array( 'DifferentialPathFieldSpecification' => 'applications/differential/field/specification/DifferentialPathFieldSpecification.php', 'DifferentialPeopleMenuEventListener' => 'applications/differential/events/DifferentialPeopleMenuEventListener.php', 'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php', + 'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php', 'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php', 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', 'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php', diff --git a/src/applications/differential/mail/DifferentialReviewRequestMail.php b/src/applications/differential/mail/DifferentialReviewRequestMail.php index 2c858de252..82a58c8c70 100644 --- a/src/applications/differential/mail/DifferentialReviewRequestMail.php +++ b/src/applications/differential/mail/DifferentialReviewRequestMail.php @@ -104,38 +104,16 @@ abstract class DifferentialReviewRequestMail extends DifferentialMail { } private function buildPatch() { - $diff = new DifferentialDiff(); - $diff->attachChangesets($this->getChangesets()); - foreach ($diff->getChangesets() as $changeset) { - $changeset->attachHunks( - $changeset->loadRelatives(new DifferentialHunk(), 'changesetID')); - } - - $raw_changes = $diff->buildChangesList(); - $changes = array(); - foreach ($raw_changes as $changedict) { - $changes[] = ArcanistDiffChange::newFromDictionary($changedict); - } + $renderer = new DifferentialRawDiffRenderer(); + $renderer->setChangesets($this->getChangesets()); + $renderer->setFormat( + PhabricatorEnv::getEnvConfig('metamta.differential.patch-format')); // TODO: It would be nice to have a real viewer here eventually, but // in the meantime anyone we're sending mail to can certainly see the // patch. - $loader = id(new PhabricatorFileBundleLoader()) - ->setViewer(PhabricatorUser::getOmnipotentUser()); - - $bundle = ArcanistBundle::newFromChanges($changes); - $bundle->setLoadFileDataCallback(array($loader, 'loadFileData')); - - $format = PhabricatorEnv::getEnvConfig('metamta.differential.patch-format'); - switch ($format) { - case 'git': - return $bundle->toGitPatch(); - break; - case 'unified': - default: - return $bundle->toUnifiedDiff(); - break; - } + $renderer->setViewer(PhabricatorUser::getOmnipotentUser()); + return $renderer->buildPatch(); } protected function getMailTags() { diff --git a/src/applications/differential/render/DifferentialRawDiffRenderer.php b/src/applications/differential/render/DifferentialRawDiffRenderer.php new file mode 100644 index 0000000000..e8a1d09a60 --- /dev/null +++ b/src/applications/differential/render/DifferentialRawDiffRenderer.php @@ -0,0 +1,69 @@ +format = $format; + return $this; + } + + public function getFormat() { + return $this->format; + } + + public function setChangesets(array $changesets) { + assert_instances_of($changesets, 'DifferentialChangeset'); + + $this->changesets = $changesets; + return $this; + } + + public function getChangesets() { + return $this->changesets; + } + + public function setViewer(PhabricatorUser $viewer) { + $this->viewer = $viewer; + return $this; + } + + public function getViewer() { + return $this->viewer; + } + + public function buildPatch() { + $diff = new DifferentialDiff(); + $diff->attachChangesets($this->getChangesets()); + foreach ($diff->getChangesets() as $changeset) { + $changeset->attachHunks( + $changeset->loadRelatives(new DifferentialHunk(), 'changesetID')); + } + + $raw_changes = $diff->buildChangesList(); + $changes = array(); + foreach ($raw_changes as $changedict) { + $changes[] = ArcanistDiffChange::newFromDictionary($changedict); + } + + $viewer = $this->getViewer(); + $loader = id(new PhabricatorFileBundleLoader()) + ->setViewer($viewer); + + $bundle = ArcanistBundle::newFromChanges($changes); + $bundle->setLoadFileDataCallback(array($loader, 'loadFileData')); + + $format = $this->getFormat(); + switch ($format) { + case 'git': + return $bundle->toGitPatch(); + break; + case 'unified': + default: + return $bundle->toUnifiedDiff(); + break; + } + } +}