mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-21 22:32:41 +01:00
Render the state tree in "arc branches" slightly more cleanly
Summary: Ref T13546. Try using unicode box drawing characters to render a more obvious tree struture in "arc branches". Unclear if this has enough support to use, but seems okay so far. Test Plan: Ran "arc branches", saw a nicer tree display. Maniphest Tasks: T13546 Differential Revision: https://secure.phabricator.com/D21390
This commit is contained in:
parent
01e91dc260
commit
a5480609f8
1 changed files with 81 additions and 27 deletions
|
@ -253,7 +253,6 @@ final class ArcanistCommitGraphSetView
|
||||||
|
|
||||||
private function drawMarkerCell(array $items) {
|
private function drawMarkerCell(array $items) {
|
||||||
$api = $this->getRepositoryAPI();
|
$api = $this->getRepositoryAPI();
|
||||||
$depth = $this->getViewDepth();
|
|
||||||
|
|
||||||
$marker_refs = $this->getMarkerRefs();
|
$marker_refs = $this->getMarkerRefs();
|
||||||
$commit_refs = $this->getCommitRefs();
|
$commit_refs = $this->getCommitRefs();
|
||||||
|
@ -276,54 +275,120 @@ final class ArcanistCommitGraphSetView
|
||||||
substr($max->getCommitHash(), 0, 7));
|
substr($max->getCommitHash(), 0, 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$member_views = $this->getMemberViews();
|
||||||
|
$member_count = count($member_views);
|
||||||
|
if ($member_count > 1) {
|
||||||
|
$items[] = array(
|
||||||
|
'group' => $member_views,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$terminal_width = phutil_console_get_terminal_width();
|
$terminal_width = phutil_console_get_terminal_width();
|
||||||
$max_depth = (int)floor(3 + (max(0, $terminal_width - 72) / 6));
|
$max_depth = (int)floor(3 + (max(0, $terminal_width - 72) / 6));
|
||||||
if ($depth <= $max_depth) {
|
|
||||||
$indent = str_repeat(' ', ($depth * 2));
|
|
||||||
} else {
|
|
||||||
$more = ' ... ';
|
|
||||||
$indent = str_repeat(' ', ($max_depth * 2) - strlen($more)).$more;
|
|
||||||
}
|
|
||||||
$indent .= '- ';
|
|
||||||
|
|
||||||
$empty_indent = str_repeat(' ', strlen($indent));
|
$depth = $this->getViewDepth();
|
||||||
|
|
||||||
|
if ($depth <= $max_depth) {
|
||||||
|
$display_depth = ($depth * 2);
|
||||||
|
$is_squished = false;
|
||||||
|
} else {
|
||||||
|
$display_depth = ($max_depth * 2);
|
||||||
|
$is_squished = true;
|
||||||
|
}
|
||||||
|
|
||||||
$max_width = ($max_depth * 2) + 16;
|
$max_width = ($max_depth * 2) + 16;
|
||||||
$available_width = $max_width - (min($max_depth, $depth) * 2);
|
$available_width = $max_width - $display_depth;
|
||||||
|
|
||||||
|
$mark_ne = "\xE2\x94\x97";
|
||||||
|
$mark_ew = "\xE2\x94\x81";
|
||||||
|
$mark_esw = "\xE2\x94\xB3";
|
||||||
|
$mark_sw = "\xE2\x94\x93";
|
||||||
|
$mark_bullet = "\xE2\x80\xA2";
|
||||||
|
$mark_ns_light = "\xE2\x94\x82";
|
||||||
|
$mark_ne_light = "\xE2\x94\x94";
|
||||||
|
$mark_esw_light = "\xE2\x94\xAF";
|
||||||
|
|
||||||
|
$has_children = $this->getChildViews();
|
||||||
|
|
||||||
$is_first = true;
|
$is_first = true;
|
||||||
|
$last_key = last_key($items);
|
||||||
$cell = array();
|
$cell = array();
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item_key => $item) {
|
||||||
$marker_ref = idx($item, 'marker');
|
$marker_ref = idx($item, 'marker');
|
||||||
|
$group_ref = idx($item, 'group');
|
||||||
|
|
||||||
|
$is_last = ($item_key === $last_key);
|
||||||
|
|
||||||
if ($marker_ref) {
|
if ($marker_ref) {
|
||||||
$marker_name = $marker_ref->getName();
|
$marker_name = $marker_ref->getName();
|
||||||
|
$is_active = $marker_ref->getIsActive();
|
||||||
|
|
||||||
|
if ($is_active) {
|
||||||
|
$marker_width = $available_width - 4;
|
||||||
|
} else {
|
||||||
|
$marker_width = $available_width;
|
||||||
|
}
|
||||||
|
|
||||||
$marker_name = id(new PhutilUTF8StringTruncator())
|
$marker_name = id(new PhutilUTF8StringTruncator())
|
||||||
->setMaximumGlyphs($available_width)
|
->setMaximumGlyphs($marker_width)
|
||||||
->truncateString($marker_name);
|
->truncateString($marker_name);
|
||||||
|
|
||||||
if ($marker_ref->getIsActive()) {
|
if ($marker_ref->getIsActive()) {
|
||||||
$label = tsprintf(
|
$label = tsprintf(
|
||||||
'<bg:green>**%s**</bg>',
|
'<bg:green>**%s**</bg> **%s**',
|
||||||
|
' * ',
|
||||||
$marker_name);
|
$marker_name);
|
||||||
} else {
|
} else {
|
||||||
$label = tsprintf(
|
$label = tsprintf(
|
||||||
'**%s**',
|
'**%s**',
|
||||||
$marker_name);
|
$marker_name);
|
||||||
}
|
}
|
||||||
|
} else if ($group_ref) {
|
||||||
|
$label = pht(
|
||||||
|
'(... %s more revisions ...)',
|
||||||
|
new PhutilNumber(count($group_ref) - 1));
|
||||||
} else if ($is_first) {
|
} else if ($is_first) {
|
||||||
$label = $commit_label;
|
$label = $commit_label;
|
||||||
} else {
|
} else {
|
||||||
$label = '';
|
$label = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($is_first) {
|
if ($display_depth > 2) {
|
||||||
$indent_text = $indent;
|
$indent = str_repeat(' ', $display_depth - 2);
|
||||||
} else {
|
} else {
|
||||||
$indent_text = $empty_indent;
|
$indent = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($is_first) {
|
||||||
|
if ($display_depth === 0) {
|
||||||
|
$path = $mark_bullet.' ';
|
||||||
|
} else {
|
||||||
|
if ($has_children) {
|
||||||
|
$path = $mark_ne.$mark_ew.$mark_esw.' ';
|
||||||
|
} else if (!$is_last) {
|
||||||
|
$path = $mark_ne.$mark_ew.$mark_esw_light.' ';
|
||||||
|
} else {
|
||||||
|
$path = $mark_ne.$mark_ew.$mark_ew.' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ($group_ref) {
|
||||||
|
$path = $mark_ne.'/'.$mark_sw.' ';
|
||||||
|
} else {
|
||||||
|
if ($is_last && !$has_children) {
|
||||||
|
$path = $mark_ne_light.' ';
|
||||||
|
} else {
|
||||||
|
$path = $mark_ns_light.' ';
|
||||||
|
}
|
||||||
|
if ($display_depth > 0) {
|
||||||
|
$path = ' '.$path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$indent_text = sprintf(
|
||||||
|
'%s%s',
|
||||||
|
$indent,
|
||||||
|
$path);
|
||||||
|
|
||||||
$cell[] = tsprintf(
|
$cell[] = tsprintf(
|
||||||
"%s%s\n",
|
"%s%s\n",
|
||||||
$indent_text,
|
$indent_text,
|
||||||
|
@ -332,17 +397,6 @@ final class ArcanistCommitGraphSetView
|
||||||
$is_first = false;
|
$is_first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$member_views = $this->getMemberViews();
|
|
||||||
$member_count = count($member_views);
|
|
||||||
if ($member_count > 1) {
|
|
||||||
$cell[] = tsprintf(
|
|
||||||
"%s%s\n",
|
|
||||||
$empty_indent,
|
|
||||||
pht(
|
|
||||||
'- <... %s more revisions ...>',
|
|
||||||
new PhutilNumber($member_count - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $cell;
|
return $cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue