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 | match lhs.filename.cmp(rhs.filename) { | 91 | match lhs.filename.cmp(rhs.filename) { |
| 92 | Equal => handle_lhs_and_rhs_with_equal_filenames(lhs, rhs, &mut state.trees, delegate)?, | 92 | Equal => handle_lhs_and_rhs_with_equal_filenames(lhs, rhs, &mut state.trees, delegate)?, |
| 93 | Less => catchup_lhs_with_rhs(&mut lhs_entries, lhs, rhs, &mut state.trees, delegate)?, | 93 | Less => catchup_lhs_with_rhs(&mut lhs_entries, lhs, rhs, &mut state.trees, delegate)?, |
| 94 | Greater => { | 94 | Greater => catchup_rhs_with_lhs(&mut rhs_entries, lhs, rhs, &mut state.trees, delegate)?, |
| 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 | } | ||
| 131 | } | 95 | } |
| 132 | } | 96 | } |
| 133 | (Some(lhs), None) => { | 97 | (Some(lhs), None) => { |
| @@ -200,6 +164,44 @@ fn add_entry_schedule_recursion<R: visit::Record>( · 66 unmodified lines | |||
| 200 | } | 164 | } |
| 201 | Ok(()) | 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 | fn catchup_lhs_with_rhs<R: visit::Record>( | 206 | fn catchup_lhs_with_rhs<R: visit::Record>( |
| 205 | lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>, | 207 | lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>, |