(
ctx: &mut GlobalizeContext<'_, T>,
built: &BuiltHunk,
inode: Inode,
inode_pos: Position<NodeId>,
content: &[u8],
old_line_count: Option<usize>,
local: Local,
encoding
| 179 | /// caller (`globalize_hunk`) falls back to a whole-file Replace. |
| 180 | #[allow(clippy::too_many_arguments)] |
| 181 | fn globalize_insert<T>( |
| 182 | ctx: &mut GlobalizeContext<'_, T>, |
| 183 | built: &BuiltHunk, |
| 184 | inode: Inode, |
| 185 | inode_pos: Position<NodeId>, |
| 186 | content: &[u8], |
| 187 | old_line_count: Option<usize>, |
| 188 | local: Local, |
| 189 | encoding: Option<Encoding>, |
| 190 | ) -> GlobalizeResult<Vec<GraphOp<Option<Hash>>>> |
| 191 | where |
| 192 | T: GraphTxnT + TreeTxnT + InodeGraphOps, |
| 193 | { |
| 194 | let vertices = collect_sorted_content_vertices_cached(ctx, inode, inode_pos)?; |
| 195 | let position = classify_insert(&vertices, inode_pos, built.old_start, old_line_count)?; |
| 196 | |
| 197 | let (predecessors, successors) = match position { |
| 198 | InsertPosition::Prepend { first_content } => (vec![inode_pos], vec![first_content]), |
| 199 | InsertPosition::Append { last_content_end } => (vec![last_content_end], vec![]), |
| 200 | InsertPosition::Middle { |
| 201 | predecessor_end, |
| 202 | successor_start, |
| 203 | } => (vec![predecessor_end], vec![successor_start]), |
| 204 | }; |
| 205 | |
| 206 | if should_use_opaque_generated_vertices(&local.path) { |
| 207 | let insertion = |
| 208 | create_content_vertex(ctx, inode, inode_pos, predecessors, successors, content)?; |
| 209 | return Ok(vec![GraphOp::Edit { |
| 210 | change: Atom::Insertion(insertion), |
| 211 | local, |
| 212 | encoding, |
| 213 | }]); |
| 214 | } |
| 215 | |
| 216 | let insertions = |
| 217 | create_content_vertices_per_line(ctx, inode, inode_pos, predecessors, successors, content)?; |
| 218 | |
| 219 | let ops = insertions |
| 220 | .into_iter() |
| 221 | .map(|vertex| GraphOp::Edit { |
| 222 | change: Atom::Insertion(vertex), |
| 223 | local: local.clone(), |
| 224 | encoding, |
| 225 | }) |
| 226 | .collect(); |
| 227 | |
| 228 | Ok(ops) |
| 229 | } |
| 230 | |
| 231 | // ─────────────────────────────────────────────────────────────────────────── |
| 232 | // Replace: delete all old content, insert full new content |
no test coverage detected