@@ -8,7 +8,7 @@ use super::{
8
8
diff:: DiffLinePosition , patches:: HunkLines , utils:: work_dir,
9
9
} ;
10
10
use crate :: error:: Result ;
11
- use git2:: { DiffLine , Repository } ;
11
+ use git2:: { DiffLine , DiffLineType , Repository } ;
12
12
use std:: {
13
13
collections:: HashSet , convert:: TryFrom , fs:: File , io:: Read ,
14
14
} ;
@@ -82,8 +82,16 @@ pub(crate) fn apply_selection(
82
82
let mut new_content = NewFromOldContent :: default ( ) ;
83
83
let lines = lines. iter ( ) . collect :: < HashSet < _ > > ( ) ;
84
84
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
+ } ;
87
95
88
96
let mut first_hunk_encountered = false ;
89
97
for hunk in hunks {
@@ -122,36 +130,38 @@ pub(crate) fn apply_selection(
122
130
. trim( )
123
131
) ;
124
132
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
127
137
{
128
138
break ;
129
139
}
130
140
131
141
if ( is_staged && !selected_line)
132
142
|| ( !is_staged && selected_line)
133
143
{
134
- if hunk_line. origin ( ) == char_added {
144
+ if hunk_line. origin_value ( ) == added {
135
145
new_content. add_from_hunk ( hunk_line) ?;
136
146
if is_staged {
137
147
new_content. skip_old_line ( ) ;
138
148
}
139
- } else if hunk_line. origin ( ) == char_deleted {
149
+ } else if hunk_line. origin_value ( ) == deleted {
140
150
if !is_staged {
141
151
new_content. skip_old_line ( ) ;
142
152
}
143
153
} else {
144
154
new_content. add_old_line ( old_lines) ;
145
155
}
146
156
} else {
147
- if hunk_line. origin ( ) != char_added {
157
+ if hunk_line. origin_value ( ) != added {
148
158
new_content. add_from_hunk ( hunk_line) ?;
149
159
}
150
160
151
161
if ( is_staged
152
- && hunk_line. origin ( ) != char_deleted )
162
+ && hunk_line. origin_value ( ) != deleted )
153
163
|| ( !is_staged
154
- && hunk_line. origin ( ) != char_added )
164
+ && hunk_line. origin_value ( ) != added )
155
165
{
156
166
new_content. skip_old_line ( ) ;
157
167
}
0 commit comments