Skip to content

Commit c42d369

Browse files
authored
Use git2::DiffLineType enum instead of char values (#668)
closes #655
1 parent a3f7d18 commit c42d369

File tree

2 files changed

+34
-18
lines changed

2 files changed

+34
-18
lines changed

asyncgit/src/sync/diff.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@ pub enum DiffLineType {
2727
Delete,
2828
}
2929

30+
impl From<git2::DiffLineType> for DiffLineType {
31+
fn from(line_type: git2::DiffLineType) -> Self {
32+
match line_type {
33+
git2::DiffLineType::HunkHeader => Self::Header,
34+
git2::DiffLineType::DeleteEOFNL
35+
| git2::DiffLineType::Deletion => Self::Delete,
36+
git2::DiffLineType::AddEOFNL
37+
| git2::DiffLineType::Addition => Self::Add,
38+
_ => Self::None,
39+
}
40+
}
41+
}
42+
3043
impl Default for DiffLineType {
3144
fn default() -> Self {
3245
Self::None
@@ -237,18 +250,11 @@ fn raw_diff_to_file_diff<'a>(
237250
}
238251
}
239252

240-
let line_type = match line.origin() {
241-
'H' => DiffLineType::Header,
242-
'<' | '-' => DiffLineType::Delete,
243-
'>' | '+' => DiffLineType::Add,
244-
_ => DiffLineType::None,
245-
};
246-
247253
let diff_line = DiffLine {
248254
position: DiffLinePosition::from(&line),
249255
content: String::from_utf8_lossy(line.content())
250256
.to_string(),
251-
line_type,
257+
line_type: line.origin_value().into(),
252258
};
253259

254260
current_lines.push(diff_line);

asyncgit/src/sync/staging/mod.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use super::{
88
diff::DiffLinePosition, patches::HunkLines, utils::work_dir,
99
};
1010
use crate::error::Result;
11-
use git2::{DiffLine, Repository};
11+
use git2::{DiffLine, DiffLineType, Repository};
1212
use std::{
1313
collections::HashSet, convert::TryFrom, fs::File, io::Read,
1414
};
@@ -82,8 +82,16 @@ pub(crate) fn apply_selection(
8282
let mut new_content = NewFromOldContent::default();
8383
let lines = lines.iter().collect::<HashSet<_>>();
8484

85-
let char_added = if reverse { '-' } else { '+' };
86-
let char_deleted = if reverse { '+' } else { '-' };
85+
let added = if reverse {
86+
DiffLineType::Deletion
87+
} else {
88+
DiffLineType::Addition
89+
};
90+
let deleted = if reverse {
91+
DiffLineType::Addition
92+
} else {
93+
DiffLineType::Deletion
94+
};
8795

8896
let mut first_hunk_encountered = false;
8997
for hunk in hunks {
@@ -122,36 +130,38 @@ pub(crate) fn apply_selection(
122130
.trim()
123131
);
124132

125-
if hunk_line.origin() == '<'
126-
|| hunk_line.origin() == '>'
133+
if hunk_line.origin_value()
134+
== DiffLineType::DeleteEOFNL
135+
|| hunk_line.origin_value()
136+
== DiffLineType::AddEOFNL
127137
{
128138
break;
129139
}
130140

131141
if (is_staged && !selected_line)
132142
|| (!is_staged && selected_line)
133143
{
134-
if hunk_line.origin() == char_added {
144+
if hunk_line.origin_value() == added {
135145
new_content.add_from_hunk(hunk_line)?;
136146
if is_staged {
137147
new_content.skip_old_line();
138148
}
139-
} else if hunk_line.origin() == char_deleted {
149+
} else if hunk_line.origin_value() == deleted {
140150
if !is_staged {
141151
new_content.skip_old_line();
142152
}
143153
} else {
144154
new_content.add_old_line(old_lines);
145155
}
146156
} else {
147-
if hunk_line.origin() != char_added {
157+
if hunk_line.origin_value() != added {
148158
new_content.add_from_hunk(hunk_line)?;
149159
}
150160

151161
if (is_staged
152-
&& hunk_line.origin() != char_deleted)
162+
&& hunk_line.origin_value() != deleted)
153163
|| (!is_staged
154-
&& hunk_line.origin() != char_added)
164+
&& hunk_line.origin_value() != added)
155165
{
156166
new_content.skip_old_line();
157167
}

0 commit comments

Comments
 (0)