Skip to content

Commit 21c7e37

Browse files
committed
Include header in diff lines
1 parent 25ec30e commit 21c7e37

File tree

1 file changed

+70
-69
lines changed

1 file changed

+70
-69
lines changed

asyncgit/src/sync/diff.rs

Lines changed: 70 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -230,77 +230,78 @@ impl ConsumeHunk for FileDiff {
230230
header: &str,
231231
hunk: &[u8],
232232
) -> std::io::Result<()> {
233-
let lines = hunk
234-
.lines()
235-
.scan(
236-
(before_hunk_start, after_hunk_start),
237-
|(old_lineno, new_lineno), line| {
238-
let (line_type, content, old_lineno, new_lineno) =
239-
match line {
240-
[b'+', rest @ ..] => {
241-
let result = (
242-
DiffLineType::Add,
243-
rest,
244-
None,
245-
Some(*new_lineno),
246-
);
247-
*new_lineno += 1;
248-
result
249-
}
250-
[b'-', rest @ ..] => {
251-
let result = (
252-
DiffLineType::Delete,
253-
rest,
254-
Some(*old_lineno),
255-
None,
256-
);
257-
*old_lineno += 1;
258-
result
259-
}
260-
[b' ', rest @ ..] => {
261-
let result = (
262-
DiffLineType::None,
263-
rest,
264-
Some(*old_lineno),
265-
Some(*new_lineno),
266-
);
267-
*old_lineno += 1;
268-
*new_lineno += 1;
269-
result
270-
}
271-
[b'@', ..] => (
272-
DiffLineType::Header,
273-
line,
233+
let non_header_lines = hunk.lines().scan(
234+
(before_hunk_start, after_hunk_start),
235+
|(old_lineno, new_lineno), line| {
236+
let (line_type, content, old_lineno, new_lineno) =
237+
match line {
238+
[b'+', rest @ ..] => {
239+
let result = (
240+
DiffLineType::Add,
241+
rest,
274242
None,
243+
Some(*new_lineno),
244+
);
245+
*new_lineno += 1;
246+
result
247+
}
248+
[b'-', rest @ ..] => {
249+
let result = (
250+
DiffLineType::Delete,
251+
rest,
252+
Some(*old_lineno),
275253
None,
276-
),
277-
_ => {
278-
// Empty lines or unknown prefixes are treated as context.
279-
let result = (
280-
DiffLineType::None,
281-
line,
282-
Some(*old_lineno),
283-
Some(*new_lineno),
284-
);
285-
*old_lineno += 1;
286-
*new_lineno += 1;
287-
result
288-
}
289-
};
290-
291-
Some(DiffLine {
292-
position: DiffLinePosition {
293-
old_lineno,
294-
new_lineno,
295-
},
296-
content: String::from_utf8_lossy(content)
297-
.trim_matches(is_newline)
298-
.into(),
299-
line_type,
300-
})
301-
},
302-
)
303-
.collect();
254+
);
255+
*old_lineno += 1;
256+
result
257+
}
258+
[b' ', rest @ ..] => {
259+
let result = (
260+
DiffLineType::None,
261+
rest,
262+
Some(*old_lineno),
263+
Some(*new_lineno),
264+
);
265+
*old_lineno += 1;
266+
*new_lineno += 1;
267+
result
268+
}
269+
_ => {
270+
// Empty lines or unknown prefixes are treated as context.
271+
let result = (
272+
DiffLineType::None,
273+
line,
274+
Some(*old_lineno),
275+
Some(*new_lineno),
276+
);
277+
*old_lineno += 1;
278+
*new_lineno += 1;
279+
result
280+
}
281+
};
282+
283+
Some(DiffLine {
284+
position: DiffLinePosition {
285+
old_lineno,
286+
new_lineno,
287+
},
288+
content: String::from_utf8_lossy(content)
289+
.trim_matches(is_newline)
290+
.into(),
291+
line_type,
292+
})
293+
},
294+
);
295+
296+
let mut lines = vec![DiffLine {
297+
content: header.to_string().into(),
298+
line_type: DiffLineType::Header,
299+
position: DiffLinePosition {
300+
old_lineno: None,
301+
new_lineno: None,
302+
},
303+
}];
304+
lines.extend(non_header_lines);
304305

305306
let hunk_header = HunkHeader {
306307
old_start: before_hunk_start,

0 commit comments

Comments
 (0)