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
9191 match lhs.filename.cmp(rhs.filename) {
9292 Equal => handle_lhs_and_rhs_with_equal_filenames(lhs, rhs, &mut state.trees, delegate)?,
9393 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)?,
13195 }
13296 }
13397 (Some(lhs), None) => {
@@ -200,6 +164,44 @@ fn add_entry_schedule_recursion<R: visit::Record>( · 66 unmodified lines
200164 }
201165 Ok(())
202166 }
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+}
203205
204206 fn catchup_lhs_with_rhs<R: visit::Record>(
205207 lhs_entries: &mut IteratorType<immutable::TreeIter<'_>>,