mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 23:02:42 +01:00
Improve displaying of very large commits
Summary: Behave like Differential. Also save one path ID query. Test Plan: Displayed very large commit, clicked in ToC, clicked on Load. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D3176
This commit is contained in:
parent
e8401e6d4f
commit
8ab1789329
5 changed files with 82 additions and 48 deletions
|
@ -1138,7 +1138,7 @@ celerity_register_resource_map(array(
|
|||
),
|
||||
'javelin-behavior-differential-populate' =>
|
||||
array(
|
||||
'uri' => '/res/cf4691f5/rsrc/js/application/differential/behavior-populate.js',
|
||||
'uri' => '/res/781dd9a5/rsrc/js/application/differential/behavior-populate.js',
|
||||
'type' => 'js',
|
||||
'requires' =>
|
||||
array(
|
||||
|
@ -2885,7 +2885,7 @@ celerity_register_resource_map(array(
|
|||
'uri' => '/res/pkg/96bc37d6/differential.pkg.css',
|
||||
'type' => 'css',
|
||||
),
|
||||
'df1fdda8' =>
|
||||
'6617163c' =>
|
||||
array(
|
||||
'name' => 'differential.pkg.js',
|
||||
'symbols' =>
|
||||
|
@ -2909,7 +2909,7 @@ celerity_register_resource_map(array(
|
|||
16 => 'javelin-behavior-differential-dropdown-menus',
|
||||
17 => 'javelin-behavior-buoyant',
|
||||
),
|
||||
'uri' => '/res/pkg/df1fdda8/differential.pkg.js',
|
||||
'uri' => '/res/pkg/6617163c/differential.pkg.js',
|
||||
'type' => 'js',
|
||||
),
|
||||
'c8ce2d88' =>
|
||||
|
@ -3017,7 +3017,7 @@ celerity_register_resource_map(array(
|
|||
'aphront-typeahead-control-css' => '8b65e80d',
|
||||
'differential-changeset-view-css' => '96bc37d6',
|
||||
'differential-core-view-css' => '96bc37d6',
|
||||
'differential-inline-comment-editor' => 'df1fdda8',
|
||||
'differential-inline-comment-editor' => '6617163c',
|
||||
'differential-local-commits-view-css' => '96bc37d6',
|
||||
'differential-results-table-css' => '96bc37d6',
|
||||
'differential-revision-add-comment-css' => '96bc37d6',
|
||||
|
@ -3030,21 +3030,21 @@ celerity_register_resource_map(array(
|
|||
'inline-comment-summary-css' => '96bc37d6',
|
||||
'javelin-behavior' => '6fb20113',
|
||||
'javelin-behavior-aphront-basic-tokenizer' => '97f65640',
|
||||
'javelin-behavior-aphront-drag-and-drop' => 'df1fdda8',
|
||||
'javelin-behavior-aphront-drag-and-drop-textarea' => 'df1fdda8',
|
||||
'javelin-behavior-aphront-drag-and-drop' => '6617163c',
|
||||
'javelin-behavior-aphront-drag-and-drop-textarea' => '6617163c',
|
||||
'javelin-behavior-aphront-form-disable-on-submit' => '971b021e',
|
||||
'javelin-behavior-audit-preview' => '5e68be89',
|
||||
'javelin-behavior-buoyant' => 'df1fdda8',
|
||||
'javelin-behavior-differential-accept-with-errors' => 'df1fdda8',
|
||||
'javelin-behavior-differential-add-reviewers-and-ccs' => 'df1fdda8',
|
||||
'javelin-behavior-differential-comment-jump' => 'df1fdda8',
|
||||
'javelin-behavior-differential-diff-radios' => 'df1fdda8',
|
||||
'javelin-behavior-differential-dropdown-menus' => 'df1fdda8',
|
||||
'javelin-behavior-differential-edit-inline-comments' => 'df1fdda8',
|
||||
'javelin-behavior-differential-feedback-preview' => 'df1fdda8',
|
||||
'javelin-behavior-differential-keyboard-navigation' => 'df1fdda8',
|
||||
'javelin-behavior-differential-populate' => 'df1fdda8',
|
||||
'javelin-behavior-differential-show-more' => 'df1fdda8',
|
||||
'javelin-behavior-buoyant' => '6617163c',
|
||||
'javelin-behavior-differential-accept-with-errors' => '6617163c',
|
||||
'javelin-behavior-differential-add-reviewers-and-ccs' => '6617163c',
|
||||
'javelin-behavior-differential-comment-jump' => '6617163c',
|
||||
'javelin-behavior-differential-diff-radios' => '6617163c',
|
||||
'javelin-behavior-differential-dropdown-menus' => '6617163c',
|
||||
'javelin-behavior-differential-edit-inline-comments' => '6617163c',
|
||||
'javelin-behavior-differential-feedback-preview' => '6617163c',
|
||||
'javelin-behavior-differential-keyboard-navigation' => '6617163c',
|
||||
'javelin-behavior-differential-populate' => '6617163c',
|
||||
'javelin-behavior-differential-show-more' => '6617163c',
|
||||
'javelin-behavior-diffusion-commit-graph' => '5e68be89',
|
||||
'javelin-behavior-diffusion-pull-lastmodified' => '5e68be89',
|
||||
'javelin-behavior-maniphest-batch-selector' => '7707de41',
|
||||
|
@ -3054,12 +3054,12 @@ celerity_register_resource_map(array(
|
|||
'javelin-behavior-maniphest-transaction-preview' => '7707de41',
|
||||
'javelin-behavior-phabricator-autofocus' => '971b021e',
|
||||
'javelin-behavior-phabricator-keyboard-shortcuts' => '971b021e',
|
||||
'javelin-behavior-phabricator-object-selector' => 'df1fdda8',
|
||||
'javelin-behavior-phabricator-object-selector' => '6617163c',
|
||||
'javelin-behavior-phabricator-oncopy' => '971b021e',
|
||||
'javelin-behavior-phabricator-tooltips' => '971b021e',
|
||||
'javelin-behavior-phabricator-watch-anchor' => '971b021e',
|
||||
'javelin-behavior-refresh-csrf' => '971b021e',
|
||||
'javelin-behavior-repository-crossreference' => 'df1fdda8',
|
||||
'javelin-behavior-repository-crossreference' => '6617163c',
|
||||
'javelin-behavior-workflow' => '971b021e',
|
||||
'javelin-dom' => '6fb20113',
|
||||
'javelin-event' => '6fb20113',
|
||||
|
@ -3085,7 +3085,7 @@ celerity_register_resource_map(array(
|
|||
'phabricator-core-buttons-css' => '8b65e80d',
|
||||
'phabricator-core-css' => '8b65e80d',
|
||||
'phabricator-directory-css' => '8b65e80d',
|
||||
'phabricator-drag-and-drop-file-upload' => 'df1fdda8',
|
||||
'phabricator-drag-and-drop-file-upload' => '6617163c',
|
||||
'phabricator-dropdown-menu' => '971b021e',
|
||||
'phabricator-flag-css' => '8b65e80d',
|
||||
'phabricator-jump-nav' => '8b65e80d',
|
||||
|
@ -3097,7 +3097,7 @@ celerity_register_resource_map(array(
|
|||
'phabricator-prefab' => '971b021e',
|
||||
'phabricator-project-tag-css' => '7839ae2d',
|
||||
'phabricator-remarkup-css' => '8b65e80d',
|
||||
'phabricator-shaped-request' => 'df1fdda8',
|
||||
'phabricator-shaped-request' => '6617163c',
|
||||
'phabricator-standard-page-view' => '8b65e80d',
|
||||
'phabricator-tooltip' => '971b021e',
|
||||
'phabricator-transaction-view-css' => '8b65e80d',
|
||||
|
|
|
@ -114,12 +114,6 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
|
||||
$content[] = $this->buildMergesTable($commit);
|
||||
|
||||
$original_changes_count = count($changes);
|
||||
if ($request->getStr('show_all') !== 'true' &&
|
||||
$original_changes_count > self::CHANGES_LIMIT) {
|
||||
$changes = array_slice($changes, 0, self::CHANGES_LIMIT);
|
||||
}
|
||||
|
||||
$owners_paths = array();
|
||||
if ($this->highlightedAudits) {
|
||||
$packages = id(new PhabricatorOwnersPackage())->loadAllWhere(
|
||||
|
@ -180,7 +174,7 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
$change_panel->setHeader("Changes (".number_format($count).")");
|
||||
$change_panel->setID('differential-review-toc');
|
||||
|
||||
if ($count !== $original_changes_count) {
|
||||
if ($count > self::CHANGES_LIMIT) {
|
||||
$show_all_button = phutil_render_tag(
|
||||
'a',
|
||||
array(
|
||||
|
@ -190,10 +184,9 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
phutil_escape_html('Show All Changes'));
|
||||
$warning_view = id(new AphrontErrorView())
|
||||
->setSeverity(AphrontErrorView::SEVERITY_WARNING)
|
||||
->setTitle(sprintf(
|
||||
"Showing only the first %d changes out of %s!",
|
||||
self::CHANGES_LIMIT,
|
||||
number_format($original_changes_count)));
|
||||
->setTitle('Very Large Commit')
|
||||
->appendChild(
|
||||
"<p>This commit is very large. Load each file individually.</p>");
|
||||
|
||||
$change_panel->appendChild($warning_view);
|
||||
$change_panel->addButton($show_all_button);
|
||||
|
@ -240,16 +233,31 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
// DifferentialChangeset. Make the objects ephemeral to make sure we don't
|
||||
// accidentally save them, and then set their ID to the appropriate ID for
|
||||
// this application (the path IDs).
|
||||
$pquery = new DiffusionPathIDQuery(mpull($changesets, 'getFilename'));
|
||||
$path_ids = $pquery->loadPathIDs();
|
||||
$path_ids = array_flip(mpull($changes, 'getPath'));
|
||||
foreach ($changesets as $changeset) {
|
||||
$changeset->makeEphemeral();
|
||||
$changeset->setID($path_ids[$changeset->getFilename()]);
|
||||
}
|
||||
|
||||
if ($count <= self::CHANGES_LIMIT) {
|
||||
$visible_changesets = $changesets;
|
||||
} else {
|
||||
$visible_changesets = array();
|
||||
$inlines = id(new PhabricatorAuditInlineComment())->loadAllWhere(
|
||||
'commitPHID = %s AND (auditCommentID IS NOT NULL OR authorPHID = %s)',
|
||||
$commit->getPHID(),
|
||||
$user->getPHID());
|
||||
$path_ids = mpull($inlines, null, 'getPathID');
|
||||
foreach ($changesets as $key => $changeset) {
|
||||
if (array_key_exists($changeset->getID(), $path_ids)) {
|
||||
$visible_changesets[$key] = $changeset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$change_list = new DifferentialChangesetListView();
|
||||
$change_list->setChangesets($changesets);
|
||||
$change_list->setVisibleChangesets($changesets);
|
||||
$change_list->setVisibleChangesets($visible_changesets);
|
||||
$change_list->setRenderingReferences($references);
|
||||
$change_list->setRenderURI('/diffusion/'.$callsign.'/diff/');
|
||||
$change_list->setRepository($repository);
|
||||
|
@ -266,6 +274,12 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
$change_list->setInlineCommentControllerURI(
|
||||
'/diffusion/inline/edit/'.phutil_escape_uri($commit->getPHID()).'/');
|
||||
|
||||
$change_references = array();
|
||||
foreach ($changesets as $key => $changeset) {
|
||||
$change_references[$changeset->getID()] = $references[$key];
|
||||
}
|
||||
$change_table->setRenderingReferences($change_references);
|
||||
|
||||
// TODO: This is pretty awkward, unify the CSS between Diffusion and
|
||||
// Differential better.
|
||||
require_celerity_resource('differential-core-view-css');
|
||||
|
|
|
@ -80,7 +80,8 @@ final class DiffusionPathChangeQuery {
|
|||
$change->setTargetPath(ltrim($raw_change['targetPathName'], '/'));
|
||||
$change->setTargetCommitIdentifier($raw_change['targetCommitIdentifier']);
|
||||
|
||||
$changes[] = $change;
|
||||
$id = $raw_change['pathID'];
|
||||
$changes[$id] = $change;
|
||||
}
|
||||
|
||||
// Deduce the away paths by examining all the changes.
|
||||
|
|
|
@ -20,6 +20,7 @@ final class DiffusionCommitChangeTableView extends DiffusionView {
|
|||
|
||||
private $pathChanges;
|
||||
private $ownersPaths = array();
|
||||
private $renderingReferences;
|
||||
|
||||
public function setPathChanges(array $path_changes) {
|
||||
assert_instances_of($path_changes, 'DiffusionPathChange');
|
||||
|
@ -33,6 +34,11 @@ final class DiffusionCommitChangeTableView extends DiffusionView {
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function setRenderingReferences(array $value) {
|
||||
$this->renderingReferences = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function render() {
|
||||
$rows = array();
|
||||
$rowc = array();
|
||||
|
@ -41,17 +47,22 @@ final class DiffusionCommitChangeTableView extends DiffusionView {
|
|||
|
||||
// TODO: Copy Away and Move Away are rendered junkily still.
|
||||
|
||||
foreach ($this->pathChanges as $change) {
|
||||
foreach ($this->pathChanges as $id => $change) {
|
||||
$path = $change->getPath();
|
||||
$hash = substr(md5($path), 0, 8);
|
||||
if ($change->getFileType() == DifferentialChangeType::FILE_DIRECTORY) {
|
||||
$path .= '/';
|
||||
}
|
||||
|
||||
$path_column = phutil_render_tag(
|
||||
$path_column = javelin_render_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#'.$hash,
|
||||
'meta' => array(
|
||||
'id' => 'diff-'.$hash,
|
||||
'ref' => $this->renderingReferences[$id],
|
||||
),
|
||||
'sigil' => 'differential-load',
|
||||
),
|
||||
phutil_escape_html($path));
|
||||
|
||||
|
|
|
@ -42,16 +42,24 @@ JX.behavior('differential-populate', function(config) {
|
|||
'differential-load',
|
||||
function(e) {
|
||||
var meta = e.getNodeData('differential-load');
|
||||
JX.DOM.setContent(
|
||||
JX.$(meta.id),
|
||||
JX.$H('<div class="differential-loading">Loading...</div>'));
|
||||
var data = {
|
||||
ref : meta.ref,
|
||||
whitespace : config.whitespace
|
||||
};
|
||||
new JX.Workflow(config.uri, data)
|
||||
.setHandler(JX.bind(null, onresponse, meta.id))
|
||||
.start();
|
||||
var diff;
|
||||
try {
|
||||
diff = JX.$(meta.id);
|
||||
} catch (e) {
|
||||
// Already loaded.
|
||||
}
|
||||
if (diff) {
|
||||
JX.DOM.setContent(
|
||||
diff,
|
||||
JX.$H('<div class="differential-loading">Loading...</div>'));
|
||||
var data = {
|
||||
ref : meta.ref,
|
||||
whitespace : config.whitespace
|
||||
};
|
||||
new JX.Workflow(config.uri, data)
|
||||
.setHandler(JX.bind(null, onresponse, meta.id))
|
||||
.start();
|
||||
}
|
||||
if (meta.kill) {
|
||||
e.kill();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue