1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 16:52:41 +01:00

Abstract raw diff rendering into DifferentialRawDiffRenderer

Test Plan:
Enable inline patches:

```
bin/config set metamta.differential.patch-format 'unified'
bin/config set metamta.differential.inline-patches 100000000
```

Create a new diff and confirm it renders correctly via email.

Reviewers: epriestley

Reviewed By: epriestley

CC: Korvin, aran

Differential Revision: https://secure.phabricator.com/D7198
This commit is contained in:
David Cramer 2013-10-02 16:28:03 -07:00 committed by epriestley
parent f75c13b987
commit 3c34cdce5a
3 changed files with 76 additions and 28 deletions

View file

@ -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',

View file

@ -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() {

View file

@ -0,0 +1,69 @@
<?php
final class DifferentialRawDiffRenderer {
private $changesets;
private $format = 'unified';
private $viewer;
public function setFormat($format) {
$this->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;
}
}
}