Skip to content

Commit 2627df0

Browse files
committed
[tree-diff] another green test
1 parent 05e8e4a commit 2627df0

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

git-diff/src/visit/changes.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,32 @@ impl<'a> visit::Changes<'a> {
130130
Greater => {
131131
add_entry_schedule_recursion(rhs, &mut state.trees, delegate)?;
132132
'inner_greater: loop {
133-
match rhs_entries.next().transpose()? {
134-
Some(rhs) => {
135-
if lhs.filename == rhs.filename {
133+
match rhs_entries.peek() {
134+
Some(Ok(rhs)) => match lhs.filename.cmp(rhs.filename) {
135+
Equal => {
136+
let rhs =
137+
rhs_entries.next().transpose()?.expect("the peeked item tobe present");
136138
handle_lhs_and_rhs_with_equal_filenames(
137139
lhs,
138140
rhs,
139141
&mut state.trees,
140142
delegate,
141143
)?;
142144
break 'inner_greater;
143-
} else {
145+
}
146+
Greater => {
147+
let rhs =
148+
rhs_entries.next().transpose()?.expect("the peeked item tobe present");
144149
delegate.pop_path_component();
145150
add_entry_schedule_recursion(rhs, &mut state.trees, delegate)?;
146151
}
147-
}
152+
Less => {
153+
delegate.pop_path_component();
154+
delete_entry_schedule_recursion(lhs, &mut state.trees, delegate)?;
155+
break 'inner_greater;
156+
}
157+
},
158+
Some(Err(err)) => return Err(Error::EntriesDecode(err.to_owned())),
148159
None => {
149160
todo!("GREATER: catchup less: break inner depleted - it never caught up");
150161
// break 'inner;

git-diff/tests/fixtures/make_diff_repo.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,8 @@ touch g/aa
7979
git rm g/a
8080
git add g/aa
8181
git commit -qam 'rm g/a, add g/aa'
82+
83+
git rm ff
84+
touch f
85+
git add f
86+
git commit -qam 'rm /ff, add /f'

git-diff/tests/visit/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,23 @@ mod changes {
340340
":100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D g/a
341341
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A g/aa"
342342
);
343+
assert_eq!(
344+
diff_with_previous_commit_from(&db, &all_commits[18])?,
345+
vec![
346+
recorder::Change::Addition {
347+
entry_mode: EntryMode::Blob,
348+
oid: hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"),
349+
path: "f".into()
350+
},
351+
recorder::Change::Deletion {
352+
entry_mode: EntryMode::Blob,
353+
oid: hex_to_id("e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"),
354+
path: "ff".into()
355+
},
356+
],
357+
":100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 D f
358+
:000000 100644 0000000000000000000000000000000000000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 A ff"
359+
);
343360
Ok(())
344361
}
345362
}

0 commit comments

Comments
 (0)