rust/hg-core/src/dirstate_tree/dirstate_map.rs
changeset 48950 11c0411bf4e2
parent 48454 473af5cbc209
child 49005 12adf8c695ed
--- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs	Fri Mar 04 13:33:55 2022 +0100
+++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs	Tue Feb 08 15:51:52 2022 +0100
@@ -22,7 +22,7 @@
 use crate::DirstateParents;
 use crate::DirstateStatus;
 use crate::EntryState;
-use crate::FastHashMap;
+use crate::FastHashbrownMap as FastHashMap;
 use crate::PatternFileWarning;
 use crate::StatusError;
 use crate::StatusOptions;
@@ -585,13 +585,11 @@
             .next()
             .expect("expected at least one inclusive ancestor");
         loop {
-            // TODO: can we avoid allocating an owned key in cases where the
-            // map already contains that key, without introducing double
-            // lookup?
-            let child_node = child_nodes
+            let (_, child_node) = child_nodes
                 .make_mut(on_disk, unreachable_bytes)?
-                .entry(to_cow(ancestor_path))
-                .or_default();
+                .raw_entry_mut()
+                .from_key(ancestor_path.base_name())
+                .or_insert_with(|| (to_cow(ancestor_path), Node::default()));
             if let Some(next) = inclusive_ancestor_paths.next() {
                 each_ancestor(child_node);
                 ancestor_path = next;