Fixing a bug in unrecord, and fixing the tests

[?]
Mar 3, 2021, 2:33 PM
X7OHUPL5VYT6ECER2KNGRNFLRX7SBZOM5QWSQ4PBO2UPIE7XM6MAC

Dependencies

  • [2] CD6XDYOH Fixing unrecord
  • [3] IIV3EL2X Cleanup, formatting, and fixing the Git feature
  • [4] JACZYXK4 Fixing a bug in unrecord
  • [5] YN63NUZO Sanakirja 1.0
  • [6] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [7] H23LO7U7 a few more clippy lints addressed
  • [8] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [9] VO5OQW4W Removing anyhow in libpijul
  • [10] 7FFFKQZU add 'Default' implementations
  • [11] 6YMDOZIB Refactoring apply
  • [12] GHO6DWPI Refactoring iterators
  • [13] I52XSRUH Massive cleanup, and simplification

Change contents

  • replacement in libpijul/src/working_copy/memory.rs at line 73
    [4.201154][4.201154:201212]()
    let file_meta = InodeMetadata::new(0o644, false);
    [4.201154]
    [4.201212]
    let file_meta = InodeMetadata::new(0, false);
  • replacement in libpijul/src/working_copy/memory.rs at line 86
    [4.201505][4.201505:201562]()
    let file_meta = InodeMetadata::new(0o755, true);
    [4.201505]
    [4.201562]
    let file_meta = InodeMetadata::new(0o100, true);
  • replacement in libpijul/src/working_copy/memory.rs at line 112
    [4.202385][4.202385:202448]()
    meta: InodeMetadata::new(0o755, true),
    [4.202385]
    [4.202448]
    meta: InodeMetadata::new(0o100, true),
  • replacement in libpijul/src/working_copy/memory.rs at line 215
    [4.205680][4.205680:205739]()
    meta: InodeMetadata::new(0o755, true),
    [4.205680]
    [4.205739]
    meta: InodeMetadata::new(0o100, true),
  • replacement in libpijul/src/working_copy/memory.rs at line 266
    [4.207623][4.207623:207696]()
    *meta = InodeMetadata::new(permissions as usize, false);
    [4.207623]
    [4.207696]
    *meta = InodeMetadata::new(permissions as usize & 0o100, false);
  • replacement in libpijul/src/working_copy/memory.rs at line 269
    [4.207771][4.207771:207843]()
    *meta = InodeMetadata::new(permissions as usize, true);
    [4.207771]
    [4.207843]
    *meta = InodeMetadata::new(permissions as usize & 0o100, true);
  • replacement in libpijul/src/working_copy/memory.rs at line 294
    [4.208599][4.208599:208663]()
    meta: InodeMetadata::new(0o644, false),
    [4.208599]
    [4.208663]
    meta: InodeMetadata::new(0, false),
  • edit in libpijul/src/unrecord/mod.rs at line 517
    [4.27202]
    [4.19248]
    debug!("repair_edges_context");
  • edit in libpijul/src/unrecord/mod.rs at line 535
    [4.3365]
    [4.27339]
    debug!("to = {:?}", to);
  • edit in libpijul/src/unrecord/mod.rs at line 537
    [4.27385]
    [4.248246]
    debug!("not alive");
  • edit in libpijul/src/unrecord/mod.rs at line 546
    [4.248439][2.0:62]()
    |h| changes.knows(&change_hash, &h).unwrap(),
  • replacement in libpijul/src/tests/performance.rs at line 54
    [4.6028][4.6028:6090]()
    let mut it = txn.iter_graph(&channel.graph).unwrap();
    [4.6028]
    [4.6090]
    let mut it = txn.iter_graph(&channel.graph, None).unwrap();
  • replacement in libpijul/src/tests/performance.rs at line 150
    [4.6638][4.6638:6700]()
    let mut it = txn.iter_graph(&channel.graph).unwrap();
    [4.6638]
    [4.6700]
    let mut it = txn.iter_graph(&channel.graph, None).unwrap();
  • replacement in libpijul/src/tests/performance.rs at line 163
    [4.6827][4.6827:6889]()
    let mut it = txn.iter_graph(&channel.graph).unwrap();
    [4.6827]
    [4.6889]
    let mut it = txn.iter_graph(&channel.graph, None).unwrap();
  • replacement in libpijul/src/tests/clone.rs at line 41
    [4.29764][4.442770:442810](),[4.442770][4.442770:442810]()
    channel_changes.push(i)
    [4.29764]
    [4.442810]
    channel_changes.push(i.into())
  • replacement in libpijul/src/tests/add_file.rs at line 309
    [4.463178][4.463178:463213]()
    assert_eq!(bob_perm.0, 0o644);
    [4.463178]
    [4.463213]
    assert_eq!(bob_perm.0, 0);
  • replacement in libpijul/src/tests/add_file.rs at line 323
    [4.463559][4.463559:463594]()
    assert_eq!(bob_perm.0, 0o755);
    [4.463559]
    [4.463594]
    assert_eq!(bob_perm.0, 0o100);
  • replacement in libpijul/src/tests/add_file.rs at line 325
    [4.463650][4.463650:463687]()
    assert_eq!(alice_perm.0, 0o755);
    [4.463650]
    [4.463687]
    assert_eq!(alice_perm.0, 0o100);
  • edit in libpijul/src/record.rs at line 11
    [4.489199]
    [4.11033]
    use std::collections::{HashMap, HashSet};
  • replacement in libpijul/src/missing_context.rs at line 154
    [4.26798][4.89553:89614]()
    pub(crate) fn repair_context_nondeleted<T: GraphMutTxnT, K>(
    [4.26798]
    [4.701965]
    pub(crate) fn repair_context_nondeleted<T: GraphMutTxnT>(
  • edit in libpijul/src/missing_context.rs at line 160
    [4.702096][4.702096:702114]()
    mut known: K,
  • replacement in libpijul/src/missing_context.rs at line 161
    [4.702145][4.89644:89689](),[4.26839][4.702176:702212](),[4.89689][4.702176:702212](),[4.702176][4.702176:702212]()
    ) -> Result<(), MissingError<T::GraphError>>
    where
    K: FnMut(Hash) -> bool,
    {
    [4.702145]
    [4.10700]
    ) -> Result<(), MissingError<T::GraphError>> {
  • replacement in libpijul/src/missing_context.rs at line 167
    [4.59073][4.89690:89764](),[4.123202][4.89690:89764](),[4.10983][4.89690:89764](),[4.89764][4.419:481](),[4.481][4.11056:11147](),[4.89764][4.11056:11147](),[4.11056][4.11056:11147](),[4.11147][4.704002:704008](),[4.704002][4.704002:704008](),[4.704008][4.11148:11149]()
    if deleted_by_unknown(txn, channel, source, change_id, &mut known)? {
    debug!("deleted by unknown, repairing {:?}", source);
    repair_missing_up_context(txn, channel, ws, change_id, inode, source, &[target])?;
    }
    [4.123202]
    [4.11149]
    repair_missing_up_context(txn, channel, ws, change_id, inode, source, &[target])?;
  • edit in libpijul/src/missing_context.rs at line 203
    [4.705747][4.12274:12277](),[4.12277][4.90224:90264](),[4.90264][4.12312:12325](),[4.12312][4.12312:12325](),[4.12325][4.90265:90289](),[4.90289][4.12351:12425](),[4.12351][4.12351:12425](),[4.12425][4.90290:90331](),[4.90331][4.12435:12511](),[4.12435][4.12435:12511](),[4.12511][4.90332:90411](),[4.90411][4.123435:123505](),[4.123505][4.12635:12667](),[4.12635][4.12635:12667](),[4.12667][3.17728:17856](),[3.17856][4.12762:12832](),[4.90508][4.12762:12832](),[4.123614][4.12762:12832](),[4.12762][4.12762:12832](),[4.12832][4.90509:90539](),[4.90539][4.12858:13049](),[4.12858][4.12858:13049](),[4.13049][4.90540:90567]()
    }
    fn deleted_by_unknown<T: GraphTxnT, K>(
    txn: &T,
    channel: &T::Graph,
    source: Vertex<ChangeId>,
    change_id: ChangeId,
    known: &mut K,
    ) -> Result<bool, TxnErr<T::GraphError>>
    where
    K: FnMut(Hash) -> bool,
    {
    let mut deleted_by_unknown = false;
    for v in iter_deleted_parents(txn, channel, source)? {
    let v = v?;
    if v.dest().change.is_root() || v.introduced_by().is_root() {
    continue;
    }
    if v.introduced_by() == change_id
    || known(txn.get_external(&v.introduced_by())?.unwrap().into())
    {
    // If a known change also delete the context, we're good.
    return Ok(false);
    } else {
    // If an unknown change deletes the context, wait: maybe a
    // known change will delete it too.
    deleted_by_unknown = true;
    }
    }
    Ok(deleted_by_unknown)
  • edit in libpijul/src/change.rs at line 1
    [4.831311]
    [4.831438]
    use crate::pristine::*;
    use chrono::{DateTime, Utc};
  • replacement in libpijul/src/apply.rs at line 994
    [4.24687][4.24687:24989]()
    repair_context_nondeleted(
    txn,
    channel,
    &mut ws.missing_context,
    n.inode,
    change_id,
    |h| change.knows(&h),
    e,
    )
    .map_err(LocalApplyError::from_missing)?
    [4.24687]
    [4.24989]
    repair_context_nondeleted(txn, channel, &mut ws.missing_context, n.inode, change_id, e)
    .map_err(LocalApplyError::from_missing)?