Fixing a panic when outputting zombie folders

pmeunier
Aug 3, 2021, 10:14 AM
H6JR7IAF5LHUDBRAQWAQLLNZR2ONBIXS5FJATAYCMJS7SYADCQLAC

Dependencies

  • [2] I24UEJQL Various post-fire fixes
  • [3] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [4] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [5] I52XSRUH Massive cleanup, and simplification
  • [6] YN63NUZO Sanakirja 1.0
  • [*] VO5OQW4W Removing anyhow in libpijul

Change contents

  • edit in libpijul/src/output/output.rs at line 517
    [8.22806]
    [2.82193]
    fn is_alive_or_zombie<T: GraphTxnT>(
    txn: &T,
    channel: &T::Graph,
    a: &Vertex<ChangeId>,
    ) -> Result<bool, TxnErr<T::GraphError>> {
    if a.is_root() {
    return Ok(true);
    }
    for e in iter_adjacent(
    txn,
    channel,
    *a,
    EdgeFlags::PARENT,
    EdgeFlags::all() - EdgeFlags::DELETED,
    )? {
    let e = e?;
    let zf = EdgeFlags::pseudof();
    if (e.flag() & zf != EdgeFlags::PSEUDO)
    && (e.flag().contains(EdgeFlags::BLOCK) || a.is_empty())
    {
    return Ok(true);
    }
    }
    Ok(false)
    }
  • replacement in libpijul/src/output/output.rs at line 566
    [3.684650][3.684650:684700](),[3.684700][3.121409:121484](),[3.84789][3.684773:684832](),[3.121484][3.684773:684832](),[3.684773][3.684773:684832](),[3.684832][3.121485:121565](),[3.56007][3.684909:685008](),[3.84869][3.684909:685008](),[3.121565][3.684909:685008](),[3.684909][3.684909:685008]()
    let is_dead = parent_is_dead || {
    if let Some(vertex) = txn.get_inodes(&inode_, None)? {
    vertex.change != pending_change_id
    && !is_alive(txn, channel, &vertex.inode_vertex())?
    } else {
    true
    }
    };
    [3.684650]
    [3.685008]
    let is_dead = parent_is_dead
    || (!id.basename.is_empty() && {
    if let Some(vertex) = txn.get_inodes(&inode_, None)? {
    vertex.change != pending_change_id
    && !is_alive_or_zombie(txn, channel, &vertex.inode_vertex())?
    } else {
    true
    }
    });