Showing the changes to git-diff/src (1 of 1 file). Show all
Unified · Split
| @@ -91,43 +91,7 @@ impl<'a> visit::Changes<'a> { · 90 unmodified lines | ||
| 91 | 91 | match lhs.filename.cmp(rhs.filename) { |
| 92 | 92 | Equal => handle_lhs_and_rhs_with_equal_filenames(lhs, rhs, &mut state.trees, delegate)?, |
| 93 | 93 | Less => catchup_lhs_with_rhs(&mut lhs_entries, lhs, rhs, &mut state.trees, delegate)?, |
| 94 | − Greater => { | |
| 95 | − add_entry_schedule_recursion(rhs, &mut state.trees, delegate)?; | |
| 96 | − 'inner_greater: loop { | |
| 97 | − match rhs_entries.peek() { | |
| 98 | − Some(Ok(rhs)) => match lhs.filename.cmp(rhs.filename) { | |
| 99 | − Equal => { | |
| 100 | − let rhs = | |
| 101 | − rhs_entries.next().transpose()?.expect("the peeked item tobe present"); | |
| 102 | − handle_lhs_and_rhs_with_equal_filenames( | |
| 103 | − lhs, | |
| 104 | − rhs, | |
| 105 | − &mut state.trees, | |
| 106 | − delegate, | |
| 107 | − )?; | |
| 108 | − break 'inner_greater; | |
| 109 | − } | |
| 110 | − Greater => { | |
| 111 | − let rhs = | |
| 112 | − rhs_entries.next().transpose()?.expect("the peeked item tobe present"); | |
| 113 | − delegate.pop_path_component(); | |
| 114 | − add_entry_schedule_recursion(rhs, &mut state.trees, delegate)?; | |
| 115 | − } | |
| 116 | − Less => { | |
| 117 | − delegate.pop_path_component(); | |
| 118 | − delete_entry_schedule_recursion(lhs, &mut state.trees, delegate)?; | |
| 119 | − break 'inner_greater; | |
| 120 | − } | |
| 121 | − }, | |
| 122 | − Some(Err(err)) => return Err(Error::EntriesDecode(err.to_owned())), | |
| 123 | − None => { | |
| 124 | − delegate.pop_path_component(); | |
| 125 | − delete_entry_schedule_recursion(lhs, &mut state.trees, delegate)?; | |
| 126 | − break 'inner_greater; | |
| 127 | − } | |
| 128 | − } | |
| 129 | − } | |
| 130 | − } | |
| 94 | + Greater => catchup_rhs_with_lhs(&mut rhs_entries, lhs, rhs, &mut state.trees, delegate)?, | |
| 131 | 95 | } |
| 132 | 96 | } |
| 133 | 97 | (Some(lhs), None) => { |
| @@ -200,6 +164,44 @@ fn add_entry_schedule_recursion<R: visit::Record>( · 66 unmodified lines | ||
| 200 | 164 | } |
| 201 | 165 | Ok(()) |
| 202 | 166 | } |
| 167 | +fn catchup_rhs_with_lhs<R: visit::Record>( | |
| 168 | + rhs_entries: &mut IteratorType<immutable::TreeIter<'_>>, | |
| 169 | + lhs: immutable::tree::Entry<'_>, | |
| 170 | + rhs: immutable::tree::Entry<'_>, | |
| 171 | + queue: &mut VecDeque<TreeInfoPair<R::PathId>>, | |
| 172 | + delegate: &mut R, | |
| 173 | +) -> Result<(), Error> { | |
| 174 | + use std::cmp::Ordering::*; | |
| 175 | + add_entry_schedule_recursion(rhs, queue, delegate)?; | |
| 176 | + loop { | |
| 177 | + match rhs_entries.peek() { | |
| 178 | + Some(Ok(rhs)) => match lhs.filename.cmp(rhs.filename) { | |
| 179 | + Equal => { | |
| 180 | + let rhs = rhs_entries.next().transpose()?.expect("the peeked item tobe present"); | |
| 181 | + handle_lhs_and_rhs_with_equal_filenames(lhs, rhs, queue, delegate)?; | |
| 182 | + break; | |
| 183 | + } | |
| 184 | + Greater => { | |
| 185 | + let rhs = rhs_entries.next().transpose()?.expect("the peeked item tobe present"); | |
| 186 | + delegate.pop_path_component(); | |
| 187 | + add_entry_schedule_recursion(rhs, queue, delegate)?; | |
| 188 | + } | |
| 189 | + Less => { | |
| 190 | + delegate.pop_path_component(); | |
| 191 | + delete_entry_schedule_recursion(lhs, queue, delegate)?; | |
| 192 | + break; | |
| 193 | + } | |
| 194 | + }, | |
| 195 | + Some(Err(err)) => return Err(Error::EntriesDecode(err.to_owned())), | |
| 196 | + None => { | |
| 197 | + delegate.pop_path_component(); | |
| 198 | + delete_entry_schedule_recursion(lhs, queue, delegate)?; | |
| 199 | + break; | |
| 200 | + } | |
| 201 | + } | |
| 202 | + } | |
| 203 | + Ok(()) | |
| 204 | +} | |
| 203 | 205 | |
| 204 | 206 | fn catchup_lhs_with_rhs<R: visit::Record>( |
| 205 | 207 | lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>, |