diff --git a/lib/src/tree_builder.rs b/lib/src/tree_builder.rs index a665a10fe..64a0ffe81 100644 --- a/lib/src/tree_builder.rs +++ b/lib/src/tree_builder.rs @@ -93,7 +93,11 @@ impl TreeBuilder { if let Some((parent, basename)) = dir.split() { let parent_tree = trees_to_write.get_mut(&parent).unwrap(); if tree.is_empty() { - parent_tree.remove(basename); + if let Some(TreeValue::Tree(_)) = parent_tree.value(basename) { + parent_tree.remove(basename); + } else { + // Entry would have been replaced with file (see above) + } } else { let tree_id = store.write_tree(&dir, &tree).unwrap(); parent_tree.set(basename.clone(), TreeValue::Tree(tree_id)); diff --git a/lib/tests/test_working_copy.rs b/lib/tests/test_working_copy.rs index cbc4f9d4e..53dd7f4b7 100644 --- a/lib/tests/test_working_copy.rs +++ b/lib/tests/test_working_copy.rs @@ -315,7 +315,7 @@ fn test_tree_builder_file_directory_transition(use_git: bool) { testutils::write_normal_file(&mut tree_builder, &parent_path, ""); let tree_id = tree_builder.write_tree(); check_out_tree(&tree_id); - // TODO: assert!(parent_path.to_fs_path(&workspace_root).is_file()); + assert!(parent_path.to_fs_path(&workspace_root).is_file()); assert!(!child_path.to_fs_path(&workspace_root).exists()); }