MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / import_seed_alive_reaches

Function import_seed_alive_reaches

atomic-repository/src/repository/insert.rs:299–360  ·  view source on GitHub ↗
(
    txn: &T,
    inode: Inode,
    start: GraphNode<NodeId>,
    target: GraphNode<NodeId>,
    visible: &HashSet<NodeId>,
)

Source from the content-addressed store, hash-verified

297}
298
299fn import_seed_alive_reaches<T>(
300 txn: &T,
301 inode: Inode,
302 start: GraphNode<NodeId>,
303 target: GraphNode<NodeId>,
304 visible: &HashSet<NodeId>,
305) -> bool
306where
307 T: GraphTxnT + InodeGraphOps,
308{
309 if start == target {
310 return true;
311 }
312
313 let mut stack = vec![start];
314 let mut seen = HashSet::new();
315
316 while let Some(current) = stack.pop() {
317 if !seen.insert(current) {
318 continue;
319 }
320
321 let mut adj = match txn.init_inode_adj(inode, current, EdgeFlags::BLOCK, EdgeFlags::all()) {
322 Ok(adj) => adj,
323 Err(_) => continue,
324 };
325
326 while let Some(edge) = txn.next_inode_adj(&mut adj) {
327 let Ok(edge) = edge else {
328 continue;
329 };
330 let flags = edge.flag();
331 if flags.contains(EdgeFlags::PARENT)
332 || flags.contains(EdgeFlags::DELETED)
333 || flags.contains(EdgeFlags::PSEUDO)
334 || !import_seed_edge_visible(&edge, visible)
335 {
336 continue;
337 }
338
339 let Some(dest) = txn
340 .find_block_in_inode(inode, edge.dest())
341 .ok()
342 .flatten()
343 .or_else(|| txn.find_block(edge.dest()).ok())
344 else {
345 continue;
346 };
347 if !import_seed_node_visible(dest, visible)
348 || import_seed_is_dead(txn, inode, dest, visible)
349 {
350 continue;
351 }
352 if dest == target {
353 return true;
354 }
355 stack.push(dest);
356 }

Callers 1

Calls 12

import_seed_edge_visibleFunction · 0.85
import_seed_node_visibleFunction · 0.85
import_seed_is_deadFunction · 0.85
flagMethod · 0.80
insertMethod · 0.45
init_inode_adjMethod · 0.45
next_inode_adjMethod · 0.45
containsMethod · 0.45
find_block_in_inodeMethod · 0.45
destMethod · 0.45
find_blockMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected