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

Function import_seed_alive_reaches

atomic-repository/src/repository/insert.rs:298–359  ·  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

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

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