cleaning up the deps and revdeps of unused changes after a channel drop

[?]
Apr 25, 2021, 8:52 AM
NGCTMCDPB45UDEXX3RMMQ4JXPILETG7EEFNKMLGP4SJJK52XPLOAC

Dependencies

  • [2] TZ42DX3B Properly dropping a channel
  • [*] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).

Change contents

  • edit in libpijul/src/pristine/sanakirja.rs at line 1897
    [2.1183]
    [2.1183]
    let mut unused_changes = Vec::new();
    'outer: for x in btree::rev_iter(&self.txn, &c, None)? {
    let (_, p) = x?;
    for chan in self.iter_channels("").map_err(|e| e.0)? {
    let (name, chan) = chan.map_err(|e| e.0)?;
    if name.as_str() == name0 {
    continue
    }
    let chan = chan.read().unwrap();
    if self.channel_has_state(&chan.states, &p.b).map_err(|e| e.0)?.is_some() {
    break 'outer
    }
    if self.get_changeset(&chan.changes, &p.a).map_err(|e| e.0)?.is_some() {
    continue 'outer
    }
    }
    unused_changes.push(p.a);
    }
    for ch in unused_changes.iter() {
    while btree::del(&mut self.txn, &mut self.dep, ch, None)? {}
    while btree::del(&mut self.txn, &mut self.revdep, ch, None)? {}
    }