Skip to content

Commit a2ed29e

Browse files
committed
Implemented differentiation
With color and crosses!
1 parent 9eba84f commit a2ed29e

1 file changed

Lines changed: 48 additions & 34 deletions

File tree

src/components/commitlist.rs

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::utils::graphrow::{
22
SYM_BRANCH_DOWN, SYM_BRANCH_UP, SYM_BRANCH_UP_RIGHT, SYM_COMMIT,
33
SYM_COMMIT_BRANCH, SYM_COMMIT_MERGE, SYM_COMMIT_STASH,
4-
SYM_COMMIT_UNCOMMITTED, SYM_HORIZONTAL, SYM_MERGE_BRIDGE_END,
4+
SYM_COMMIT_UNCOMMITTED, SYM_CROSS, SYM_HORIZONTAL, SYM_MERGE_BRIDGE_END,
55
SYM_MERGE_BRIDGE_MID, SYM_MERGE_BRIDGE_START, SYM_SPACE,
66
SYM_VERTICAL, SYM_VERTICAL_DOTTED,
77
};
@@ -46,6 +46,15 @@ use std::{
4646
const ELEMENTS_PER_LINE: usize = 9;
4747
const SLICE_SIZE: usize = 1200;
4848

49+
const GRAPH_COLORS: &[Color] = &[
50+
Color::Blue,
51+
Color::Yellow,
52+
Color::Magenta,
53+
Color::Cyan,
54+
Color::Green,
55+
Color::Red,
56+
];
57+
4958
///
5059
pub struct CommitList {
5160
repo: RepoPathRef,
@@ -487,76 +496,80 @@ impl CommitList {
487496
) -> Vec<Span<'a>> {
488497
let mut spans = Vec::new();
489498

490-
let graph_color =
491-
self.theme.commit_hash(false).fg.unwrap_or(Color::Reset);
492-
493499
for (lane_index, conn) in row.lanes.iter().enumerate() {
494500
if empty_lanes.contains(&lane_index) {
495501
continue;
496502
}
497-
let (sym, color) = match conn {
503+
let (sym, graph_color) = match conn {
498504
None => (SYM_SPACE, Color::Reset),
499-
Some((ConnType::Vertical, _)) => {
500-
(SYM_VERTICAL, graph_color)
505+
Some((ConnType::Vertical, color_idx)) => {
506+
(SYM_VERTICAL, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
507+
}
508+
Some((ConnType::VerticalDotted, color_idx)) => {
509+
(SYM_VERTICAL_DOTTED, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
501510
}
502-
Some((ConnType::VerticalDotted, _)) => {
503-
(SYM_VERTICAL_DOTTED, graph_color)
511+
Some((ConnType::Cross, color_idx)) => {
512+
(SYM_CROSS, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
504513
}
505-
Some((ConnType::CommitNormal, _)) => {
506-
(SYM_COMMIT, graph_color)
514+
Some((ConnType::CommitNormal, color_idx)) => {
515+
(SYM_COMMIT, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
507516
}
508-
Some((ConnType::CommitBranch, _)) => {
509-
(SYM_COMMIT_BRANCH, graph_color)
517+
Some((ConnType::CommitBranch, color_idx)) => {
518+
(SYM_COMMIT_BRANCH, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
510519
}
511-
Some((ConnType::CommitMerge, _)) => {
512-
(SYM_COMMIT_MERGE, graph_color)
520+
Some((ConnType::CommitMerge, color_idx)) => {
521+
(SYM_COMMIT_MERGE, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
513522
}
514-
Some((ConnType::CommitStash, _)) => {
515-
(SYM_COMMIT_STASH, graph_color)
523+
Some((ConnType::CommitStash, color_idx)) => {
524+
(SYM_COMMIT_STASH, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
516525
}
517-
Some((ConnType::CommitUncommitted, _)) => {
518-
(SYM_COMMIT_UNCOMMITTED, graph_color)
526+
Some((ConnType::CommitUncommitted, color_idx)) => {
527+
(SYM_COMMIT_UNCOMMITTED, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
519528
}
520-
Some((ConnType::MergeBridgeStart, _)) => {
521-
(SYM_MERGE_BRIDGE_START, graph_color)
529+
Some((ConnType::MergeBridgeStart, color_idx)) => {
530+
(SYM_MERGE_BRIDGE_START, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
522531
}
523-
Some((ConnType::MergeBridgeMid, _)) => {
524-
(SYM_MERGE_BRIDGE_MID, graph_color)
532+
Some((ConnType::MergeBridgeMid, color_idx)) => {
533+
(SYM_MERGE_BRIDGE_MID, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
525534
}
526-
Some((ConnType::MergeBridgeEnd, _)) => {
527-
(SYM_MERGE_BRIDGE_END, graph_color)
535+
Some((ConnType::MergeBridgeEnd, color_idx)) => {
536+
(SYM_MERGE_BRIDGE_END, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
528537
}
529-
Some((ConnType::BranchDown, _)) => {
530-
(SYM_BRANCH_DOWN, graph_color)
538+
Some((ConnType::BranchDown, color_idx)) => {
539+
(SYM_BRANCH_DOWN, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
531540
}
532-
Some((ConnType::BranchUp, _)) => {
533-
(SYM_BRANCH_UP, graph_color)
541+
Some((ConnType::BranchUp, color_idx)) => {
542+
(SYM_BRANCH_UP, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
534543
}
535-
Some((ConnType::BranchUpRight, _)) => {
536-
(SYM_BRANCH_UP_RIGHT, graph_color)
544+
Some((ConnType::BranchUpRight, color_idx)) => {
545+
(SYM_BRANCH_UP_RIGHT, GRAPH_COLORS[color_idx % GRAPH_COLORS.len()])
537546
}
538547
};
539-
spans.push(Span::styled(sym, Style::default().fg(color)));
548+
spans.push(Span::styled(sym, Style::default().fg(graph_color)));
540549

541550
// Spacer
542551
let mut is_bridge_lane = false;
552+
let mut spacer_color = graph_color;
543553

544554
if let Some((from, to)) = row.merge_bridge {
545555
if lane_index >= from && lane_index < to {
546556
is_bridge_lane = true;
557+
spacer_color = GRAPH_COLORS[row.commit_lane % GRAPH_COLORS.len()];
547558
}
548559
}
549560

550561
for &(from, to) in &row.branches {
551562
if lane_index >= from && lane_index < to {
552563
is_bridge_lane = true;
564+
let branch_lane = if row.commit_lane == from { to } else { from };
565+
spacer_color = GRAPH_COLORS[branch_lane % GRAPH_COLORS.len()];
553566
}
554567
}
555568

556569
if is_bridge_lane {
557570
spans.push(Span::styled(
558571
SYM_HORIZONTAL,
559-
Style::default().fg(graph_color),
572+
Style::default().fg(spacer_color),
560573
));
561574
continue;
562575
}
@@ -1324,7 +1337,8 @@ mod tests {
13241337
let empty_lanes = std::collections::HashSet::new();
13251338
let spans = cl.build_graph_spans(&row, 1, &empty_lanes);
13261339

1327-
assert_eq!(spans.len(), 1);
1340+
assert_eq!(spans.len(), 2);
13281341
assert_eq!(spans[0].content, Cow::from(SYM_COMMIT));
1342+
assert_eq!(spans[1].content, Cow::from(SYM_SPACE));
13291343
}
13301344
}

0 commit comments

Comments
 (0)