mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 16:22:42 +01:00
When a commit graph set has many commits, summarize them
Summary: Ref T13546. In cases where a given set has a large number of commits, summarize them in the output. Test Plan: Ran "arc branches", saw long lists of commits (like the history of "stable" summarized). Maniphest Tasks: T13546 Differential Revision: https://secure.phabricator.com/D21366
This commit is contained in:
parent
0ad3222d59
commit
5d305909eb
1 changed files with 69 additions and 10 deletions
|
@ -169,41 +169,43 @@ final class ArcanistCommitGraphSetView
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$marker_layout = array();
|
$items = array();
|
||||||
foreach ($object_layout as $layout) {
|
foreach ($object_layout as $layout) {
|
||||||
$commit_ref = idx($layout, 'commit');
|
$commit_ref = idx($layout, 'commit');
|
||||||
if (!$commit_ref) {
|
if (!$commit_ref) {
|
||||||
$marker_layout[] = $layout;
|
$items[] = $layout;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$commit_hash = $commit_ref->getCommitHash();
|
$commit_hash = $commit_ref->getCommitHash();
|
||||||
$markers = idx($marker_refs, $commit_hash);
|
$markers = idx($marker_refs, $commit_hash);
|
||||||
if (!$markers) {
|
if (!$markers) {
|
||||||
$marker_layout[] = $layout;
|
$items[] = $layout;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$head_marker = array_shift($markers);
|
$head_marker = array_shift($markers);
|
||||||
$layout['marker'] = $head_marker;
|
$layout['marker'] = $head_marker;
|
||||||
$marker_layout[] = $layout;
|
$items[] = $layout;
|
||||||
|
|
||||||
if (!$markers) {
|
if (!$markers) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($markers as $marker) {
|
foreach ($markers as $marker) {
|
||||||
$marker_layout[] = array(
|
$items[] = array(
|
||||||
'marker' => $marker,
|
'marker' => $marker,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$marker_view = $this->drawMarkerCell($marker_layout);
|
$items = $this->collapseItems($items);
|
||||||
$commits_view = $this->drawCommitsCell($marker_layout);
|
|
||||||
$status_view = $this->drawStatusCell($marker_layout);
|
$marker_view = $this->drawMarkerCell($items);
|
||||||
$revisions_view = $this->drawRevisionsCell($marker_layout);
|
$commits_view = $this->drawCommitsCell($items);
|
||||||
$messages_view = $this->drawMessagesCell($marker_layout);
|
$status_view = $this->drawStatusCell($items);
|
||||||
|
$revisions_view = $this->drawRevisionsCell($items);
|
||||||
|
$messages_view = $this->drawMessagesCell($items);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
id(new ArcanistGridCell())
|
id(new ArcanistGridCell())
|
||||||
|
@ -311,6 +313,12 @@ final class ArcanistCommitGraphSetView
|
||||||
private function drawCommitsCell(array $items) {
|
private function drawCommitsCell(array $items) {
|
||||||
$cell = array();
|
$cell = array();
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
|
$count = idx($item, 'collapseCount');
|
||||||
|
if ($count) {
|
||||||
|
$cell[] = tsprintf(" : \n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$commit_ref = idx($item, 'commit');
|
$commit_ref = idx($item, 'commit');
|
||||||
if (!$commit_ref) {
|
if (!$commit_ref) {
|
||||||
$cell[] = tsprintf("\n");
|
$cell[] = tsprintf("\n");
|
||||||
|
@ -361,6 +369,16 @@ final class ArcanistCommitGraphSetView
|
||||||
$cell = array();
|
$cell = array();
|
||||||
|
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
|
$count = idx($item, 'collapseCount');
|
||||||
|
if ($count) {
|
||||||
|
$cell[] = tsprintf(
|
||||||
|
"%s\n",
|
||||||
|
pht(
|
||||||
|
'<... %s more commits ...>',
|
||||||
|
new PhutilNumber($count)));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$revision_ref = idx($item, 'revision');
|
$revision_ref = idx($item, 'revision');
|
||||||
if ($revision_ref) {
|
if ($revision_ref) {
|
||||||
$cell[] = tsprintf("%s\n", $revision_ref->getName());
|
$cell[] = tsprintf("%s\n", $revision_ref->getName());
|
||||||
|
@ -415,5 +433,46 @@ final class ArcanistCommitGraphSetView
|
||||||
return tsprintf('%s', $status);
|
return tsprintf('%s', $status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function collapseItems(array $items) {
|
||||||
|
$show_context = 3;
|
||||||
|
|
||||||
|
$map = array();
|
||||||
|
foreach ($items as $key => $item) {
|
||||||
|
$can_collapse =
|
||||||
|
(isset($item['commit'])) &&
|
||||||
|
(!isset($item['revision'])) &&
|
||||||
|
(!isset($item['marker']));
|
||||||
|
$map[$key] = $can_collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
$map = phutil_partition($map);
|
||||||
|
foreach ($map as $partition) {
|
||||||
|
$value = head($partition);
|
||||||
|
|
||||||
|
if (!$value) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = count($partition);
|
||||||
|
if ($count < ($show_context * 2) + 3) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$partition = array_slice($partition, $show_context, -$show_context, true);
|
||||||
|
|
||||||
|
$is_first = true;
|
||||||
|
foreach ($partition as $key => $value) {
|
||||||
|
if ($is_first) {
|
||||||
|
$items[$key]['collapseCount'] = $count;
|
||||||
|
} else {
|
||||||
|
unset($items[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_first = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue