diff -r ed1583a845d2 -r 8d0260d0dbc9 rust/hg-core/src/dirstate_tree/on_disk.rs --- a/rust/hg-core/src/dirstate_tree/on_disk.rs Wed May 19 13:15:00 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/on_disk.rs Wed May 19 13:15:00 2021 +0200 @@ -272,7 +272,8 @@ // actual offset for the root nodes. out.resize(header_len, 0_u8); - let root = write_nodes(dirstate_map.root.as_ref(), &mut out)?; + let root = + write_nodes(dirstate_map, dirstate_map.root.as_ref(), &mut out)?; let header = Header { marker: *V2_FORMAT_MARKER, @@ -288,6 +289,7 @@ } fn write_nodes( + dirstate_map: &DirstateMap, nodes: dirstate_map::ChildNodesRef, out: &mut Vec, ) -> Result { @@ -298,16 +300,19 @@ // First accumulate serialized nodes in a `Vec` let mut on_disk_nodes = Vec::with_capacity(nodes.len()); for node in nodes { - let children = write_nodes(node.children()?, out)?; - let full_path = write_slice::(node.full_path()?.as_bytes(), out); - let copy_source = if let Some(source) = node.copy_source()? { - write_slice::(source.as_bytes(), out) - } else { - Slice { - start: 0.into(), - len: 0.into(), - } - }; + let children = node.children(dirstate_map.on_disk)?; + let children = write_nodes(dirstate_map, children, out)?; + let full_path = node.full_path(dirstate_map.on_disk)?; + let full_path = write_slice::(full_path.as_bytes(), out); + let copy_source = + if let Some(source) = node.copy_source(dirstate_map.on_disk)? { + write_slice::(source.as_bytes(), out) + } else { + Slice { + start: 0.into(), + len: 0.into(), + } + }; on_disk_nodes.push(match node { NodeRef::InMemory(path, node) => Node { children,