fn zombify_down<T: GraphMutTxnT>(
txn: &mut T,
channel: &mut T::Graph,
ws: &mut crate::missing_context::Workspace,
change_id: ChangeId,
inode: Position<Option<Hash>>,
flag: EdgeFlags,
unknown: &[(Vertex<ChangeId>, SerializedEdge)],
) -> Result<(), MissingError<T::GraphError>> {
for &(dest_vertex, edge) in unknown.iter() {
let p = *txn.find_block(channel, edge.dest())?;
ws.unknown_parents
.push((dest_vertex, p, inode, edge.flag()));
let fold = flag & EdgeFlags::FOLDER;
debug!("zombify p {:?}, dest_vertex {:?}", p, dest_vertex);
let mut u = dest_vertex;
let mut v = edge.dest();
while let Ok(&v_) = txn.find_block(channel, v) {
if v_ != u {
debug!("u = {:?}, v = {:?}", u, v);
put_graph_with_rev(
txn,
channel,
EdgeFlags::DELETED | EdgeFlags::BLOCK | fold,
u,
v_,
change_id,
)?;
u = v_;
v = v_.end_pos()
} else {
break;
}
}
}
Ok(())
}