Fixing the Git feature

[?]
Apr 24, 2021, 6:22 AM
5SLOJYHGPMZVCOE3IS7ICNMJJYX3RBT6CDG5MAV6T4CJIOW7YZ6QC

Dependencies

  • [2] L2LPPKD4 Fixing the Git feature
  • [3] XSRTXUAS Pull: show progress bar when applying
  • [4] 3AZB5NUO Fixing the Git feature
  • [5] I24UEJQL Various post-fire fixes
  • [6] VO5OQW4W Removing anyhow in libpijul
  • [7] A3DMBJJA Upgrading the `git` subcommand to the latest Sanakirja and Libpijul
  • [8] CVAT6LN3 Fixing git import, and adding more useful feedback (with `RUST_LOG="pijul=info"`)
  • [9] 76PCXGML Pushing to, and pulling from the local repository
  • [10] GNMZNKB4 Cursors cleanup
  • [11] GBLM3JLR Fix options of git subcommand
  • [12] 43AJ37IX Getting rid of edge validation, which does not work for zombie conflicts
  • [13] Q45QHPO4 Feedback on network stuff
  • [14] RHHNPMZI Fixing `pijul git`
  • [15] BJOZ25EU Deterministic Git import
  • [16] AXVPNZ2N commands/git: fix imports
  • [17] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [18] I7VL7VPZ Minor cleanup
  • [19] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [20] LGEJSLTY Fixing output (including its uses in reset and pull)
  • [21] Y6EVFMTA Don't output files if they aren't in the current channel
  • [22] 2D7P2VKJ Change completions (where the whole progress bar story started)
  • [23] YN63NUZO Sanakirja 1.0
  • [24] BNPSVXIC Friendlier progress bars
  • [25] L4JXJHWX pijul/*: reorganize imports and remove extern crate
  • [26] ZHABNS3S Canonicalize all paths
  • [27] 6RVT5X4L Current state: return zero instead of an Option if there is no change on the channel
  • [28] ZZXBHCN3 fixing the protocol
  • [29] BXD3IQYN Fixing --features git
  • [30] 7PM25EXL Recursive apply was written a little too fast…
  • [31] I52XSRUH Massive cleanup, and simplification
  • [32] R3H7D42U Debugging `pijul git`: proper error reporting
  • [33] JL4WKA5P Implement the Sanakirja concurrency model in a cross-process way
  • [34] ZBNKSYA6 Fixing a bus error when starting a transaction on a full disk
  • [35] B3QWIGDE Fixing the Git features with the latest Pijul (+ conflicts in Cargo.toml)
  • [36] IIV3EL2X Cleanup, formatting, and fixing the Git feature
  • [37] NHO3QO3W Return a clean error instead of a panic when the channel for a commit is not found in `pijul git`
  • [38] OJZWJUF2 MUCH faster `pijul add -r`
  • [*] 44BN7FWS Do not output files introduced by patches that were not applied during a push

Change contents

  • replacement in pijul/src/remote/mod.rs at line 451
    [6.3600][6.7658:7732](),[6.1048][6.7658:7732]()
    txn.apply_change_ws(&repo.changes, channel, h, &mut ws)?;
    [6.3600]
    [6.3601]
    let mut channel = channel.write().unwrap();
    txn.apply_change_ws(&repo.changes, &mut channel, h, &mut ws)?;
  • replacement in pijul/src/remote/mod.rs at line 521
    [6.72806][6.1763:1872]()
    for hash in hashes.iter() {
    txn.apply_change_ws(&repo.changes, channel, hash, &mut ws)?;
    [6.72806]
    [6.72925]
    {
    let mut channel_ = channel.write().unwrap();
    for hash in hashes.iter() {
    txn.apply_change_ws(&repo.changes, &mut channel_, hash, &mut ws)?;
    }
  • replacement in pijul/src/remote/local.rs at line 176
    [6.3935][6.3935:3988]()
    channel: &mut libpijul::pristine::ChannelRef<T>,
    [6.3935]
    [6.3988]
    channel: &libpijul::pristine::ChannelRef<T>,
  • edit in pijul/src/remote/local.rs at line 180
    [6.4093]
    [6.4093]
    let mut channel = channel.write().unwrap();
  • replacement in pijul/src/remote/local.rs at line 182
    [6.4116][6.8910:8968]()
    txn.apply_change_ws(store, channel, c, &mut ws)?;
    [6.4116]
    [6.4175]
    txn.apply_change_ws(store, &mut *channel, c, &mut ws)?;
  • edit in pijul/src/commands/pushpull.rs at line 423
    [3.267]
    [40.155]
    let mut channel = channel.write().unwrap();
  • replacement in pijul/src/commands/protocol.rs at line 184
    [6.130373][6.130373:130437](),[6.130437][6.12632:12712]()
    let mut channel = load_channel(&txn, &cap[1])?;
    txn.apply_change_ws(&repo.changes, &mut channel, &h, &mut ws)?;
    [6.130373]
    [6.67]
    let channel = load_channel(&txn, &cap[1])?;
    {
    let mut channel_ = channel.write().unwrap();
    txn.apply_change_ws(&repo.changes, &mut channel_, &h, &mut ws)?;
    }
  • replacement in pijul/src/commands/git.rs at line 6
    [6.137436][6.2236:2237]()
    [6.137436]
    [6.0]
    use std::sync::{Arc, RwLock};
  • replacement in pijul/src/commands/git.rs at line 165
    [6.141594][6.141594:141615]()
    txn: &mut T,
    [6.141594]
    [6.141615]
    txn: Arc<RwLock<T>>,
  • edit in pijul/src/commands/git.rs at line 175
    [6.142007]
    [6.142007]
    let mut txn = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 263
    [6.1005][6.163:227](),[6.144337][6.163:227]()
    .changeid_reverse_log(&channel.borrow(), None)?
    [6.1005]
    [6.144396]
    .changeid_reverse_log(&*channel.read()?, None)?
  • edit in pijul/src/commands/git.rs at line 292
    [6.145374][4.52:115]()
    let mut txn = repo.repo.pristine.mut_txn_begin()?;
  • edit in pijul/src/commands/git.rs at line 293
    [6.145484]
    [6.145484]
    let txn = repo.repo.pristine.mut_txn_begin()?;
    let txn = Arc::new(RwLock::new(txn));
  • replacement in pijul/src/commands/git.rs at line 296
    [6.145536][6.145536:145617]()
    let mut channel = if let Some(parents) = dag.parents.get(&oid) {
    [6.145536]
    [6.145617]
    let channel = if let Some(parents) = dag.parents.get(&oid) {
  • edit in pijul/src/commands/git.rs at line 304
    [6.145980]
    [6.389]
    let mut txn = txn.write().unwrap();
  • edit in pijul/src/commands/git.rs at line 314
    [6.146349]
    [6.146349]
    let mut txn = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 323
    [6.146606][6.146606:146670]()
    &mut txn,
    &mut channel,
    [6.146606]
    [6.146670]
    txn.clone(),
    channel.clone(),
  • replacement in pijul/src/commands/git.rs at line 329
    [6.146777][6.146777:146874]()
    let state = import_commit(git, repo, &mut txn, &mut channel, &oid, &mut stats)?;
    [6.146777]
    [6.146874]
    let state = import_commit(git, repo, txn.clone(), channel.clone(), &oid, &mut stats)?;
  • replacement in pijul/src/commands/git.rs at line 331
    [6.146925][6.146925:146995]()
    dag.collect_dead_parents(&oid, &mut todo, &mut txn)?;
    [6.146925]
    [6.146995]
    dag.collect_dead_parents(&oid, &mut todo, txn.clone())?;
  • edit in pijul/src/commands/git.rs at line 344
    [6.147512]
    [6.147512]
    let txn = if let Ok(txn) = Arc::try_unwrap(txn) {
    txn.into_inner().unwrap()
    } else {
    unreachable!()
    };
  • replacement in pijul/src/commands/git.rs at line 377
    [6.148197][6.148197:148239]()
    txn: &T,
    channel: &ChannelRef<T>,
    [6.148197]
    [6.148239]
    txn: Arc<RwLock<T>>,
    channel: ChannelRef<T>,
  • edit in pijul/src/commands/git.rs at line 386
    [6.148491]
    [6.148491]
    let txn = txn.read().unwrap();
  • replacement in pijul/src/commands/git.rs at line 400
    [6.131][6.538:594](),[6.149112][6.538:594]()
    for x in txn.log(&p_channel.borrow(), 0)? {
    [6.131]
    [6.594]
    for x in txn.log(&*p_channel.read()?, 0)? {
  • replacement in pijul/src/commands/git.rs at line 423
    [6.149765][6.693:756]()
    fn import_commit_parents<T: TxnTExt + MutTxnTExt + GraphIter>(
    [6.149765]
    [6.149816]
    fn import_commit_parents<T: TxnTExt + MutTxnTExt + GraphIter + Send + Sync + 'static>(
  • replacement in pijul/src/commands/git.rs at line 426
    [6.149856][6.149856:149906]()
    txn: &mut T,
    channel: &mut ChannelRef<T>,
    [6.149856]
    [6.149906]
    txn: Arc<RwLock<T>>,
    channel: ChannelRef<T>,
  • replacement in pijul/src/commands/git.rs at line 433
    [6.150070][6.166:249]()
    let (needs_output, to_apply) = make_apply_plan(repo, txn, channel, dag, oid)?;
    [6.150070]
    [6.150152]
    let (needs_output, to_apply) = make_apply_plan(repo, txn.clone(), channel.clone(), dag, oid)?;
  • edit in pijul/src/commands/git.rs at line 438
    [6.150285]
    [6.150285]
    let mut txn_ = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 440
    [6.150321][2.0:72]()
    info!("applying {:?} to {:?}", h, txn.name(&channel.borrow()));
    [6.150321]
    [6.886]
    let mut channel_ = channel.write().unwrap();
    info!("applying {:?} to {:?}", h, txn_.name(&channel_));
  • replacement in pijul/src/commands/git.rs at line 443
    [6.887][6.1604:1670]()
    txn.apply_change_ws(&repo.repo.changes, channel, h, ws)?;
    [6.887]
    [6.150456]
    txn_.apply_change_ws(&repo.repo.changes, &mut channel_, h, ws)?;
  • replacement in pijul/src/commands/git.rs at line 445
    [6.150512][6.322:407]()
    check_alive_debug(&repo.repo.changes, txn, &channel.borrow(), line!())?;
    [6.150512]
    [6.150581]
    check_alive_debug(&repo.repo.changes, &*txn_, &channel_, line!())?;
  • replacement in pijul/src/commands/git.rs at line 449
    [6.150649][6.408:489]()
    check_alive_debug(&repo.repo.changes, txn, &channel.borrow(), line!())?;
    [6.150649]
    [6.150714]
    check_alive_debug(&repo.repo.changes, &*txn_, &*channel.read()?, line!())?;
  • replacement in pijul/src/commands/git.rs at line 459
    [6.151103][2.73:110]()
    txn.name(&channel.borrow()),
    [6.151103]
    [6.151135]
    txn_.name(&*channel.read()?),
  • edit in pijul/src/commands/git.rs at line 461
    [6.151142]
    [6.151142]
    std::mem::drop(txn_);
  • replacement in pijul/src/commands/git.rs at line 465
    [6.151291][6.151291:151374]()
    txn.output_repository_no_pending(
    &mut repo.repo.working_copy,
    [6.151291]
    [6.151374]
    libpijul::output::output_repository_no_pending(
    repo.repo.working_copy.clone(),
  • replacement in pijul/src/commands/git.rs at line 468
    [6.151406][6.151406:151427]()
    channel,
    [6.151406]
    [6.151427]
    txn.clone(),
    channel.clone(),
  • edit in pijul/src/commands/git.rs at line 473
    [2.129]
    [6.151462]
    num_cpus::get(),
  • replacement in pijul/src/commands/git.rs at line 477
    [6.151569][6.527:612]()
    check_alive_debug(&repo.repo.changes, txn, &channel.borrow(), line!())?;
    [6.151569]
    [6.151638]
    let txn = txn.read().unwrap();
    check_alive_debug(&repo.repo.changes, &*txn, &channel.read().unwrap(), line!())?;
  • replacement in pijul/src/commands/git.rs at line 485
    [6.151772][2.130:192]()
    check_tree_inodes(txn, txn.graph(&channel.borrow()));
    [6.151772]
    [6.151823]
    let txn = txn.read().unwrap();
    check_tree_inodes(&*txn, txn.graph(&*channel.read().unwrap()));
  • replacement in pijul/src/commands/git.rs at line 497
    [6.152048][6.152048:152098]()
    txn: &mut T,
    channel: &mut ChannelRef<T>,
    [6.152048]
    [6.152098]
    txn: Arc<RwLock<T>>,
    channel: ChannelRef<T>,
  • edit in pijul/src/commands/git.rs at line 550
    [6.153980]
    [6.153980]
    let mut txn = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 567
    [6.1756][6.1756:1857]()
    if let Some(old_path) = libpijul::fs::inode_filename(txn, *inode)? {
    [6.1756]
    [6.154875]
    if let Some(old_path) = libpijul::fs::inode_filename(&*txn, *inode)? {
  • replacement in pijul/src/commands/git.rs at line 632
    [6.157569][6.921:976]()
    fn import_commit<T: TxnTExt + MutTxnTExt + GraphIter>(
    [6.157569]
    [6.157612]
    fn import_commit<T: TxnTExt + MutTxnTExt + GraphIter + Send + Sync + 'static>(
  • replacement in pijul/src/commands/git.rs at line 635
    [6.157665][6.157665:157715]()
    txn: &mut T,
    channel: &mut ChannelRef<T>,
    [6.157665]
    [6.157715]
    txn: Arc<RwLock<T>>,
    channel: ChannelRef<T>,
  • replacement in pijul/src/commands/git.rs at line 640
    [6.3958][6.157818:157898](),[6.157818][6.157818:157898]()
    let (object, prefixes) = git_reset(git, repo, txn, channel, child, stats)?;
    [6.3958]
    [6.157898]
    let (object, prefixes) = git_reset(git, repo, txn.clone(), channel.clone(), child, stats)?;
    let mut txn_ = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 645
    [6.158004][6.158004:158068]()
    txn.add_dir(p.to_str().unwrap()).unwrap_or(());
    [6.158004]
    [6.158068]
    txn_.add_dir(p.to_str().unwrap()).unwrap_or(());
  • replacement in pijul/src/commands/git.rs at line 647
    [6.158089][6.158089:158154]()
    txn.add_file(p.to_str().unwrap()).unwrap_or(());
    [6.158089]
    [6.158154]
    txn_.add_file(p.to_str().unwrap()).unwrap_or(());
  • replacement in pijul/src/commands/git.rs at line 654
    [6.158287][2.193:263]()
    debug!("recording on channel {:?}", txn.name(&channel.borrow()));
    [6.158287]
    [6.158352]
    debug!("recording on channel {:?}", txn_.name(&channel.read().unwrap()));
  • edit in pijul/src/commands/git.rs at line 663
    [6.332]
    [6.158463]
    std::mem::drop(txn_);
  • replacement in pijul/src/commands/git.rs at line 665
    [6.158491][6.158491:158558]()
    txn,
    channel,
    &mut repo.repo.working_copy,
    [6.158491]
    [6.158558]
    txn.clone(),
    channel.clone(),
    repo.repo.working_copy.clone(),
  • edit in pijul/src/commands/git.rs at line 685
    [6.159191]
    [6.159191]
    let txn = txn.read().unwrap();
  • replacement in pijul/src/commands/git.rs at line 690
    [6.404][6.1047:1109]()
    return Ok(txn.current_state(&channel.borrow())?);
    [6.404]
    [6.474]
    return Ok(txn.current_state(&channel.read().unwrap())?);
  • replacement in pijul/src/commands/git.rs at line 697
    [6.159718][6.1110:1191]()
    check_alive_debug(&repo.repo.changes, txn, &channel.borrow(), line!())?;
    [6.159718]
    [6.159783]
    check_alive_debug(&repo.repo.changes, &*txn, &channel.read().unwrap(), line!())?;
  • replacement in pijul/src/commands/git.rs at line 705
    [6.159934][2.264:315]()
    cur.push_str(txn.name(&channel.borrow()));
    [6.159934]
    [6.159981]
    cur.push_str(txn.name(&channel.read().unwrap()));
  • replacement in pijul/src/commands/git.rs at line 707
    [6.159994][2.316:405]()
    repo.repo.config.current_channel = Some(txn.name(&channel.borrow()).to_string())
    [6.159994]
    [6.160079]
    repo.repo.config.current_channel = Some(txn.name(&channel.read().unwrap()).to_string())
  • replacement in pijul/src/commands/git.rs at line 712
    [6.160168][2.406:468]()
    check_tree_inodes(txn, txn.graph(&channel.borrow()));
    [6.160168]
    [6.160219]
    check_tree_inodes(&*txn, txn.graph(&channel.read().unwrap()));
  • replacement in pijul/src/commands/git.rs at line 718
    [6.160373][6.160373:160570]()
    fn record_apply<T: TxnT + TxnTExt + MutTxnTExt, C: libpijul::changestore::ChangeStore>(
    txn: &mut T,
    channel: &mut ChannelRef<T>,
    working_copy: &mut libpijul::working_copy::FileSystem,
    [6.160373]
    [6.160570]
    fn record_apply<T: TxnT + TxnTExt + MutTxnTExt + Send + Sync + 'static, C: libpijul::changestore::ChangeStore + Clone + Send + 'static>(
    txn: Arc<RwLock<T>>,
    channel: ChannelRef<T>,
    working_copy: Arc<libpijul::working_copy::FileSystem>,
  • replacement in pijul/src/commands/git.rs at line 732
    [6.70][6.188:219](),[6.160881][6.188:219](),[6.219][6.397:608](),[6.191][6.647:969](),[6.608][6.647:969](),[6.317][6.647:969](),[6.969][6.535:549](),[6.535][6.535:549]()
    for p in prefixes.iter() {
    let result = working_copy.record_prefix(
    txn,
    channel,
    changes,
    &mut state,
    repo_path.clone(),
    p,
    num_cpus,
    );
    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 {:?}: {}", p, e);
    }
    [6.70]
    [6.549]
    let result = working_copy.record_prefixes(
    txn.clone(),
    channel.clone(),
    changes,
    &mut state,
    repo_path.clone(),
    prefixes,
    num_cpus,
    );
    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);
  • edit in pijul/src/commands/git.rs at line 751
    [6.161002]
    [6.161002]
    let mut txn = txn.write().unwrap();
  • replacement in pijul/src/commands/git.rs at line 756
    [6.1447][6.1447:1514]()
    txn.current_state(&channel.borrow()).map_err(TxnErr)?,
    [6.1447]
    [6.1514]
    txn.current_state(&channel.read().unwrap()).map_err(TxnErr)?,
  • replacement in pijul/src/commands/git.rs at line 762
    [6.161176][6.1527:1575]()
    .map(|rec| rec.globalize(txn).unwrap())
    [6.161176]
    [6.161215]
    .map(|rec| rec.globalize(&*txn).unwrap())
  • replacement in pijul/src/commands/git.rs at line 766
    [6.1614][6.1614:1695]()
    libpijul::change::dependencies(txn, &channel.borrow(), actions.iter())?;
    [6.1614]
    [6.161362]
    libpijul::change::dependencies(&*txn, &channel.read().unwrap(), actions.iter())?;
  • replacement in pijul/src/commands/git.rs at line 768
    [6.161427][6.161427:161457]()
    txn,
    channel,
    [6.161427]
    [6.161457]
    &*txn,
    &channel,
  • replacement in pijul/src/commands/git.rs at line 771
    [6.161474][6.161474:161496]()
    rec.contents,
    [6.161474]
    [6.161496]
    std::mem::replace(&mut *rec.contents.lock().unwrap(), Vec::new()),
  • replacement in pijul/src/commands/git.rs at line 780
    [6.161721][6.1858:1942]()
    let (_, m) = txn.apply_local_change(channel, &change, &hash, &rec.updatables)?;
    [6.161721]
    [6.169]
    let (_, m) = txn.apply_local_change(&channel, &change, &hash, &rec.updatables)?;
  • replacement in pijul/src/commands/fork.rs at line 31
    [6.168609][6.168609:168678]()
    let mut channel = txn.open_or_create_channel(&self.to)?;
    [6.168609]
    [6.13204]
    let channel = txn.open_or_create_channel(&self.to)?;
    let mut channel = channel.write().unwrap();
  • replacement in pijul/src/commands/apply.rs at line 35
    [6.1239][6.19373:19457](),[6.2922][6.19373:19457](),[6.195050][6.19373:19457]()
    let mut channel = if let Some(channel) = txn.load_channel(&channel_name)? {
    [6.2922]
    [6.195133]
    let channel = if let Some(channel) = txn.load_channel(&channel_name)? {
  • edit in pijul/src/commands/apply.rs at line 58
    [6.1173]
    [6.14215]
    let mut channel = channel.write().unwrap();
  • edit in pijul/src/commands/apply.rs at line 61
    [6.196057]
    [6.14302]
    let mut channel = channel.write().unwrap();
  • replacement in libpijul/src/lib.rs at line 122
    [6.720672][6.720672:720722]()
    channel: &mut pristine::ChannelRef<Self>,
    [6.720672]
    [6.125930]
    channel: &mut Self::Channel,
  • replacement in libpijul/src/lib.rs at line 132
    [6.721040][6.721040:721090]()
    channel: &mut pristine::ChannelRef<Self>,
    [6.721040]
    [6.125969]
    channel: &mut Self::Channel,
  • replacement in libpijul/src/lib.rs at line 142
    [6.721391][6.721391:721441]()
    channel: &mut pristine::ChannelRef<Self>,
    [6.721391]
    [6.126008]
    channel: &mut Self::Channel,
  • replacement in libpijul/src/lib.rs at line 151
    [6.721695][6.721695:721745]()
    channel: &mut pristine::ChannelRef<Self>,
    [6.721695]
    [6.126040]
    channel: &mut Self::Channel,
  • replacement in libpijul/src/lib.rs at line 160
    [6.721987][6.721987:722037]()
    channel: &mut pristine::ChannelRef<Self>,
    [6.721987]
    [6.126072]
    channel: &mut Self::Channel,
  • replacement in libpijul/src/lib.rs at line 390
    [6.729347][6.729347:729385](),[6.729385][6.126592:126654]()
    for app in extra.iter() {
    self.apply_change_rec(changes, channel, app)?
    [6.729347]
    [6.729448]
    {
    let mut channel_ = channel.write().unwrap();
    for app in extra.iter() {
    self.apply_change_rec(changes, &mut channel_, app)?
    }
  • replacement in libpijul/src/apply.rs at line 88
    [6.944800][6.944800:944833]()
    channel: &mut ChannelRef<T>,
    [6.944800]
    [6.143229]
    channel: &mut T::Channel,
  • edit in libpijul/src/apply.rs at line 94
    [6.944998][5.89993:90041]()
    let mut channel = channel.write().unwrap();
  • replacement in libpijul/src/apply.rs at line 118
    [6.94986][6.94986:95008]()
    &mut channel,
    [6.94986]
    [6.95008]
    channel,
  • replacement in libpijul/src/apply.rs at line 129
    [6.946010][6.946010:946043]()
    channel: &mut ChannelRef<T>,
    [6.946010]
    [6.143567]
    channel: &mut T::Channel,
  • edit in libpijul/src/apply.rs at line 136
    [6.946218][5.90042:90090](),[5.90090][6.946264:946265](),[6.946264][6.946264:946265]()
    let mut channel = channel.write().unwrap();
  • replacement in libpijul/src/apply.rs at line 177
    [6.947384][6.85:183]()
    apply_change_to_channel(txn, &mut channel, internal, &hash, &change, workspace)?;
    [6.947384]
    [6.947698]
    apply_change_to_channel(txn, channel, internal, &hash, &change, workspace)?;
  • replacement in libpijul/src/apply.rs at line 188
    [6.947889][6.947889:947922]()
    channel: &mut ChannelRef<T>,
    [6.947889]
    [6.143985]
    channel: &mut T::Channel,
  • replacement in libpijul/src/apply.rs at line 198
    [6.948208][6.948208:948241]()
    channel: &mut ChannelRef<T>,
    [6.948208]
    [6.144003]
    channel: &mut T::Channel,