History

refactor

Sebastian Thiel committed 5 years ago

Commit 85c57811 parent 109c4e01 file · +39 −37Browse files

Showing the changes to git-diff/src (1 of 1 file). Show all

Unified · Split

git-diff/src/visit/changes.rs+39−37
@@ -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}
167fn 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
204fn catchup_lhs_with_rhs<R: visit::Record>(206fn catchup_lhs_with_rhs<R: visit::Record>(
205 lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>,207 lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>,