Zombify in both directions
Dependencies
- [2]
L4EZSH6BFixing zombie conflicts: known was computed on the wrong thing - [3]
I24UEJQLVarious post-fire fixes - [4]
PNJL5TPZVersion bump
Change contents
- edit in libpijul/src/apply/edge.rs at line 325
let mut unknown_children = Vec::new(); - edit in libpijul/src/apply/edge.rs at line 336
debug!("-> {:?}", v); - replacement in libpijul/src/apply/edge.rs at line 344[3.106112]→[3.106112:106225](∅→∅),[3.106225]→[2.723:804](∅→∅),[2.804]→[3.106308:106392](∅→∅),[3.106308]→[3.106308:106392](∅→∅)
if v.flag().contains(EdgeFlags::PARENT) {// Unwrap ok, since `v` is in the channel.let intro = txn.get_external(&v.dest().change)?.unwrap().into();if !known(&intro) {debug!("unknown: {:?}", v);// Unwrap ok, since `v` is in the channel.let intro = txn.get_external(&v.dest().change)?.unwrap().into();if !known(&intro) {debug!("unknown: {:?}", v);if v.flag().contains(EdgeFlags::PARENT) { - edit in libpijul/src/apply/edge.rs at line 350
} else {unknown_children.push((dest_vertex, *v)); - edit in libpijul/src/apply/edge.rs at line 353
} else {debug!("known {:?}", v); - edit in libpijul/src/apply/edge.rs at line 357
debug!("unknown parents {:?}", unknown_parents);debug!("unknown children {:?}", unknown_children); - edit in libpijul/src/apply/edge.rs at line 360
zombify_down(txn,channel,ws,change_id,inode,n.flag,&unknown_children,)?; - edit in libpijul/src/apply/edge.rs at line 435[3.108697]
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(())}