Skip to content

Commit 0d0da52

Browse files
authored
Merge pull request #10491 from gitbutlerapp/kv-branch-55
Make the but status graph more sublte
2 parents 7fc7b0c + 8649239 commit 0d0da52

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

crates/but/src/status/mod.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ pub(crate) fn worktree(
9999
return Ok(());
100100
}
101101

102-
for (stack_id, (details, assignments)) in stack_details {
102+
let stack_details_len = stack_details.len();
103+
for (i, (stack_id, (details, assignments))) in stack_details.into_iter().enumerate() {
103104
let mut stack_mark = stack_id.and_then(|stack_id| {
104105
if crate::mark::stack_marked(ctx, stack_id).unwrap_or_default() {
105106
Some("◀ Marked ▶".red().bold())
@@ -117,18 +118,20 @@ pub(crate) fn worktree(
117118
verbose,
118119
&mut stack_mark,
119120
ctx,
121+
i == stack_details_len - 1,
122+
i == 0,
120123
)?;
121124
}
122125
println!(
123-
" ● {} (common base) [{}] {}",
126+
" ● {} (common base) [{}] {}",
124127
common_merge_base_data.common_merge_base.dimmed(),
125128
common_merge_base_data.target_name.green().bold(),
126129
common_merge_base_data.message
127130
);
128131
Ok(())
129132
}
130133

131-
fn print_assignments(assignments: &Vec<FileAssignment>, changes: &[TreeChange]) {
134+
fn print_assignments(assignments: &Vec<FileAssignment>, changes: &[TreeChange], dotted: bool) {
132135
for fa in assignments {
133136
let state = status_from_changes(changes, fa.path.clone());
134137
let path = match &state {
@@ -164,7 +167,11 @@ fn print_assignments(assignments: &Vec<FileAssignment>, changes: &[TreeChange])
164167
if !locks.is_empty() {
165168
locks = format!("🔒 {locks}");
166169
}
167-
println!("│ {id} {status} {path} {locks}");
170+
if dotted {
171+
println!("┊ {id} {status} {path} {locks}");
172+
} else {
173+
println!("│ {id} {status} {path} {locks}");
174+
}
168175
}
169176
}
170177

@@ -178,6 +185,8 @@ pub fn print_group(
178185
verbose: bool,
179186
stack_mark: &mut Option<ColoredString>,
180187
ctx: &mut CommandContext,
188+
last: bool,
189+
first: bool,
181190
) -> anyhow::Result<()> {
182191
if let Some(group) = &group {
183192
let mut first = true;
@@ -209,7 +218,7 @@ pub fn print_group(
209218
);
210219
*stack_mark = None; // Only show the stack mark for the first branch
211220
if first {
212-
print_assignments(&assignments, changes);
221+
print_assignments(&assignments, changes, false);
213222
}
214223
first = false;
215224
for commit in &branch.commits {
@@ -295,9 +304,16 @@ pub fn print_group(
295304
"Unassigned Changes".to_string().green().bold(),
296305
stack_mark.clone().unwrap_or_default()
297306
);
298-
print_assignments(&assignments, changes);
307+
print_assignments(&assignments, changes, true);
308+
}
309+
if !first {
310+
println!("╰╮");
299311
}
300-
println!("╰┄┄┄╮");
312+
if last {
313+
println!(" ┊");
314+
} else {
315+
println!(" ");
316+
};
301317
Ok(())
302318
}
303319

0 commit comments

Comments
 (0)