summaryrefslogtreecommitdiffstats
path: root/src/features
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-11-29 10:37:35 -0500
committerDan Davison <dandavison7@gmail.com>2021-12-05 11:25:05 -0500
commit422954164f68b95fe9578ab1e0e1d1c80ca9345e (patch)
tree2b766093a5d57d683192da7e0cb4125375beae37 /src/features
parentf73f0a8cbd8f66340817ab8b143f5a4459380647 (diff)
Handle combined diff format
With this commit combined diff format (https://git-scm.com/docs/git-diff#_combined_diff_format) is handled appropriately. However, there is no special handling of merge conflict markers. Fixes #189, #736
Diffstat (limited to 'src/features')
-rw-r--r--src/features/line_numbers.rs6
-rw-r--r--src/features/side_by_side.rs16
2 files changed, 11 insertions, 11 deletions
diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs
index 0d366f8a..59218f75 100644
--- a/src/features/line_numbers.rs
+++ b/src/features/line_numbers.rs
@@ -76,18 +76,18 @@ pub fn linenumbers_and_styles<'a>(
config.line_numbers_style_minusplus[Plus],
);
let ((minus_number, plus_number), (minus_style, plus_style)) = match state {
- State::HunkMinus(_) => {
+ State::HunkMinus(_, _) => {
line_numbers_data.line_number[Left] += increment as usize;
((Some(nr_left), None), (minus_style, plus_style))
}
State::HunkMinusWrapped => ((None, None), (minus_style, plus_style)),
- State::HunkZero => {
+ State::HunkZero(_) => {
line_numbers_data.line_number[Left] += increment as usize;
line_numbers_data.line_number[Right] += increment as usize;
((Some(nr_left), Some(nr_right)), (zero_style, zero_style))
}
State::HunkZeroWrapped => ((None, None), (zero_style, zero_style)),
- State::HunkPlus(_) => {
+ State::HunkPlus(_, _) => {
line_numbers_data.line_number[Right] += increment as usize;
((None, Some(nr_right)), (minus_style, plus_style))
}
diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs
index f4960d76..85b066cb 100644
--- a/src/features/side_by_side.rs
+++ b/src/features/side_by_side.rs
@@ -180,7 +180,7 @@ pub fn paint_minus_and_plus_lines_side_by_side(
&lines_have_homolog[Left],
match minus_line_index {
Some(i) => &line_states[Left][i],
- None => &State::HunkMinus(None),
+ None => &State::HunkMinus(None, None),
},
&mut Some(line_numbers_data),
bg_should_fill[Left],
@@ -201,7 +201,7 @@ pub fn paint_minus_and_plus_lines_side_by_side(
&lines_have_homolog[Right],
match plus_line_index {
Some(i) => &line_states[Right][i],
- None => &State::HunkPlus(None),
+ None => &State::HunkPlus(None, None),
},
&mut Some(line_numbers_data),
bg_should_fill[Right],
@@ -222,7 +222,7 @@ pub fn paint_zero_lines_side_by_side<'a>(
painted_prefix: Option<ansi_term::ANSIString>,
background_color_extends_to_terminal_width: BgShouldFill,
) {
- let states = vec![State::HunkZero];
+ let states = vec![State::HunkZero(None)];
let (states, syntax_style_sections, diff_style_sections) = wrap_zero_block(
config,
@@ -418,8 +418,8 @@ fn paint_minus_or_plus_panel_line<'a>(
)
} else {
let opposite_state = match state {
- State::HunkMinus(x) => State::HunkPlus(x.clone()),
- State::HunkPlus(x) => State::HunkMinus(x.clone()),
+ State::HunkMinus(_, s) => State::HunkPlus(None, s.clone()),
+ State::HunkPlus(_, s) => State::HunkMinus(None, s.clone()),
_ => unreachable!(),
};
(
@@ -470,17 +470,17 @@ fn pad_panel_line_to_width<'a>(
// to form the other half of the line, then don't emit the empty line marker.
if panel_line_is_empty && line_index.is_some() {
match state {
- State::HunkMinus(_) => Painter::mark_empty_line(
+ State::HunkMinus(_, _) => Painter::mark_empty_line(
&config.minus_empty_line_marker_style,
panel_line,
Some(" "),
),
- State::HunkPlus(_) => Painter::mark_empty_line(
+ State::HunkPlus(_, _) => Painter::mark_empty_line(
&config.plus_empty_line_marker_style,
panel_line,
Some(" "),
),
- State::HunkZero => {}
+ State::HunkZero(_) => {}
_ => unreachable!(),
};
};