Page MenuHomePhabricator

D20830.id.diff
No OneTemporary

D20830.id.diff

diff --git a/src/applications/differential/controller/DifferentialChangesetViewController.php b/src/applications/differential/controller/DifferentialChangesetViewController.php
--- a/src/applications/differential/controller/DifferentialChangesetViewController.php
+++ b/src/applications/differential/controller/DifferentialChangesetViewController.php
@@ -166,6 +166,7 @@
DifferentialChangesetParser::parseRangeSpecification($spec);
$parser = id(new DifferentialChangesetParser())
+ ->setViewer($viewer)
->setCoverage($coverage)
->setChangeset($changeset)
->setRenderingReference($rendering_reference)
diff --git a/src/applications/differential/parser/DifferentialChangesetParser.php b/src/applications/differential/parser/DifferentialChangesetParser.php
--- a/src/applications/differential/parser/DifferentialChangesetParser.php
+++ b/src/applications/differential/parser/DifferentialChangesetParser.php
@@ -58,6 +58,7 @@
private $linesOfContext = 8;
private $highlightEngine;
+ private $viewer;
public function setRange($start, $end) {
$this->rangeStart = $start;
@@ -149,6 +150,15 @@
return $this->offsetMode;
}
+ public function setViewer(PhabricatorUser $viewer) {
+ $this->viewer = $viewer;
+ return $this;
+ }
+
+ public function getViewer() {
+ return $this->viewer;
+ }
+
public static function getDefaultRendererForViewer(PhabricatorUser $viewer) {
$is_unified = $viewer->compareUserSetting(
PhabricatorUnifiedDiffsSetting::SETTINGKEY,
@@ -1003,6 +1013,11 @@
->setOldComments($old_comments)
->setNewComments($new_comments);
+ $engine_view = $this->newDocumentEngineChangesetView();
+ if ($engine_view !== null) {
+ return $engine_view;
+ }
+
switch ($this->changeset->getFileType()) {
case DifferentialChangeType::FILE_IMAGE:
$old = null;
@@ -1675,4 +1690,57 @@
return $prefix.$line;
}
+ private function newDocumentEngineChangesetView() {
+ $changeset = $this->changeset;
+ $viewer = $this->getViewer();
+
+ // TODO: This should probably be made non-optional in the future.
+ if (!$viewer) {
+ return null;
+ }
+
+ $old_data = $this->old;
+ $old_data = ipull($old_data, 'text');
+ $old_data = implode('', $old_data);
+
+ $new_data = $this->new;
+ $new_data = ipull($new_data, 'text');
+ $new_data = implode('', $new_data);
+
+ $old_ref = id(new PhabricatorDocumentRef())
+ ->setName($changeset->getOldFile())
+ ->setData($old_data);
+
+ $new_ref = id(new PhabricatorDocumentRef())
+ ->setName($changeset->getFilename())
+ ->setData($new_data);
+
+ $old_engines = PhabricatorDocumentEngine::getEnginesForRef(
+ $viewer,
+ $old_ref);
+
+ $new_engines = PhabricatorDocumentEngine::getEnginesForRef(
+ $viewer,
+ $new_ref);
+
+ $shared_engines = array_intersect_key($old_engines, $new_engines);
+
+ $document_engine = null;
+ foreach ($shared_engines as $shared_engine) {
+ if ($shared_engine->canDiffDocuments($old_ref, $new_ref)) {
+ $document_engine = $shared_engine;
+ break;
+ }
+ }
+
+
+ if ($document_engine) {
+ return $document_engine->newDiffView(
+ $old_ref,
+ $new_ref);
+ }
+
+ return null;
+ }
+
}
diff --git a/src/applications/files/document/PhabricatorDocumentEngine.php b/src/applications/files/document/PhabricatorDocumentEngine.php
--- a/src/applications/files/document/PhabricatorDocumentEngine.php
+++ b/src/applications/files/document/PhabricatorDocumentEngine.php
@@ -31,6 +31,18 @@
return $this->canRenderDocumentType($ref);
}
+ public function canDiffDocuments(
+ PhabricatorDocumentRef $uref,
+ PhabricatorDocumentRef $vref) {
+ return false;
+ }
+
+ public function newDiffView(
+ PhabricatorDocumentRef $uref,
+ PhabricatorDocumentRef $vref) {
+ throw new PhutilMethodNotImplementedException();
+ }
+
public function canConfigureEncoding(PhabricatorDocumentRef $ref) {
return false;
}
diff --git a/src/applications/files/document/PhabricatorDocumentRef.php b/src/applications/files/document/PhabricatorDocumentRef.php
--- a/src/applications/files/document/PhabricatorDocumentRef.php
+++ b/src/applications/files/document/PhabricatorDocumentRef.php
@@ -11,6 +11,7 @@
private $symbolMetadata = array();
private $blameURI;
private $coverage = array();
+ private $data;
public function setFile(PhabricatorFile $file) {
$this->file = $file;
@@ -65,6 +66,10 @@
return $this->byteLength;
}
+ if ($this->data !== null) {
+ return strlen($this->data);
+ }
+
if ($this->file) {
return (int)$this->file->getByteSize();
}
@@ -72,7 +77,26 @@
return null;
}
+ public function setData($data) {
+ $this->data = $data;
+ return $this;
+ }
+
public function loadData($begin = null, $end = null) {
+ if ($this->data !== null) {
+ $data = $this->data;
+
+ if ($begin !== null && $end !== null) {
+ $data = substr($data, $begin, $end - $begin);
+ } else if ($begin !== null) {
+ $data = substr($data, $begin);
+ } else if ($end !== null) {
+ $data = substr($data, 0, $end);
+ }
+
+ return $data;
+ }
+
if ($this->file) {
$iterator = $this->file->getFileDataIterator($begin, $end);

File Metadata

Mime Type
text/plain
Expires
Sun, Apr 6, 10:57 AM (2 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7710520
Default Alt Text
D20830.id.diff (5 KB)

Event Timeline