diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php index 4fa9111eca..2f08f070de 100644 --- a/src/__celerity_resource_map__.php +++ b/src/__celerity_resource_map__.php @@ -136,7 +136,7 @@ celerity_register_resource_map(array( ), 'differential-changeset-view-css' => array( - 'uri' => '/res/f26ca6f9/rsrc/css/application/differential/changeset-view.css', + 'uri' => '/res/32a8bac6/rsrc/css/application/differential/changeset-view.css', 'type' => 'css', 'requires' => array( @@ -690,7 +690,7 @@ celerity_register_resource_map(array( 'uri' => '/res/pkg/6c786373/differential.pkg.js', 'type' => 'js', ), - '8d8a971a' => + '8e4ef51b' => array ( 'name' => 'differential.pkg.css', 'symbols' => @@ -704,7 +704,7 @@ celerity_register_resource_map(array( 6 => 'differential-revision-add-comment-css', 7 => 'differential-revision-comment-list-css', ), - 'uri' => '/res/pkg/8d8a971a/differential.pkg.css', + 'uri' => '/res/pkg/8e4ef51b/differential.pkg.css', 'type' => 'css', ), 'eadf6ec3' => @@ -728,14 +728,14 @@ celerity_register_resource_map(array( 'aphront-table-view-css' => '4270730a', 'aphront-tokenizer-control-css' => '4270730a', 'aphront-typeahead-control-css' => '4270730a', - 'differential-changeset-view-css' => '8d8a971a', - 'differential-core-view-css' => '8d8a971a', - 'differential-revision-add-comment-css' => '8d8a971a', - 'differential-revision-comment-css' => '8d8a971a', - 'differential-revision-comment-list-css' => '8d8a971a', - 'differential-revision-detail-css' => '8d8a971a', - 'differential-revision-history-css' => '8d8a971a', - 'differential-table-of-contents-css' => '8d8a971a', + 'differential-changeset-view-css' => '8e4ef51b', + 'differential-core-view-css' => '8e4ef51b', + 'differential-revision-add-comment-css' => '8e4ef51b', + 'differential-revision-comment-css' => '8e4ef51b', + 'differential-revision-comment-list-css' => '8e4ef51b', + 'differential-revision-detail-css' => '8e4ef51b', + 'differential-revision-history-css' => '8e4ef51b', + 'differential-table-of-contents-css' => '8e4ef51b', 'diffusion-commit-view-css' => 'eadf6ec3', 'javelin-behavior-differential-diff-radios' => '6c786373', 'javelin-behavior-differential-edit-inline-comments' => '6c786373', diff --git a/src/applications/differential/controller/changesetview/DifferentialChangesetViewController.php b/src/applications/differential/controller/changesetview/DifferentialChangesetViewController.php index 220c8c0d56..2f5cc7362a 100644 --- a/src/applications/differential/controller/changesetview/DifferentialChangesetViewController.php +++ b/src/applications/differential/controller/changesetview/DifferentialChangesetViewController.php @@ -33,6 +33,19 @@ class DifferentialChangesetViewController extends DifferentialController { return new Aphront404Response(); } + $view = $request->getStr('view'); + if ($view) { + $changeset->attachHunks($changeset->loadHunks()); + switch ($view) { + case 'new': + return $this->buildRawFileResponse($changeset->makeNewFile()); + case 'old': + return $this->buildRawFileResponse($changeset->makeOldFile()); + default: + return new Aphront400Response(); + } + } + if ($vs && ($vs != -1)) { $vs_changeset = id(new DifferentialChangeset())->load($vs); if (!$vs_changeset) { @@ -177,6 +190,26 @@ class DifferentialChangesetViewController extends DifferentialController { $detail = new DifferentialChangesetDetailView(); $detail->setChangeset($changeset); $detail->appendChild($output); + + if (!$vs) { + $detail->addButton( + phutil_render_tag( + 'a', + array( + 'href' => $request->getRequestURI()->alter('view', 'old'), + 'class' => 'grey button small', + ), + 'View Raw File (Old Version)')); + $detail->addButton( + phutil_render_tag( + 'a', + array( + 'href' => $request->getRequestURI()->alter('view', 'new'), + 'class' => 'grey button small', + ), + 'View Raw File (New Version)')); + } + $detail->setRevisionID($request->getInt('revision_id')); $output = @@ -202,5 +235,10 @@ class DifferentialChangesetViewController extends DifferentialController { $author_phid); } + private function buildRawFileResponse($text) { + return id(new AphrontFileResponse()) + ->setMimeType('text/plain') + ->setContent($text); + } } diff --git a/src/applications/differential/controller/changesetview/__init__.php b/src/applications/differential/controller/changesetview/__init__.php index 3c23c13098..e3d0b1b139 100644 --- a/src/applications/differential/controller/changesetview/__init__.php +++ b/src/applications/differential/controller/changesetview/__init__.php @@ -8,8 +8,10 @@ phutil_require_module('arcanist', 'parser/diff'); +phutil_require_module('phabricator', 'aphront/response/400'); phutil_require_module('phabricator', 'aphront/response/404'); phutil_require_module('phabricator', 'aphront/response/ajax'); +phutil_require_module('phabricator', 'aphront/response/file'); phutil_require_module('phabricator', 'applications/differential/controller/base'); phutil_require_module('phabricator', 'applications/differential/parser/changeset'); phutil_require_module('phabricator', 'applications/differential/parser/markup'); @@ -23,6 +25,7 @@ phutil_require_module('phabricator', 'infrastructure/javelin/api'); phutil_require_module('phutil', 'filesystem'); phutil_require_module('phutil', 'filesystem/tempfile'); phutil_require_module('phutil', 'future/exec'); +phutil_require_module('phutil', 'markup'); phutil_require_module('phutil', 'utils'); diff --git a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php index f47a4e4319..fd4e76de8f 100644 --- a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php @@ -179,6 +179,7 @@ class DifferentialRevisionViewController extends DifferentialController { $changeset_view = new DifferentialChangesetListView(); $changeset_view->setChangesets($visible_changesets); $changeset_view->setEditable(true); + $changeset_view->setStandaloneViews(true); $changeset_view->setRevision($revision); $changeset_view->setVsMap($vs_map); $changeset_view->setWhitespace($whitespace); diff --git a/src/applications/differential/view/changesetdetailview/DifferentialChangesetDetailView.php b/src/applications/differential/view/changesetdetailview/DifferentialChangesetDetailView.php index 9a2ca3517c..61135cc71e 100644 --- a/src/applications/differential/view/changesetdetailview/DifferentialChangesetDetailView.php +++ b/src/applications/differential/view/changesetdetailview/DifferentialChangesetDetailView.php @@ -53,6 +53,14 @@ class DifferentialChangesetDetailView extends AphrontView { $class .= ' differential-changeset-immutable'; } + $buttons = null; + if ($this->buttons) { + $buttons = + '
'; + } + $display_filename = $changeset->getDisplayFilename(); $output = javelin_render_tag( 'div', @@ -70,7 +78,7 @@ class DifferentialChangesetDetailView extends AphrontView { 'name' => $changeset->getAnchorName(), ), ''). - implode('', $this->buttons). + $buttons. '