Mercurial > hg
diff rust/hg-core/src/dirstate_tree/on_disk.rs @ 47336:8d0260d0dbc9
dirstate-v2: Make the dirstate bytes buffer available in more places
Differential Revision: https://phab.mercurial-scm.org/D10750
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Wed, 19 May 2021 13:15:00 +0200 |
parents | ed1583a845d2 |
children | 0654b3b3d2b5 |
line wrap: on
line diff
--- 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<u8>, ) -> Result<ChildNodes, DirstateError> { @@ -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::<u8>(node.full_path()?.as_bytes(), out); - let copy_source = if let Some(source) = node.copy_source()? { - write_slice::<u8>(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::<u8>(full_path.as_bytes(), out); + let copy_source = + if let Some(source) = node.copy_source(dirstate_map.on_disk)? { + write_slice::<u8>(source.as_bytes(), out) + } else { + Slice { + start: 0.into(), + len: 0.into(), + } + }; on_disk_nodes.push(match node { NodeRef::InMemory(path, node) => Node { children,