Fixing "addition error" in `pijul git`

pmeunier
Jul 28, 2021, 5:58 PM
46XERN6R4LPZLWEPUBSTGCKPOBGMCMHPVUKRUC55OWLBVJCUVNUQC

Dependencies

  • [2] 2RXOCWUW Making libpijul deterministic (and getting rid of `rand`)
  • [3] 5SLOJYHG Fixing the Git feature
  • [4] R3H7D42U Debugging `pijul git`: proper error reporting
  • [5] OJZWJUF2 MUCH faster `pijul add -r`
  • [6] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).

Change contents

  • replacement in pijul/src/commands/git.rs at line 737
    [3.70][3.4495:4688](),[3.4688][2.1162:1173](),[2.1173][3.4688:4996](),[3.4688][3.4688:4996]()
    let result = working_copy.record_prefixes(
    txn.clone(),
    channel.clone(),
    changes,
    &mut state,
    repo_path.clone(),
    prefixes,
    num_cpus,
    0,
    );
    use libpijul::working_copy::filesystem::*;
    match result {
    Ok(_) => {}
    Err(Error::Add(AddError::Fs(FsError::NotFound(_)))) => {}
    Err(Error::Add(AddError::Fs(FsError::AlreadyInRepo(_)))) => {}
    Err(e) => {
    error!("While adding {:?}: {}", prefixes, e);
    [3.70]
    [3.549]
    for p in prefixes.iter() {
    use libpijul::working_copy::filesystem::*;
    match working_copy.record_prefix(
    txn.clone(),
    channel.clone(),
    changes,
    &mut state,
    repo_path.clone(),
    p,
    num_cpus,
    0,
    ) {
    Ok(_) => {}
    Err(Error::Add(AddError::Fs(FsError::NotFound(_)))) => {}
    Err(Error::Add(AddError::Fs(FsError::AlreadyInRepo(_)))) => {}
    Err(Error::Add(AddError::Io(e))) if e.kind() == std::io::ErrorKind::NotFound => {}
    Err(e) => {
    error!("While adding {:?}: {}", prefixes, e);
    }
    }
    }
    if prefixes.is_empty() {
    use libpijul::working_copy::filesystem::*;
    match working_copy.record_prefix(
    txn.clone(),
    channel.clone(),
    changes,
    &mut state,
    repo_path.clone(),
    Path::new(""),
    num_cpus,
    0,
    ) {
    Ok(_) => {}
    Err(Error::Add(AddError::Fs(FsError::NotFound(_)))) => {}
    Err(Error::Add(AddError::Fs(FsError::AlreadyInRepo(_)))) => {}
    Err(Error::Add(AddError::Io(e))) if e.kind() == std::io::ErrorKind::NotFound => {}
    Err(e) => {
    error!("While adding {:?}: {}", prefixes, e);
    }