| @@ -52,26 +52,38 @@ impl<'a> visit::Changes<'a> { · 51 unmodified lines |
| 52 | use std::cmp::Ordering::*; | 52 | use std::cmp::Ordering::*; |
| 53 | match lhs.filename.cmp(rhs.filename) { | 53 | match lhs.filename.cmp(rhs.filename) { |
| 54 | Equal => { | 54 | Equal => { |
| | 55 | use tree::EntryMode::*; |
| 55 | if lhs.oid != rhs.oid || lhs.mode != rhs.mode { | 56 | if lhs.oid != rhs.oid || lhs.mode != rhs.mode { |
| 56 | delegate.update_path_component( | 57 | delegate.update_path_component( |
| 57 | PathComponent::new(lhs.filename, &mut path_id), | 58 | PathComponent::new(lhs.filename, &mut path_id), |
| 58 | PathComponentUpdateMode::Replace, | 59 | PathComponentUpdateMode::Replace, |
| 59 | ); | 60 | ); |
| 60 | if delegate | 61 | let record_result = if (lhs.mode.is_no_tree() && rhs.mode.is_tree()) |
| 61 | .record(Change::Modification { | 62 | || (rhs.mode.is_tree() && rhs.mode.is_no_tree()) |
| | 63 | { |
| | 64 | delegate.record(Change::Deletion { |
| | 65 | entry_mode: lhs.mode, |
| | 66 | oid: lhs.oid.to_owned(), |
| | 67 | path_id, |
| | 68 | }) |
| | 69 | } else { |
| | 70 | delegate.record(Change::Modification { |
| 62 | previous_entry_mode: lhs.mode, | 71 | previous_entry_mode: lhs.mode, |
| 63 | previous_oid: lhs.oid.to_owned(), | 72 | previous_oid: lhs.oid.to_owned(), |
| 64 | entry_mode: rhs.mode, | 73 | entry_mode: rhs.mode, |
| 65 | oid: rhs.oid.to_owned(), | 74 | oid: rhs.oid.to_owned(), |
| 66 | path_id, | 75 | path_id, |
| 67 | }) | 76 | }) |
| 68 | .cancelled() | 77 | }; |
| 69 | { | 78 | if record_result.cancelled() { |
| 70 | break Err(Error::Cancelled); | 79 | break Err(Error::Cancelled); |
| 71 | } | 80 | } |
| 72 | } | 81 | } |
| 73 | if lhs.mode == tree::EntryMode::Tree || rhs.mode == tree::EntryMode::Tree { | 82 | match (lhs.mode, rhs.mode) { |
| 74 | todo!("handle recursion") | 83 | (Tree, Tree) => todo!("recurse tree|tree"), |
| | 84 | (lhs, Tree) if !lhs.is_tree() => todo!("recurse non-tree|tree"), |
| | 85 | (Tree, rhs) if !rhs.is_tree() => todo!("recurse tree|non-tree"), |
| | 86 | _both_are_not_trees => {} |
| 75 | } | 87 | } |
| 76 | } | 88 | } |
| 77 | Less => todo!("entry compares less - catch up"), | 89 | Less => todo!("entry compares less - catch up"), |
| @@ -85,8 +97,8 @@ impl<'a> visit::Changes<'a> { · 7 unmodified lines |
| 85 | ); | 97 | ); |
| 86 | if delegate | 98 | if delegate |
| 87 | .record(Change::Deletion { | 99 | .record(Change::Deletion { |
| 88 | previous_entry_mode: lhs.mode, | 100 | entry_mode: lhs.mode, |
| 89 | previous_oid: lhs.oid.to_owned(), | 101 | oid: lhs.oid.to_owned(), |
| 90 | path_id, | 102 | path_id, |
| 91 | }) | 103 | }) |
| 92 | .cancelled() | 104 | .cancelled() |