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

Method iter_inode_vertices

atomic-core/src/pristine/txn/read.rs:520–559  ·  view source on GitHub ↗
(
        &self,
        inode: Inode,
    )

Source from the content-addressed store, hash-verified

518 }
519
520 fn iter_inode_vertices(
521 &self,
522 inode: Inode,
523 ) -> PristineResult<
524 Box<
525 dyn Iterator<Item = Result<(GraphNode<NodeId>, SerializedGraphEdge), PristineError>>
526 + '_,
527 >,
528 > {
529 let table = self.txn.open_multimap_table(INODE_GRAPH)?;
530
531 let inode_id = inode.get();
532 let start_key = encode_inode_vertex(inode_id, 0, 0, 0);
533 let end_key = encode_inode_vertex(inode_id, u64::MAX, u64::MAX, u64::MAX);
534
535 // Collect to avoid lifetime issues
536 let mut results = Vec::new();
537 for result in table.range::<&[u8; 32]>(&start_key..=&end_key)? {
538 match result {
539 Ok((key, values)) => {
540 let (_, change_id, start, end) = decode_inode_vertex(key.value());
541 let node = GraphNode {
542 change: NodeId::new(change_id),
543 start: ChangePosition::new(start),
544 end: ChangePosition::new(end),
545 };
546
547 for v in values.filter_map(|r| r.ok()) {
548 let edge = deserialize_edge(v.value());
549 results.push(Ok((node, edge)));
550 }
551 }
552 Err(e) => {
553 results.push(Err(PristineError::Storage(Box::new(e))));
554 }
555 }
556 }
557
558 Ok(Box::new(results.into_iter()))
559 }
560
561 fn get_file_index(&self, path: &str) -> PristineResult<Option<FileIndexMetadata>> {
562 let table = self.txn.open_table(FILE_INDEX)?;

Callers

nothing calls this directly

Calls 6

encode_inode_vertexFunction · 0.85
decode_inode_vertexFunction · 0.85
deserialize_edgeFunction · 0.70
getMethod · 0.65
pushMethod · 0.45
into_iterMethod · 0.45

Tested by

no test coverage detected