Formatting + big-endian Sanakirja

pmeunier
Feb 7, 2024, 3:42 PM
QWIYNMI5SOTLRPYE4O3AG7R75JXM2TB3ZADU646PG6ACPBGSYUYAC

Dependencies

  • [2] LV34DUJY Formatting
  • [3] VJL7SCH2 Fixing tags with the new sanakirja_core
  • [4] SCXMBF3Y Correct ordering of pages in libpijul::tag::copy
  • [5] LLBKJA6Y Simpler channel iterator
  • [6] HL3VKIZF Formatting
  • [7] UDJN7TUN Formatting
  • [8] CX2FTBQU Fixing compilation errors in
  • [9] ADZQB6NY Fixing a bug that could cause some conflict resolution markers to be ignored when diffing
  • [10] XQHABMC2 Do not block when there is no patch to pull
  • [11] 3VI4Z7VZ Fix: in repositories converted from the mono-root format, some deleted file name edges could be recorded twice in some cases
  • [12] LXKZODXJ Fixing a panic when showing conflict messages around conflict markers
  • [13] DFRNZLQ6 Fixing #798: overwrite check too strict in `pijul apply` when applying a patch adding new files
  • [14] QSTVUSKX Updating the protocol to output a blank line if there are no identities
  • [15] CVS6BHXR Sanakirja version bumps
  • [16] STOFOQI4 Fixing a bug in `pijul dependents` where non-dependents could be listed (and making the command deterministic)
  • [17] TDCDBT6X Fixing a wrong load when debugging tags
  • [18] DH54ZJMW Supporting ZStd compression levels
  • [19] YV63XF6Z Fixing a conflict
  • [20] FMLTNQ4E Turning a panic into an error when making a patch
  • [21] 7GQGVFEA making `pijul client` more robust to errors
  • [22] Q3UD2OLQ Fixing warning from chrono
  • [23] ALKSQF2F Return parse errors in the text format when a hunk description is parsed, but the hunk fails to parse
  • [24] 6O65JNAF Showing the pushed and pulled changes in the correct order
  • [25] MMQCFCIE Correctness of the new algorithm for detecting missing contexts
  • [26] AHAXT26R repair_zombies: do not add pseudo-edges from FOLDER vertices
  • [27] CCLLB7OI Upgrading to Sanakirja 0.15 + version bump
  • [28] TVVW53HZ Conflict resolution
  • [29] JRENVH5D Reqwest 0.11
  • [30] AETYXHGO Using an LruCache instead of a HashMap for loaded pages in a tag
  • [31] BC3QS46O Fix test compilation
  • [32] YN63NUZO Sanakirja 1.0
  • [33] 4OJWMSOW Fully replace crate::Identity
  • [34] 73NW2X2M Returning a parse error instead of panicking when parsing a text change
  • [35] Z5RPHAV3 ZStd_seekable version
  • [36] G6YXRFH2 Channel drop with tags
  • [37] 7ZFRYVVQ Cargo.nix and formatting
  • [38] I3OVP3NH Archive: set the accurate and deterministic mtime
  • [39] TZ42DX3B Properly dropping a channel
  • [40] L5JW24DB Channel drops were not checking whether forks done in the same transaction before dropping unused patches
  • [41] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [42] QL6K2ZM3 Tags
  • [43] ZSF3YFZT encoded file deletion
  • [44] D66CRGCN Fixing a Sanakirja bug in the debugging output code
  • [45] 6ARU5AQ7 Improving the `pijul client` command: printing the URL + styling the page
  • [46] 5OGOE4VW Store the current channel in the pristine
  • [47] IIV3EL2X Cleanup, formatting, and fixing the Git feature
  • [48] IYJZVLET Cleaning up the literate programming bits
  • [49] TKEVOH7H Fixing a bug when downloading changes, and making change download more efficient (more async)
  • [50] IQ4FCHPZ HTTP connections: pooling + retry on error
  • [51] 3CFU4DQN Fixing a bug in unrecord, where a patch creating an undeletion conflict would not be properly unrecorded
  • [52] RM225IDQ Exchanging tagged states over SSH
  • [53] BZSC7VMY address clippy lints
  • [54] RXNT67OT Sanakirja version, and removing an unwrap
  • [55] GA3P7FOM Nicer conflict markers
  • [56] 3QXUJMZD More detailed display of conflicts
  • [57] YRBOKAWJ Formatting (why wasn't this recorded before? I'm not sure)
  • [58] BOJEBIOI Fixing "block error" in unrecord
  • [59] LJFJEX43 Fixing newline issues in the protocol over OpenSSH
  • [60] KWD6K4F7 Handle absence of keyring for password creation
  • [61] 6XDVUSBM Version bump
  • [62] 4HTHYIA3 Fixing HTTP download
  • [63] DX2FO4HZ Tag CLI cleanup
  • [64] 5UQO4QKB Pulling patches from a remote that we know of, but do not yet have on the channel
  • [65] UFCZKKLX Upgrading to the latest Sanakirja/Rand
  • [66] VSOT2QH5 Fixing channel drop (cleanup in other tables + order of reference drop)
  • [67] FXEDPLRI Resurrecting tests, and type cleanup (no need for Arc<RwLock<…>> anymore)
  • [68] F2ZG4ZYO Fixing a potential segfault in tag transactions (when the lru_cache was full, existing references would get dropped)
  • [69] VO5OQW4W Removing anyhow in libpijul
  • [70] EJ7TFFOW Re-adding Cargo.lock
  • [71] ZDK3GNDB Tag transactions (including a massive refactoring of errors)
  • [72] LZOGKBJX new command `pijul client` for authenticating to a HTTP server
  • [73] PNJL5TPZ Version bump
  • [74] C3L2TLQW When downloading changes, check whether we have their dependencies and download them too
  • [75] ZBNKSYA6 Fixing a bus error when starting a transaction on a full disk
  • [76] YXAVFTPP Allowing vertex buffer to use references to the transaction, by changing `output::output` to take an ArcTxn<T> instead of a simple T
  • [77] SFJ3XRTF Proper escaping of UTF-8 filenames in the patch text format
  • [78] C267PHOH Tags: dropping useless Hashes in favour of Merkles
  • [79] 5MRZLKBH Changing the type of the tags db, to make it identical to remote tags
  • [80] PJ7T2VFL Do not hang on locked repositories
  • [81] VKBJ6XB6 Formatting and version bump
  • [82] 44RUBHRE Only re-prove identity when credentials change
  • [83] 2TWWWCU4 Fixing a warning related to an updated in `chrono`
  • [84] RVAH6PXA Getting libpijul to compile to WASM32
  • [85] I24UEJQL Various post-fire fixes
  • [86] QDP3R3BG Updating with the latest Sanakirja
  • [87] N3X5YP7P Adding tag/txn.rs, now that the parser allows it
  • [88] UMF6N7CZ Keyring 2.0
  • [89] IKZBGTGQ Handle absence of keyring as warning rather than error
  • [90] MQ6ERQ43 Bug fixes when unrecording a patch that introduced zombie files
  • [91] 7S4YD633 Change in semantic of the new Sanakirja compared to the previous one (get returns Some(…) even if the key is not found)
  • [92] X7OHUPL5 Fixing a bug in unrecord, and fixing the tests
  • [93] AF5AKUTO Cleanup after the text changes refactoring
  • [94] 3X4OWIU2 Sanakirja 1.2
  • [95] ZFSIT55U Solving a conflict
  • [96] ZXTHL45O address clippy lints
  • [97] UN2M77YU Test new changes against the old code. Fix several small bugs.
  • [98] 6DOXSHWG Cleanup, and version bump
  • [99] JFDLNRDY Tags: assert_eq needs PartialEq
  • [100] VAPBIG46 Version bump
  • [101] T7YIRFWD Raising an error on corrupt patches rather than panicking
  • [102] I52XSRUH Massive cleanup, and simplification
  • [103] FGIVSUFH Fixing conflicts with the new patch parsing code, and introducing AddRoot
  • [104] EEBKW7VT Keys and identities
  • [105] NGCTMCDP cleaning up the deps and revdeps of unused changes after a channel drop
  • [106] 3AMEP2Y5 More convenient interface for channels
  • [107] 2RXOCWUW Making libpijul deterministic (and getting rid of `rand`)
  • [108] RMDMAYRX Adding a root inode (aka supporting submodules)
  • [109] 5FI6SBEZ Re-implement change printing and parsing
  • [110] VWJ2JL63 Adding a `pijul dependents` command to list the transitive closure of the reverse dependency relation
  • [111] 33SQMZYX New versions of dependencies
  • [112] WP4ACVG5 Count remote tags in the sanakirja checks
  • [113] OXZVZDQZ Simplification of missing context repairs
  • [114] Y6EVFMTA Don't output files if they aren't in the current channel
  • [115] 4KJ45IJL Implement new identity management
  • [116] A3RM526Y Integrating identity malleability
  • [117] 6YMDOZIB Refactoring apply
  • [118] A3DMBJJA Upgrading the `git` subcommand to the latest Sanakirja and Libpijul
  • [119] SGXOEWHU Adding a patched chardetng (temporarily)
  • [120] DO2Y5TY5 Tag synchronisation
  • [121] GHO6DWPI Refactoring iterators
  • [122] MFTN7GBW Pre-tags cleanup + fast Sanakirja
  • [123] GQTC4TJA show first line of change message in conflict markers
  • [124] H23LO7U7 a few more clippy lints addressed
  • [125] FYUDBQ3C Formatting changes + version bump
  • [126] TNN56XYK libpijul alpha.43
  • [127] RRCSHAYZ Formatting
  • [128] IBPVOKM5 Fixing a bug in patch download
  • [*] FBXYP7QM Forgot to add remote::http
  • [*] 43SISRQ4 Formatting
  • [*] U2CGP7OP Record a separate change for Hunk::AddRoot, to avoid #571

Change contents

  • replacement in pijul/src/remote/mod.rs at line 789
    [27.13011][24.0:88]()
    debug!("update_changelist_pushpull line {}, {:?} {:?}", line!(), n, h);
    [27.13011]
    [27.13011]
    debug!(
    "update_changelist_pushpull line {}, {:?} {:?}",
    line!(),
    n,
    h
    );
  • replacement in pijul/src/remote/mod.rs at line 1286
    [10.30][10.30:60]()
    return Ok(())
    [10.30]
    [10.60]
    return Ok(());
  • replacement in pijul/src/remote/mod.rs at line 1382
    [27.593][27.604:703]()
    .download_changes_rec(repo, send_hash, recv_signal, send_ready, pro_n, waiting, asked)
    [27.593]
    [27.3566]
    .download_changes_rec(
    repo,
    send_hash,
    recv_signal,
    send_ready,
    pro_n,
    waiting,
    asked,
    )
  • replacement in pijul/src/remote/http.rs at line 41
    [27.24470][27.557:628]()
    tokio::fs::create_dir_all(&path.parent().unwrap()).await.unwrap();
    [27.24470]
    [27.314]
    tokio::fs::create_dir_all(&path.parent().unwrap())
    .await
    .unwrap();
  • replacement in pijul/src/remote/http.rs at line 167
    [27.1410][27.1410:1435]()
    continue
    [27.1410]
    [27.1435]
    continue;
  • replacement in pijul/src/remote/http.rs at line 173
    [27.1626][27.1626:1652]()
    break
    [27.1626]
    [27.1652]
    break;
  • replacement in pijul/src/remote/http.rs at line 541
    [27.1930][27.1930:2044]()
    pub async fn prove(
    &mut self,
    key: libpijul::key::SKey,
    ) -> Result<(), anyhow::Error> {
    [27.1930]
    [27.2044]
    pub async fn prove(&mut self, key: libpijul::key::SKey) -> Result<(), anyhow::Error> {
  • replacement in pijul/src/identity/mod.rs at line 133
    [27.4106][27.280:382]()
    if let Ok(password) = keyring::Entry::new("pijul", name).and_then(|x| x.get_password()) {
    [27.4106]
    [27.4192]
    if let Ok(password) = keyring::Entry::new("pijul", name).and_then(|x| x.get_password())
    {
  • replacement in pijul/src/identity/mod.rs at line 149
    [27.4743][27.383:496]()
    if let Err(e) = keyring::Entry::new("pijul", name).and_then(|x| x.set_password(&password_attempt)) {
    [27.4743]
    [27.317]
    if let Err(e) =
    keyring::Entry::new("pijul", name).and_then(|x| x.set_password(&password_attempt))
    {
  • replacement in pijul/src/identity/mod.rs at line 272
    [27.7658][27.497:613]()
    if let Err(e) = keyring::Entry::new("pijul", &self.name).and_then(|x| x.set_password(&user_password)) {
    [27.7658]
    [27.488]
    if let Err(e) = keyring::Entry::new("pijul", &self.name)
    .and_then(|x| x.set_password(&user_password))
    {
  • edit in pijul/src/identity/create.rs at line 8
    [27.28402]
    [27.28402]
    use crate::config;
  • edit in pijul/src/identity/create.rs at line 12
    [27.28571][27.8736:8770]()
    use thrussh_keys::key::PublicKey;
  • replacement in pijul/src/identity/create.rs at line 14
    [19.31][19.31:50]()
    use crate::config;
    [19.31]
    [27.28571]
    use thrussh_keys::key::PublicKey;
  • replacement in pijul/src/commands/tag.rs at line 290
    [27.5248][22.0:127]()
    chrono::DateTime::from_naive_utc_and_offset(chrono::NaiveDateTime::from_timestamp_opt(t, 0).unwrap(), chrono::Utc)
    [27.5248]
    [27.5345]
    chrono::DateTime::from_naive_utc_and_offset(
    chrono::NaiveDateTime::from_timestamp_opt(t, 0).unwrap(),
    chrono::Utc,
    )
  • replacement in pijul/src/commands/protocol.rs at line 413
    [27.2669][14.492:524]()
    return Ok(true)
    [27.2669]
    [27.2669]
    return Ok(true);
  • replacement in pijul/src/commands/identity.rs at line 443
    [27.19585][27.1057:1165]()
    if let Err(e) = Entry::new("pijul", &identity.name).and_then(|x| x.delete_password()) {
    [27.19585]
    [27.108]
    if let Err(e) =
    Entry::new("pijul", &identity.name).and_then(|x| x.delete_password())
    {
  • edit in pijul/src/commands/dependents.rs at line 1
    [27.243][27.244:288]()
    use std::path::PathBuf;
    use std::io::Write;
  • edit in pijul/src/commands/dependents.rs at line 3
    [27.323]
    [27.323]
    use std::io::Write;
    use std::path::PathBuf;
  • replacement in pijul/src/commands/dependents.rs at line 37
    [16.450][16.450:480]()
    return Ok(())
    [16.450]
    [27.1076]
    return Ok(());
  • replacement in pijul/src/commands/dependents.rs at line 65
    [16.856][16.856:886]()
    break
    [16.856]
    [16.886]
    break;
  • replacement in pijul/src/commands/debug.rs at line 55
    [27.518][27.518:629]()
    txn
    .follow_oldest_path(&repo.changes, &channel, &root)?.0
    [27.518]
    [27.629]
    txn.follow_oldest_path(&repo.changes, &channel, &root)?.0
  • replacement in pijul/src/commands/debug.rs at line 84
    [27.805][27.805:939]()
    if let (Some(a), Some(b)) = (it.next(),it.next()) {
    use libpijul::pristine::{Position, ChangeId, ChangePosition, Base32};
    [27.805]
    [27.939]
    if let (Some(a), Some(b)) = (it.next(), it.next()) {
    use libpijul::pristine::{Base32, ChangeId, ChangePosition, Position};
  • edit in pijul/src/commands/client.rs at line 3
    [27.4588]
    [27.4588]
    use crate::config::global_config_dir;
    use hyper::service::{make_service_fn, service_fn};
    use hyper::{Body, Request, Response, Server};
  • edit in pijul/src/commands/client.rs at line 8
    [27.4644][27.4644:4773]()
    use hyper::{Body, Request, Response, Server};
    use hyper::service::{make_service_fn, service_fn};
    use tokio::sync::mpsc::channel;
  • replacement in pijul/src/commands/client.rs at line 9
    [27.4792][27.4792:4830]()
    use crate::config::global_config_dir;
    [27.4792]
    [27.4830]
    use tokio::sync::mpsc::channel;
  • edit in pijul/src/commands/client.rs at line 20
    [27.5032][27.5032:5033]()
  • replacement in pijul/src/commands/client.rs at line 29
    [27.5461][27.5461:5495]()
    return Ok(())
    [27.5461]
    [27.5495]
    return Ok(());
  • edit in pijul/src/commands/client.rs at line 36
    [27.5610][27.5610:5611]()
  • replacement in pijul/src/commands/client.rs at line 65
    [27.6965][27.6965:7011]()
    .unwrap()
    [27.6965]
    [27.7011]
    .unwrap(),
  • replacement in pijul/src/commands/client.rs at line 80
    [21.60][27.11272:11362](),[27.7541][27.11272:11362]()
    eprintln!("If the URL doesn't open automatically, please visit {}", url);
    [21.60]
    [27.7541]
    eprintln!(
    "If the URL doesn't open automatically, please visit {}",
    url
    );
  • replacement in pijul/src/commands/client.rs at line 85
    [27.7598][27.7598:7623]()
    select!{
    [27.7598]
    [27.7623]
    select! {
  • replacement in pijul/src/commands/client.rs at line 111
    [27.8334][27.8334:8356]()
    break
    [27.8334]
    [27.8356]
    break;
  • replacement in pijul/src/commands/apply.rs at line 139
    [13.188][13.188:221]()
    continue
    [13.188]
    [13.221]
    continue;
  • replacement in pijul/Cargo.toml at line 82
    [27.197874][27.0:85]()
    sanakirja = { version = "1.2.16", default-features = false, features = [ "crc32" ] }
    [27.197874]
    [27.197895]
    sanakirja = { version = "1.4.0", default-features = false, features = [ "crc32" ] }
  • replacement in libpijul/src/vertex_buffer.rs at line 165
    [27.221091][27.0:91]()
    changes: sides.iter().flat_map(|(_, b)| b.iter()).cloned().cloned().collect(),
    [27.221091]
    [27.796]
    changes: sides
    .iter()
    .flat_map(|(_, b)| b.iter())
    .cloned()
    .cloned()
    .collect(),
  • replacement in libpijul/src/vertex_buffer.rs at line 184
    [27.221363][27.92:185]()
    changes: add_del.iter().flat_map(|(_, b)| b.iter()).cloned().cloned().collect(),
    [27.221363]
    [27.926]
    changes: add_del
    .iter()
    .flat_map(|(_, b)| b.iter())
    .cloned()
    .cloned()
    .collect(),
  • replacement in libpijul/src/vertex_buffer.rs at line 204
    [27.221703][27.186:309]()
    fn conflict_next<C: ChangeStore>(&mut self, id_: usize, sides: Option<(&C, &[&Hash])>) -> Result<(), std::io::Error> {
    [27.221703]
    [27.1133]
    fn conflict_next<C: ChangeStore>(
    &mut self,
    id_: usize,
    sides: Option<(&C, &[&Hash])>,
    ) -> Result<(), std::io::Error> {
  • replacement in libpijul/src/vertex_buffer.rs at line 229
    [27.774][12.0:151]()
    Ok(header) => if let Some(l) = header.message.lines().next() {
    l.to_string()
    } else {
    String::new()
    },
    [27.774]
    [27.848]
    Ok(header) => {
    if let Some(l) = header.message.lines().next() {
    l.to_string()
    } else {
    String::new()
    }
    }
  • edit in libpijul/src/unrecord/mod.rs at line 589
    [27.2201][27.1690:1691]()
  • replacement in libpijul/src/unrecord/mod.rs at line 611
    [27.2511][27.2511:2532]()
    continue
    [27.2511]
    [27.2532]
    continue;
  • replacement in libpijul/src/unrecord/mod.rs at line 629
    [27.3143][27.3143:3168]()
    continue
    [27.3143]
    [27.3168]
    continue;
  • edit in libpijul/src/unrecord/mod.rs at line 659
    [27.4017][27.4017:4018]()
  • edit in libpijul/src/unrecord/mod.rs at line 674
    [27.2923][27.4099:4100]()
  • replacement in libpijul/src/unrecord/mod.rs at line 680
    [27.4413][27.4413:4439]()
    break
    [27.4413]
    [27.4439]
    break;
  • edit in libpijul/src/unrecord/mod.rs at line 695
    [27.238933][27.238933:238934]()
  • resolve order conflict in libpijul/src/unrecord/mod.rs at line 695
    [27.3885]
  • replacement in libpijul/src/tests/file_conflicts.rs at line 1216
    [27.646][8.708:813]()
    Conflict::ZombieFile { ref path, .. } => assert!(path == "a/b/c/file" || path == "a/b/c/alice"),
    [27.646]
    [27.345145]
    Conflict::ZombieFile { ref path, .. } => {
    assert!(path == "a/b/c/file" || path == "a/b/c/alice")
    }
  • replacement in libpijul/src/tests/file_conflicts.rs at line 1238
    [27.692][8.814:919]()
    Conflict::ZombieFile { ref path, .. } => assert!(path == "a/b/c/file" || path == "a/b/c/alice"),
    [27.692]
    [27.345703]
    Conflict::ZombieFile { ref path, .. } => {
    assert!(path == "a/b/c/file" || path == "a/b/c/alice")
    }
  • replacement in libpijul/src/tag.rs at line 169
    [27.8872][27.8872:8945]()
    ::sanakirja::btree::Db_::from_page(tag.header.offsets.external);
    [27.8872]
    [27.1311]
    unsafe { ::sanakirja::btree::Db_::from_page(tag.header.offsets.external) };
  • replacement in libpijul/src/tag.rs at line 317
    [27.12934][27.12934:13025]()
    fn load_page(&self, off: u64) -> Result<::sanakirja::CowPage, ::sanakirja::CRCError> {
    [27.12934]
    [27.13025]
    unsafe fn load_page(&self, off: u64) -> Result<::sanakirja::CowPage, ::sanakirja::CRCError> {
  • replacement in libpijul/src/tag.rs at line 346
    [27.13707][27.13707:13745]()
    let page = txn.txn.alloc_page()?;
    [27.13707]
    [27.13745]
    let page = unsafe { txn.txn.alloc_page()? };
  • replacement in libpijul/src/tag.rs at line 374
    [27.14586][27.14586:14640]()
    let new_page = txn.txn.alloc_page()?;
    [27.14586]
    [27.14640]
    let new_page = unsafe { txn.txn.alloc_page()? };
  • replacement in libpijul/src/tag.rs at line 381
    [27.14804][3.0:76]()
    unsafe { P::put_mut(&mut new_page_, &mut new_curs, &k, &v, r) }
    [27.14804]
    [27.14876]
    unsafe { P::put_mut(&mut txn.txn, &mut new_page_, &mut new_curs, &k, &v, r) }
  • replacement in libpijul/src/tag.rs at line 385
    [27.14933][27.14933:14984]()
    Ok(::sanakirja::btree::Db_::from_page(result))
    [27.14933]
    [27.14984]
    Ok(unsafe { ::sanakirja::btree::Db_::from_page(result) })
  • replacement in libpijul/src/tag.rs at line 479
    [27.18233][27.18233:18258]()
    txn.internal.db,
    [27.18233]
    [27.18258]
    txn.internal.db.into(),
  • replacement in libpijul/src/tag.rs at line 487
    [27.18452][27.18452:18477]()
    txn.external.db,
    [27.18452]
    [27.18477]
    txn.external.db.into(),
  • replacement in libpijul/src/tag.rs at line 495
    [27.18680][27.18680:18706]()
    channel.graph.db,
    [27.18680]
    [27.18706]
    channel.graph.db.into(),
  • replacement in libpijul/src/tag.rs at line 503
    [27.18875][27.18875:18903]()
    channel.changes.db,
    [27.18875]
    [27.18903]
    channel.changes.db.into(),
  • replacement in libpijul/src/tag.rs at line 514
    [27.19146][27.19146:19214]()
    >(&txn, channel.revchanges.db, &mut new, &sender, &breceiver)?;
    [27.19146]
    [27.19214]
    >(
    &txn,
    channel.revchanges.db.into(),
    &mut new,
    &sender,
    &breceiver,
    )?;
  • replacement in libpijul/src/tag.rs at line 524
    [27.19335][27.19335:19362]()
    channel.states.db,
    [27.19335]
    [27.19362]
    channel.states.db.into(),
  • replacement in libpijul/src/tag.rs at line 535
    [6.302][6.302:364]()
    >(&txn, channel.tags.db, &mut new, &sender, &breceiver)?;
    [6.302]
    [27.19601]
    >(&txn, channel.tags.db.into(), &mut new, &sender, &breceiver)?;
  • edit in libpijul/src/tag.rs at line 556
    [27.20036]
    [27.20036]
    struct CopyTxn {}
    impl ::sanakirja::AllocPage for CopyTxn {
    /// Allocate a single page.
    unsafe fn alloc_page(&mut self) -> Result<::sanakirja::MutPage, Self::Error> {
    unimplemented!()
    }
    /// Allocate a single page.
    unsafe fn alloc_page_no_dirty(&mut self) -> Result<::sanakirja::MutPage, Self::Error> {
    unimplemented!()
    }
    /// Allocate many contiguous pages, return the first one
    unsafe fn alloc_contiguous(&mut self, _: u64) -> Result<::sanakirja::MutPage, Self::Error> {
    unimplemented!()
    }
    /// Increment the reference count for page `off`.
    fn incr_rc(&mut self, _: u64) -> Result<usize, Self::Error> {
    unimplemented!()
    }
    unsafe fn decr_rc(&mut self, _: u64) -> Result<usize, Self::Error> {
    unimplemented!()
    }
    unsafe fn decr_rc_owned(&mut self, _: u64) -> Result<usize, Self::Error> {
    unimplemented!()
    }
    }
    impl ::sanakirja::LoadPage for CopyTxn {
    type Error = std::convert::Infallible;
    unsafe fn load_page(&self, _: u64) -> Result<::sanakirja::CowPage, Self::Error> {
    unimplemented!()
    }
    }
  • replacement in libpijul/src/tag.rs at line 613
    [4.836][27.20669:20730](),[27.20669][27.20669:20730]()
    let page = txn.txn.load_page(old_page_off).unwrap();
    [4.836]
    [27.20730]
    let page = unsafe { txn.txn.load_page(old_page_off).unwrap() };
  • replacement in libpijul/src/tag.rs at line 645
    [27.21785][3.77:151]()
    unsafe { P::put_mut(&mut new_page_, &mut new_curs, k, v, r) }
    [27.21785]
    [27.21855]
    unsafe { P::put_mut(&mut CopyTxn {}, &mut new_page_, &mut new_curs, k, v, r) }
  • replacement in libpijul/src/tag/txn.rs at line 91
    [27.2116][27.2116:2197]()
    fn load_page(&self, off: u64) -> Result<::sanakirja::CowPage, Self::Error> {
    [27.2116]
    [27.2197]
    unsafe fn load_page(&self, off: u64) -> Result<::sanakirja::CowPage, Self::Error> {
  • replacement in libpijul/src/tag/txn.rs at line 124
    [27.3286][27.3286:3486]()
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(db.graph);
    Ok(::sanakirja::btree::get(self, &gr, key, value)?.map(|(_, v)| v))
    [27.3286]
    [27.3486]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(db.graph);
    Ok(::sanakirja::btree::get(self, &gr, key, value)?.map(|(_, v)| v))
    }
  • replacement in libpijul/src/tag/txn.rs at line 135
    [27.3638][27.3638:3852]()
    use crate::pristine::sanakirja::UDb;
    let gr: UDb<ChangeId, SerializedHash> = UDb::from_page(self.header.offsets.external);
    Ok(::sanakirja::btree::get(self, &gr, int, None)?.map(|(_, v)| v))
    [27.3638]
    [27.3852]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let gr: UDb<ChangeId, SerializedHash> = UDb::from_page(self.header.offsets.external);
    Ok(::sanakirja::btree::get(self, &gr, int, None)?.map(|(_, v)| v))
    }
  • replacement in libpijul/src/tag/txn.rs at line 146
    [27.4004][27.4004:4218]()
    use crate::pristine::sanakirja::UDb;
    let gr: UDb<SerializedHash, ChangeId> = UDb::from_page(self.header.offsets.internal);
    Ok(::sanakirja::btree::get(self, &gr, int, None)?.map(|(_, v)| v))
    [27.4004]
    [27.4218]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let gr: UDb<SerializedHash, ChangeId> = UDb::from_page(self.header.offsets.internal);
    Ok(::sanakirja::btree::get(self, &gr, int, None)?.map(|(_, v)| v))
    }
  • replacement in libpijul/src/tag/txn.rs at line 163
    [27.4509][27.4509:4960]()
    let edge = SerializedEdge::new(min_flag, dest.change, dest.pos, ChangeId::ROOT);
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(g.graph);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &gr)?;
    cursor.set(self, &key, Some(&edge))?;
    Ok(Self::Adj {
    cursor,
    key,
    min_flag,
    max_flag,
    })
    [27.4509]
    [27.4960]
    unsafe {
    let edge = SerializedEdge::new(min_flag, dest.change, dest.pos, ChangeId::ROOT);
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(g.graph);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &gr)?;
    cursor.set(self, &key, Some(&edge))?;
    Ok(Self::Adj {
    cursor,
    key,
    min_flag,
    max_flag,
    })
    }
  • replacement in libpijul/src/tag/txn.rs at line 191
    [27.5393][27.5393:5586]()
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(graph.graph);
    Ok(crate::pristine::sanakirja::find_block(self, &gr, p)?)
    [27.5393]
    [27.5586]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(graph.graph);
    Ok(crate::pristine::sanakirja::find_block(self, &gr, p)?)
    }
  • replacement in libpijul/src/tag/txn.rs at line 203
    [27.5758][27.5758:5955]()
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(graph.graph);
    Ok(crate::pristine::sanakirja::find_block_end(self, &gr, p)?)
    [27.5758]
    [27.5955]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let gr: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(graph.graph);
    Ok(crate::pristine::sanakirja::find_block_end(self, &gr, p)?)
    }
  • replacement in libpijul/src/tag/txn.rs at line 253
    [27.7265][27.7265:7584]()
    use crate::pristine::sanakirja::Db;
    let db: Db<ChangeId, L64> = Db::from_page(*channel);
    match ::sanakirja::btree::get(self, &db, c, None) {
    Ok(Some((k, x))) if k == c => Ok(Some(x)),
    Ok(x) => {
    debug!("get_changeset = {:?}", x);
    Ok(None)
    [27.7265]
    [27.7584]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let db: Db<ChangeId, L64> = Db::from_page(*channel);
    match ::sanakirja::btree::get(self, &db, c, None) {
    Ok(Some((k, x))) if k == c => Ok(Some(x)),
    Ok(x) => {
    debug!("get_changeset = {:?}", x);
    Ok(None)
    }
    Err(e) => {
    error!("{:?}", e);
    Err(TxnErr(SanakirjaError::PristineCorrupt).into())
    }
  • edit in libpijul/src/tag/txn.rs at line 267
    [27.7598][27.7598:7725](),[27.7725][27.7725:7739]()
    Err(e) => {
    error!("{:?}", e);
    Err(TxnErr(SanakirjaError::PristineCorrupt).into())
    }
  • replacement in libpijul/src/tag/txn.rs at line 275
    [27.7941][27.7941:8349]()
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*revchanges);
    match ::sanakirja::btree::get(self, &db, c, None) {
    Ok(Some((k, x))) if k == c => Ok(Some(x)),
    Ok(_) => Ok(None),
    Err(e) => {
    error!("{:?}", e);
    Err(TxnErr(SanakirjaError::PristineCorrupt).into())
    [27.7941]
    [27.8349]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*revchanges);
    match ::sanakirja::btree::get(self, &db, c, None) {
    Ok(Some((k, x))) if k == c => Ok(Some(x)),
    Ok(_) => Ok(None),
    Err(e) => {
    error!("{:?}", e);
    Err(TxnErr(SanakirjaError::PristineCorrupt).into())
    }
  • replacement in libpijul/src/tag/txn.rs at line 297
    [27.8692][27.8692:8947]()
    use crate::pristine::sanakirja::Db;
    let db: Db<ChangeId, L64> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(k) = pos {
    cursor.set(self, &k, None)?;
    [27.8692]
    [27.8947]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let db: Db<ChangeId, L64> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(k) = pos {
    cursor.set(self, &k, None)?;
    }
    Ok(Cursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • edit in libpijul/src/tag/txn.rs at line 312
    [27.8957][27.8957:9154]()
    Ok(Cursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • replacement in libpijul/src/tag/txn.rs at line 328
    [27.9636][27.9636:9920]()
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(&*txn, &db)?;
    if let Some(k) = pos {
    cursor.set(&*txn, &k, None)?;
    [27.9636]
    [27.9920]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(&*txn, &db)?;
    if let Some(k) = pos {
    cursor.set(&*txn, &k, None)?;
    }
    Ok(Cursor {
    cursor,
    txn,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • edit in libpijul/src/tag/txn.rs at line 343
    [27.9930][27.9930:10121]()
    Ok(Cursor {
    cursor,
    txn,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • replacement in libpijul/src/tag/txn.rs at line 353
    [27.10397][27.10397:10950]()
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(ref pos) = pos {
    cursor.set(self, pos, None)?;
    } else {
    cursor.set_last(self)?;
    };
    Ok(RevCursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
    [27.10397]
    [27.10950]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let db: UDb<L64, Pair<ChangeId, SerializedMerkle>> = UDb::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(ref pos) = pos {
    cursor.set(self, pos, None)?;
    } else {
    cursor.set_last(self)?;
    };
    Ok(RevCursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
    }
  • replacement in libpijul/src/tag/txn.rs at line 419
    [27.12419][27.12419:12675]()
    use crate::pristine::sanakirja::UDb;
    let db: UDb<SerializedMerkle, L64> = UDb::from_page(*channel);
    match ::sanakirja::btree::get(self, &db, m, None)? {
    Some((k, v)) if k == m => Ok(Some(*v)),
    _ => Ok(None),
    [27.12419]
    [27.12675]
    unsafe {
    use crate::pristine::sanakirja::UDb;
    let db: UDb<SerializedMerkle, L64> = UDb::from_page(*channel);
    match ::sanakirja::btree::get(self, &db, m, None)? {
    Some((k, v)) if k == m => Ok(Some(*v)),
    _ => Ok(None),
    }
  • replacement in libpijul/src/tag/txn.rs at line 436
    [27.2496][27.2496:2540](),[27.2540][27.39095:39185](),[27.39185][27.2592:2726](),[27.2592][27.2592:2726](),[27.2726][6.894:922]()
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*tags);
    let t: L64 = t.into();
    match ::sanakirja::btree::get(self, &db, &t, None)? {
    Some((k, _)) => Ok(k == &t),
    _ => Ok(false),
    [27.2496]
    [27.13093]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*tags);
    let t: L64 = t.into();
    match ::sanakirja::btree::get(self, &db, &t, None)? {
    Some((k, _)) => Ok(k == &t),
    _ => Ok(false),
    }
  • replacement in libpijul/src/tag/txn.rs at line 461
    [27.13471][27.2833:2877](),[27.2877][27.39303:39396](),[27.2932][27.13585:13733](),[27.39396][27.13585:13733](),[27.13585][27.13585:13733]()
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(k) = k {
    cursor.set(self, &k, None)?;
    [27.13471]
    [27.13733]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(k) = k {
    cursor.set(self, &k, None)?;
    }
    Ok(Cursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • edit in libpijul/src/tag/txn.rs at line 476
    [27.13743][27.13743:13940]()
    Ok(Cursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
  • replacement in libpijul/src/tag/txn.rs at line 532
    [27.15103][27.3272:3316](),[27.3316][27.39870:39963](),[27.3371][27.15217:15645](),[27.39963][27.15217:15645](),[27.15217][27.15217:15645]()
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(from) = from {
    cursor.set(self, &from.into(), None)?;
    } else {
    cursor.set_last(self)?;
    };
    Ok(RevCursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
    [27.15103]
    [27.15645]
    unsafe {
    use crate::pristine::sanakirja::Db;
    let db: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> = Db::from_page(*channel);
    let mut cursor = ::sanakirja::btree::cursor::Cursor::new(self, &db)?;
    if let Some(from) = from {
    cursor.set(self, &from.into(), None)?;
    } else {
    cursor.set_last(self)?;
    };
    Ok(RevCursor {
    cursor,
    txn: self,
    k: std::marker::PhantomData,
    v: std::marker::PhantomData,
    t: std::marker::PhantomData,
    })
    }
  • replacement in libpijul/src/small_string.rs at line 314
    [27.487787][27.47547:47596]()
    unsafe fn write_to_page(&self, p: *mut u8) {
    [27.487787]
    [27.47596]
    unsafe fn write_to_page<T: sanakirja::AllocPage>(&self, _: &mut T, p: *mut u8) {
  • edit in libpijul/src/record.rs at line 942
    [27.5233]
    [27.7939]
    debug!(
    "add root if needed {:?} {:?}",
    pos.0.as_u64(),
    pos2.0.as_u64()
    );
  • edit in libpijul/src/record.rs at line 1047
    [27.1294]
    [27.1294]
    debug!("name start {:?} end {:?}", name_start, name_end);
  • replacement in libpijul/src/record.rs at line 1747
    [11.891][11.891:912]()
    continue
    [11.891]
    [11.912]
    continue;
  • replacement in libpijul/src/pristine/sanakirja.rs at line 135
    [27.22192][27.22192:22232]()
    const VERSION: L64 = L64(1u64.to_le());
    [27.22192]
    [27.532726]
    const VERSION: u64 = 1u64;
  • replacement in libpijul/src/pristine/sanakirja.rs at line 140
    [27.532869][27.22233:22295]()
    if L64(txn.root(Root::Version as usize)) != VERSION {
    [27.532869]
    [27.22295]
    if txn.root(Root::Version as usize) != VERSION {
  • edit in libpijul/src/pristine/sanakirja.rs at line 143
    [27.22354]
    [27.57378]
    debug!("txn_begin");
  • edit in libpijul/src/pristine/sanakirja.rs at line 166
    [27.533977]
    [27.533977]
    debug!("txn begin done");
  • replacement in libpijul/src/pristine/sanakirja.rs at line 179
    [27.1263][27.534173:534255](),[27.22427][27.534173:534255](),[27.534173][27.534173:534255](),[27.534255][27.22428:22595]()
    let mut txn = ::sanakirja::Env::mut_txn_begin(self.env.clone()).unwrap();
    if let Some(version) = txn.root(Root::Version as usize) {
    if L64(version) != VERSION {
    return Err(SanakirjaError::Version.into());
    [27.22427]
    [27.22595]
    unsafe {
    let mut txn = ::sanakirja::Env::mut_txn_begin(self.env.clone()).unwrap();
    if let Some(version) = txn.root(Root::Version as usize) {
    if version != VERSION {
    return Err(SanakirjaError::Version.into());
    }
    } else {
    txn.set_root(Root::Version as usize, VERSION);
  • replacement in libpijul/src/pristine/sanakirja.rs at line 188
    [27.22609][27.22609:22687]()
    } else {
    txn.set_root(Root::Version as usize, VERSION.0);
    [27.22609]
    [27.22687]
    Ok(MutTxn {
    channels: if let Some(db) = txn.root_db(Root::Channels as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    external: if let Some(db) = txn.root_db(Root::External as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    internal: if let Some(db) = txn.root_db(Root::Internal as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    inodes: if let Some(db) = txn.root_db(Root::Inodes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revinodes: if let Some(db) = txn.root_db(Root::RevInodes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    tree: if let Some(db) = txn.root_db(Root::Tree as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revtree: if let Some(db) = txn.root_db(Root::RevTree as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revdep: if let Some(db) = txn.root_db(Root::RevDep as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    dep: if let Some(db) = txn.root_db(Root::Dep as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    touched_files: if let Some(db) = txn.root_db(Root::TouchedFiles as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    rev_touched_files: if let Some(db) = txn.root_db(Root::RevTouchedFiles as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    partials: if let Some(db) = txn.root_db(Root::Partials as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    remotes: if let Some(db) = txn.root_db(Root::Remotes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    open_channels: Mutex::new(HashMap::default()),
    open_remotes: Mutex::new(HashMap::default()),
    txn,
    counter: 0,
    cur_channel: None,
    })
  • edit in libpijul/src/pristine/sanakirja.rs at line 261
    [27.22697][27.1264:3608](),[27.534255][27.1264:3608](),[27.3608][27.61706:61823](),[27.61823][27.536168:536185](),[27.536168][27.536168:536185](),[27.536185][27.61824:61848](),[27.61848][27.5403:5434](),[27.5434][27.3609:3620](),[27.61848][27.3609:3620](),[27.536185][27.3609:3620]()
    Ok(MutTxn {
    channels: if let Some(db) = txn.root_db(Root::Channels as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    external: if let Some(db) = txn.root_db(Root::External as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    internal: if let Some(db) = txn.root_db(Root::Internal as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    inodes: if let Some(db) = txn.root_db(Root::Inodes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revinodes: if let Some(db) = txn.root_db(Root::RevInodes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    tree: if let Some(db) = txn.root_db(Root::Tree as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revtree: if let Some(db) = txn.root_db(Root::RevTree as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    revdep: if let Some(db) = txn.root_db(Root::RevDep as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    dep: if let Some(db) = txn.root_db(Root::Dep as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    touched_files: if let Some(db) = txn.root_db(Root::TouchedFiles as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    rev_touched_files: if let Some(db) = txn.root_db(Root::RevTouchedFiles as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    partials: if let Some(db) = txn.root_db(Root::Partials as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    remotes: if let Some(db) = txn.root_db(Root::Remotes as usize) {
    db
    } else {
    btree::create_db_(&mut txn)?
    },
    open_channels: Mutex::new(HashMap::default()),
    open_remotes: Mutex::new(HashMap::default()),
    txn,
    counter: 0,
    cur_channel: None,
    })
  • replacement in libpijul/src/pristine/sanakirja.rs at line 317
    [27.330][27.330:369](),[27.369][27.60694:60754](),[27.60694][27.60694:60754](),[27.60754][27.370:428](),[27.428][27.60839:60899](),[27.60839][27.60839:60899](),[27.60899][27.429:487](),[27.487][27.60984:61040](),[27.60984][27.60984:61040](),[27.61040][27.488:544](),[27.544][27.61123:61185](),[27.61123][27.61123:61185](),[27.61185][27.545:604](),[27.604][27.61271:61323](),[27.61271][27.61271:61323](),[27.61323][27.605:659](),[27.659][27.61404:61462](),[27.61404][27.61404:61462](),[27.61462][27.660:717](),[27.717][27.61546:61602](),[27.61546][27.61546:61602](),[27.61602][27.718:774](),[27.774][27.61685:61735](),[27.61685][27.61685:61735](),[27.61735][27.775:828](),[27.828][27.61815:61885](),[27.61815][27.61815:61885](),[27.61885][27.829:892](),[27.892][27.61975:62053](),[27.61975][27.61975:62053](),[27.62053][27.893:960](),[27.960][27.62147:62207](),[27.62147][27.62147:62207](),[27.62207][27.961:1019](),[27.1019][27.62292:62352](),[27.62292][27.62292:62352](),[27.62352][27.1020:1078](),[27.1078][27.62437:62616](),[27.62437][27.62437:62616](),[27.62616][27.25562:25737](),[27.25737][27.7637:7710](),[27.62787][27.7637:7710](),[27.7710][27.25738:25881](),[27.25881][17.0:122](),[17.122][27.62979:63032](),[27.458][27.62979:63032](),[27.22914][27.62979:63032](),[27.25963][27.62979:63032](),[27.62979][27.62979:63032](),[27.63032][27.1079:1133](),[27.1133][27.63113:63170](),[27.63113][27.63113:63170](),[27.63170][27.1134:1190](),[27.1190][27.63253:63316](),[27.63253][27.63253:63316](),[27.63316][27.1191:1250](),[27.1250][27.63402:63457](),[27.63402][27.63402:63457](),[27.63457][27.1251:1306](),[27.1306][27.22915:22966](),[27.63539][27.22915:22966](),[27.22966][27.1307:1360](),[27.1360][27.539904:539914](),[27.23046][27.539904:539914](),[27.63539][27.539904:539914](),[27.539904][27.539904:539914](),[27.539914][27.63540:63598](),[27.63598][27.1361:1418](),[27.1418][27.63682:63796](),[27.63682][27.63682:63796](),[27.63796][27.25964:26018](),[27.26018][2.0:126]()
    use ::sanakirja::debug::Check;
    debug!("check: internal 0x{:x}", self.internal.db);
    self.internal.add_refs(&self.txn, refs).unwrap();
    debug!("check: external 0x{:x}", self.external.db);
    self.external.add_refs(&self.txn, refs).unwrap();
    debug!("check: inodes 0x{:x}", self.inodes.db);
    self.inodes.add_refs(&self.txn, refs).unwrap();
    debug!("check: revinodes 0x{:x}", self.revinodes.db);
    self.revinodes.add_refs(&self.txn, refs).unwrap();
    debug!("check: tree 0x{:x}", self.tree.db);
    self.tree.add_refs(&self.txn, refs).unwrap();
    debug!("check: revtree 0x{:x}", self.revtree.db);
    self.revtree.add_refs(&self.txn, refs).unwrap();
    debug!("check: revdep 0x{:x}", self.revdep.db);
    self.revdep.add_refs(&self.txn, refs).unwrap();
    debug!("check: dep 0x{:x}", self.dep.db);
    self.dep.add_refs(&self.txn, refs).unwrap();
    debug!("check: touched_files 0x{:x}", self.touched_files.db);
    self.touched_files.add_refs(&self.txn, refs).unwrap();
    debug!("check: rev_touched_files 0x{:x}", self.rev_touched_files.db);
    self.rev_touched_files.add_refs(&self.txn, refs).unwrap();
    debug!("check: partials 0x{:x}", self.partials.db);
    self.partials.add_refs(&self.txn, refs).unwrap();
    debug!("check: channels 0x{:x}", self.channels.db);
    self.channels.add_refs(&self.txn, refs).unwrap();
    for x in btree::iter(&self.txn, &self.channels, None).unwrap() {
    let (name, tup) = x.unwrap();
    debug!("check: channel name: {:?}", name.as_str());
    let graph: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(tup.graph.into());
    let changes: Db<ChangeId, L64> = Db::from_page(tup.changes.into());
    let revchanges: UDb<L64, Pair<ChangeId, SerializedMerkle>> =
    UDb::from_page(tup.revchanges.into());
    let states: UDb<SerializedMerkle, L64> = UDb::from_page(tup.states.into());
    let tags: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> =
    Db::from_page(tup.tags.into());
    debug!("check: graph 0x{:x}", graph.db);
    graph.add_refs(&self.txn, refs).unwrap();
    debug!("check: changes 0x{:x}", changes.db);
    changes.add_refs(&self.txn, refs).unwrap();
    debug!("check: revchanges 0x{:x}", revchanges.db);
    revchanges.add_refs(&self.txn, refs).unwrap();
    debug!("check: states 0x{:x}", states.db);
    states.add_refs(&self.txn, refs).unwrap();
    debug!("check: tags 0x{:x}", tags.db);
    tags.add_refs(&self.txn, refs).unwrap();
    }
    debug!("check: remotes 0x{:x}", self.remotes.db);
    self.remotes.add_refs(&self.txn, refs).unwrap();
    for x in btree::iter(&self.txn, &self.remotes, None).unwrap() {
    let (name, tup) = x.unwrap();
    debug!("check: remote name: {:?}", name);
    let remote: UDb<L64, Pair<SerializedHash, SerializedMerkle>> =
    UDb::from_page(tup.remote.into());
    [27.330]
    [2.126]
    unsafe {
    use ::sanakirja::debug::Check;
    debug!("check: internal 0x{:x}", self.internal.db);
    self.internal.add_refs(&self.txn, refs).unwrap();
    debug!("check: external 0x{:x}", self.external.db);
    self.external.add_refs(&self.txn, refs).unwrap();
    debug!("check: inodes 0x{:x}", self.inodes.db);
    self.inodes.add_refs(&self.txn, refs).unwrap();
    debug!("check: revinodes 0x{:x}", self.revinodes.db);
    self.revinodes.add_refs(&self.txn, refs).unwrap();
    debug!("check: tree 0x{:x}", self.tree.db);
    self.tree.add_refs(&self.txn, refs).unwrap();
    debug!("check: revtree 0x{:x}", self.revtree.db);
    self.revtree.add_refs(&self.txn, refs).unwrap();
    debug!("check: revdep 0x{:x}", self.revdep.db);
    self.revdep.add_refs(&self.txn, refs).unwrap();
    debug!("check: dep 0x{:x}", self.dep.db);
    self.dep.add_refs(&self.txn, refs).unwrap();
    debug!("check: touched_files 0x{:x}", self.touched_files.db);
    self.touched_files.add_refs(&self.txn, refs).unwrap();
    debug!("check: rev_touched_files 0x{:x}", self.rev_touched_files.db);
    self.rev_touched_files.add_refs(&self.txn, refs).unwrap();
    debug!("check: partials 0x{:x}", self.partials.db);
    self.partials.add_refs(&self.txn, refs).unwrap();
    debug!("check: channels 0x{:x}", self.channels.db);
    self.channels.add_refs(&self.txn, refs).unwrap();
    for x in btree::iter(&self.txn, &self.channels, None).unwrap() {
    let (name, tup) = x.unwrap();
    debug!("check: channel name: {:?}", name.as_str());
    let graph: Db<Vertex<ChangeId>, SerializedEdge> = Db::from_page(tup.graph.into());
    let changes: Db<ChangeId, L64> = Db::from_page(tup.changes.into());
    let revchanges: UDb<L64, Pair<ChangeId, SerializedMerkle>> =
    UDb::from_page(tup.revchanges.into());
    let states: UDb<SerializedMerkle, L64> = UDb::from_page(tup.states.into());
    let tags: Db<L64, Pair<SerializedMerkle, SerializedMerkle>> =
    Db::from_page(tup.tags.into());
    debug!("check: graph 0x{:x}", graph.db);
    graph.add_refs(&self.txn, refs).unwrap();
    debug!("check: changes 0x{:x}", changes.db);
    changes.add_refs(&self.txn, refs).unwrap();
    debug!("check: revchanges 0x{:x}", revchanges.db);
    revchanges.add_refs(&self.txn, refs).unwrap();
    debug!("check: states 0x{:x}", states.db);
    states.add_refs(&self.txn, refs).unwrap();
    debug!("check: tags 0x{:x}", tags.db);
    tags.add_refs(&self.txn, refs).unwrap();
    }
    debug!("check: remotes 0x{:x}", self.remotes.db);
    self.remotes.add_refs(&self.txn, refs).unwrap();
    for x in btree::iter(&self.txn, &self.remotes, None).unwrap() {
    let (name, tup) = x.unwrap();
    debug!("check: remote name: {:?}", name);
    let remote: UDb<L64, Pair<SerializedHash, SerializedMerkle>> =
    UDb::from_page(tup.remote.into());
  • replacement in libpijul/src/pristine/sanakirja.rs at line 372
    [27.111][27.26111:26279](),[2.127][27.26111:26279](),[27.26111][27.26111:26279](),[27.26279][7.0:124](),[27.108][27.64103:64158](),[7.124][27.64103:64158](),[27.26279][27.64103:64158](),[27.64103][27.64103:64158](),[27.64158][27.1419:1474](),[27.1474][27.64240:64289](),[27.64240][27.64240:64289](),[27.64289][27.1475:1527](),[27.1527][27.64368:64423](),[27.64368][27.64368:64423](),[27.64423][27.1528:1583](),[27.1583][27.109:213]()
    let rev: UDb<SerializedHash, L64> = UDb::from_page(tup.rev.into());
    let states: UDb<SerializedMerkle, L64> = UDb::from_page(tup.states.into());
    let tags: UDb<L64, Pair<SerializedMerkle, SerializedMerkle>> =
    UDb::from_page(tup.tags.into());
    debug!("check: remote 0x{:x}", remote.db);
    remote.add_refs(&self.txn, refs).unwrap();
    debug!("check: rev 0x{:x}", rev.db);
    rev.add_refs(&self.txn, refs).unwrap();
    debug!("check: states 0x{:x}", states.db);
    states.add_refs(&self.txn, refs).unwrap();
    debug!("check: tags 0x{:x}", tags.db);
    tags.add_refs(&self.txn, refs).unwrap();
    [2.127]
    [27.541955]
    let rev: UDb<SerializedHash, L64> = UDb::from_page(tup.rev.into());
    let states: UDb<SerializedMerkle, L64> = UDb::from_page(tup.states.into());
    let tags: UDb<L64, Pair<SerializedMerkle, SerializedMerkle>> =
    UDb::from_page(tup.tags.into());
    debug!("check: remote 0x{:x}", remote.db);
    remote.add_refs(&self.txn, refs).unwrap();
    debug!("check: rev 0x{:x}", rev.db);
    rev.add_refs(&self.txn, refs).unwrap();
    debug!("check: states 0x{:x}", states.db);
    states.add_refs(&self.txn, refs).unwrap();
    debug!("check: tags 0x{:x}", tags.db);
    tags.add_refs(&self.txn, refs).unwrap();
    }
    ::sanakirja::debug::add_free_refs(&self.txn, refs).unwrap();
    ::sanakirja::debug::check_free(&self.txn, &refs);
  • edit in libpijul/src/pristine/sanakirja.rs at line 388
    [27.541965][27.1584:1653](),[27.1653][27.64580:64638](),[27.64580][27.64580:64638]()
    ::sanakirja::debug::add_free_refs(&self.txn, refs).unwrap();
    ::sanakirja::debug::check_free(&self.txn, &refs);
  • replacement in libpijul/src/pristine/sanakirja.rs at line 616
    [27.1967][27.62143:62226](),[27.68287][27.62143:62226]()
    let mut k = match cursor.set(txn, &key, None) {
    Ok(Some((k, _))) => k,
    [27.1967]
    [27.62226]
    debug!("key {:?}", key);
    let (mut k, v) = match cursor.set(txn, &key, None) {
    Ok(Some((k, v))) => (k, v),
  • replacement in libpijul/src/pristine/sanakirja.rs at line 620
    [27.62248][27.62248:62359]()
    if let Some((k, _)) = cursor.prev(txn).map_err(|x| BlockError::Txn(x.into()))? {
    k
    [27.62248]
    [27.62359]
    if let Some((k, v)) = cursor.prev(txn).map_err(|x| BlockError::Txn(x.into()))? {
    (k, v)
  • replacement in libpijul/src/pristine/sanakirja.rs at line 628
    [27.62535][27.62535:62586]()
    debug!("find_block_end: BLOCK ERROR");
    [27.62535]
    [27.62586]
    debug!("find_block_end: BLOCK ERROR 0");
  • edit in libpijul/src/pristine/sanakirja.rs at line 632
    [27.36466]
    [27.36581]
    debug!("cursor {:?} {:?}", k, v);
  • edit in libpijul/src/pristine/sanakirja.rs at line 1202
    [27.44210]
    [27.76131]
    debug!("unsafe load channel");
  • replacement in libpijul/src/pristine/sanakirja.rs at line 1375
    [27.26986][27.26986:27022](),[27.27022][27.98701:98762](),[27.63207][27.8251:8342](),[27.98762][27.8251:8342](),[27.550501][27.8251:8342](),[27.8342][27.27023:27084](),[27.27084][27.8411:8517](),[27.8411][27.8411:8517](),[27.8517][27.27085:27343](),[27.27343][27.3474:3539](),[27.3539][27.27343:27397](),[27.27343][27.27343:27397](),[27.27397][27.8718:9200](),[27.8718][27.8718:9200]()
    let name = name.to_owned();
    match self.open_remotes.lock().entry(name.clone()) {
    Entry::Vacant(v) => match btree::get(&self.txn, &self.remotes, &name, None)? {
    Some((name_, remote)) if name == *name_ => {
    debug!("load_remote: {:?} {:?}", name_, remote);
    let r = Remote {
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
    path: remote.path.to_owned(),
    };
    for x in btree::iter(&self.txn, &r.remote, None).unwrap() {
    debug!("remote -> {:?}", x);
    }
    for x in btree::iter(&self.txn, &r.rev, None).unwrap() {
    debug!("rev -> {:?}", x);
    }
    for x in btree::iter(&self.txn, &r.states, None).unwrap() {
    debug!("states -> {:?}", x);
    }
    [27.26986]
    [27.78508]
    unsafe {
    let name = name.to_owned();
    match self.open_remotes.lock().entry(name.clone()) {
    Entry::Vacant(v) => match btree::get(&self.txn, &self.remotes, &name, None)? {
    Some((name_, remote)) if name == *name_ => {
    debug!("load_remote: {:?} {:?}", name_, remote);
    let r = Remote {
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
    path: remote.path.to_owned(),
    };
    for x in btree::iter(&self.txn, &r.remote, None).unwrap() {
    debug!("remote -> {:?}", x);
    }
    for x in btree::iter(&self.txn, &r.rev, None).unwrap() {
    debug!("rev -> {:?}", x);
    }
    for x in btree::iter(&self.txn, &r.states, None).unwrap() {
    debug!("states -> {:?}", x);
    }
  • replacement in libpijul/src/pristine/sanakirja.rs at line 1399
    [27.78509][27.9201:9320]()
    for x in self.iter_remote(&r.remote, 0).unwrap() {
    debug!("ITER {:?}", x);
    [27.78509]
    [27.78894]
    for x in self.iter_remote(&r.remote, 0).unwrap() {
    debug!("ITER {:?}", x);
    }
    let r = RemoteRef {
    db: Arc::new(Mutex::new(r)),
    id: name,
    };
    Ok(Some(v.insert(r).clone()))
  • replacement in libpijul/src/pristine/sanakirja.rs at line 1409
    [27.78916][27.9321:9362](),[27.9362][27.63208:63261](),[27.63261][27.27398:27432](),[27.27432][27.9460:9533](),[27.9460][27.9460:9533](),[27.9533][27.551161:551179](),[27.47633][27.551161:551179](),[27.78957][27.551161:551179](),[27.551161][27.551161:551179](),[27.551179][27.9534:9587](),[27.9587][27.45322:45387](),[27.551193][27.45322:45387]()
    let r = RemoteRef {
    db: Arc::new(Mutex::new(r)),
    id: name,
    };
    Ok(Some(v.insert(r).clone()))
    }
    _ => return Ok(None),
    },
    Entry::Occupied(occ) => Ok(Some(occ.get().clone())),
    [27.78916]
    [27.551230]
    _ => return Ok(None),
    },
    Entry::Occupied(occ) => Ok(Some(occ.get().clone())),
    }
  • replacement in libpijul/src/pristine/sanakirja.rs at line 1508
    [27.48638][27.28068:28104](),[27.28104][27.98763:98824](),[27.63332][27.9588:9679](),[27.98824][27.9588:9679](),[27.555427][27.9588:9679](),[27.9679][27.28105:28166](),[27.28166][27.9748:9788](),[27.9748][27.9748:9788](),[27.9788][27.63333:63390](),[27.63390][27.28167:28441](),[27.28441][27.3540:3609](),[27.3609][27.28441:28499](),[27.28441][27.28441:28499](),[27.28499][27.10059:10088](),[27.10059][27.10059:10088](),[27.10088][27.28500:28534](),[27.28534][27.10132:10188](),[27.10132][27.10132:10188](),[27.10188][27.556087:556105](),[27.48698][27.556087:556105](),[27.81384][27.556087:556105](),[27.556087][27.556087:556105](),[27.556105][27.10189:10242](),[27.10242][27.556119:556156](),[27.556119][27.556119:556156]()
    let name = name.to_owned();
    match self.open_remotes.lock().entry(name.clone()) {
    Entry::Vacant(v) => match btree::get(&self.txn, &self.remotes, &name, None)? {
    Some((name_, remote)) if *name_ == name => {
    let r = RemoteRef {
    db: Arc::new(Mutex::new(Remote {
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
    path: remote.path.to_owned(),
    })),
    id: name,
    };
    v.insert(r);
    }
    _ => return Ok(None),
    },
    Entry::Occupied(_) => {}
    [27.48638]
    [27.556156]
    unsafe {
    let name = name.to_owned();
    match self.open_remotes.lock().entry(name.clone()) {
    Entry::Vacant(v) => match btree::get(&self.txn, &self.remotes, &name, None)? {
    Some((name_, remote)) if *name_ == name => {
    let r = RemoteRef {
    db: Arc::new(Mutex::new(Remote {
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
    path: remote.path.to_owned(),
    })),
    id: name,
    };
    v.insert(r);
    }
    _ => return Ok(None),
    },
    Entry::Occupied(_) => {}
    }
    Ok(self.open_remotes.lock().get(&name).cloned())
  • edit in libpijul/src/pristine/sanakirja.rs at line 1532
    [27.556166][27.98825:98882]()
    Ok(self.open_remotes.lock().get(&name).cloned())
  • replacement in libpijul/src/pristine/sanakirja.rs at line 1992
    [27.52835][27.86749:86818](),[27.86818][27.563252:563283](),[27.563252][27.563252:563283](),[27.563283][27.99121:99196](),[27.48487][27.563351:563385](),[27.66689][27.563351:563385](),[27.99196][27.563351:563385](),[27.563351][27.563351:563385](),[27.563385][27.10301:10385](),[27.10385][27.0:79](),[27.79][27.66690:66748](),[27.66748][27.28535:28817](),[27.28817][27.4762:4826](),[27.4826][27.28882:29054](),[27.28882][27.28882:29054](),[27.25888][27.465:513](),[27.29054][27.465:513](),[27.465][27.465:513](),[27.571][27.571:623](),[27.623][27.11102:11175](),[27.11102][27.11102:11175]()
    let name = crate::small_string::SmallString::from_str(name);
    let mut commit = None;
    let result = match self.open_channels.lock().entry(name.clone()) {
    Entry::Vacant(v) => {
    let r = match btree::get(&self.txn, &self.channels, &name, None)? {
    Some((name_, b)) if name_ == name.as_ref() => ChannelRef {
    r: Arc::new(RwLock::new(Channel {
    graph: Db::from_page(b.graph.into()),
    changes: Db::from_page(b.changes.into()),
    revchanges: UDb::from_page(b.revchanges.into()),
    states: UDb::from_page(b.states.into()),
    tags: Db::from_page(b.tags.into()),
    apply_counter: b.apply_counter.into(),
    last_modified: b.last_modified.into(),
    id: b.id,
    name: name.clone(),
    })),
    },
    _ => {
    let br = ChannelRef {
    [27.52835]
    [27.66749]
    unsafe {
    let name = crate::small_string::SmallString::from_str(name);
    let mut commit = None;
    let result = match self.open_channels.lock().entry(name.clone()) {
    Entry::Vacant(v) => {
    let r = match btree::get(&self.txn, &self.channels, &name, None)? {
    Some((name_, b)) if name_ == name.as_ref() => ChannelRef {
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2000
    [27.66811][27.11237:11541](),[27.11237][27.11237:11541](),[27.11541][27.25889:25962](),[27.25962][27.29055:29509](),[27.25962][27.11541:11591](),[27.29509][27.11541:11591](),[27.11541][27.11541:11591](),[27.11591][27.25963:26013]()
    graph: btree::create_db_(&mut self.txn)?,
    changes: btree::create_db_(&mut self.txn)?,
    revchanges: btree::create_db_(&mut self.txn)?,
    states: btree::create_db_(&mut self.txn)?,
    tags: btree::create_db_(&mut self.txn)?,
    id: {
    let mut rng = rand::thread_rng();
    use rand::Rng;
    let mut x = RemoteId([0; 16]);
    for x in x.0.iter_mut() {
    *x = rng.gen()
    }
    x
    },
    apply_counter: 0,
    last_modified: 0,
    [27.66811]
    [27.11591]
    graph: Db::from_page(b.graph.into()),
    changes: Db::from_page(b.changes.into()),
    revchanges: UDb::from_page(b.revchanges.into()),
    states: UDb::from_page(b.states.into()),
    tags: Db::from_page(b.tags.into()),
    apply_counter: b.apply_counter.into(),
    last_modified: b.last_modified.into(),
    id: b.id,
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2010
    [27.11726][27.11726:11872](),[27.11872][27.48488:48524](),[27.564869][27.48488:48524]()
    };
    commit = Some(br.clone());
    br
    }
    };
    v.insert(r).clone()
    [27.11726]
    [27.564898]
    },
    _ => {
    let br = ChannelRef {
    r: Arc::new(RwLock::new(Channel {
    graph: btree::create_db_(&mut self.txn)?,
    changes: btree::create_db_(&mut self.txn)?,
    revchanges: btree::create_db_(&mut self.txn)?,
    states: btree::create_db_(&mut self.txn)?,
    tags: btree::create_db_(&mut self.txn)?,
    id: {
    let mut rng = rand::thread_rng();
    use rand::Rng;
    let mut x = RemoteId([0; 16]);
    for x in x.0.iter_mut() {
    *x = rng.gen()
    }
    x
    },
    apply_counter: 0,
    last_modified: 0,
    name: name.clone(),
    })),
    };
    commit = Some(br.clone());
    br
    }
    };
    v.insert(r).clone()
    }
    Entry::Occupied(occ) => occ.get().clone(),
    };
    if let Some(commit) = commit {
    self.put_channel(commit)?;
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2044
    [27.564912][27.48525:48591](),[27.48591][27.564959:564998](),[27.564959][27.564959:564998](),[27.564998][27.317:356]()
    Entry::Occupied(occ) => occ.get().clone(),
    };
    if let Some(commit) = commit {
    self.put_channel(commit)?;
    [27.564912]
    [27.565045]
    Ok(result)
  • edit in libpijul/src/pristine/sanakirja.rs at line 2046
    [27.565055][27.48592:48611]()
    Ok(result)
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2128
    [27.169][27.0:68](),[27.68][27.169:218](),[27.169][27.169:218](),[27.218][27.99538:99625](),[27.99625][27.67401:67454](),[27.67401][27.67401:67454](),[27.67454][27.3664:3783](),[27.363][27.3664:3783](),[27.3783][27.99626:99657](),[27.67512][27.476:627](),[27.99657][27.476:627](),[27.476][27.476:627](),[27.627][27.0:30](),[27.30][27.627:780](),[27.627][27.627:780]()
    debug!(target: "drop_channel", "drop channel {:?}", name0);
    let name = SmallString::from_str(name0);
    let channel = if let Some(channel) = self.open_channels.lock().remove(&name) {
    let channel = Arc::try_unwrap(channel.r)
    .map_err(|_| SanakirjaError::ChannelRc {
    c: name0.to_string(),
    })?
    .into_inner();
    Some((
    channel.graph,
    channel.changes,
    channel.revchanges,
    channel.states,
    channel.tags,
    ))
    } else if let Some((name_, chan)) = btree::get(&self.txn, &self.channels, &name, None)? {
    if name_ == name.as_ref() {
    [27.169]
    [27.780]
    unsafe {
    debug!(target: "drop_channel", "drop channel {:?}", name0);
    let name = SmallString::from_str(name0);
    let channel = if let Some(channel) = self.open_channels.lock().remove(&name) {
    let channel = Arc::try_unwrap(channel.r)
    .map_err(|_| SanakirjaError::ChannelRc {
    c: name0.to_string(),
    })?
    .into_inner();
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2138
    [27.803][27.29893:30119](),[27.30119][27.4827:4880]()
    Db::from_page(chan.graph.into()),
    Db::from_page(chan.changes.into()),
    UDb::from_page(chan.revchanges.into()),
    UDb::from_page(chan.states.into()),
    Db::from_page(chan.tags.into()),
    [27.803]
    [27.1017]
    channel.graph,
    channel.changes,
    channel.revchanges,
    channel.states,
    channel.tags,
  • edit in libpijul/src/pristine/sanakirja.rs at line 2144
    [27.1036]
    [27.1036]
    } else if let Some((name_, chan)) = btree::get(&self.txn, &self.channels, &name, None)?
    {
    if name_ == name.as_ref() {
    Some((
    Db::from_page(chan.graph.into()),
    Db::from_page(chan.changes.into()),
    UDb::from_page(chan.revchanges.into()),
    UDb::from_page(chan.states.into()),
    Db::from_page(chan.tags.into()),
    ))
    } else {
    None
    }
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2159
    [27.1078][27.1078:1137](),[27.1137][27.0:69](),[27.69][27.86:135](),[27.135][27.0:151](),[27.1183][27.0:151](),[27.190][27.99658:99702](),[27.99702][5.442:501](),[5.501][27.2052:2243](),[27.99702][27.2052:2243](),[27.441][27.2052:2243](),[27.2243][27.740:926](),[27.926][27.2243:2281](),[27.2243][27.2243:2281]()
    }
    } else {
    None
    };
    btree::del(&mut self.txn, &mut self.channels, &name, None)?;
    if let Some((a, b, c, d, e)) = channel {
    let mut unused_changes = Vec::new();
    'outer: for x in btree::rev_iter(&self.txn, &c, None)? {
    let (_, p) = x?;
    let chan = chan.read();
    assert_ne!(chan.name.as_str(), name0);
    if self
    .channel_has_state(&chan.states, &p.b)
    .map_err(|e| e.0)?
    .is_some()
    {
    // This other channel is in the same state as
    // our dropped channel is, so all subsequent
    // patches are in use.
    break 'outer;
    [27.1078]
    [27.574]
    };
    btree::del(&mut self.txn, &mut self.channels, &name, None)?;
    if let Some((a, b, c, d, e)) = channel {
    let mut unused_changes = Vec::new();
    'outer: for x in btree::rev_iter(&self.txn, &c, None)? {
    let (_, p) = x?;
    debug!(target: "drop_channel", "testing unused change: {:?}", p);
    for chan in self.channels("").map_err(|e| e.0)? {
    debug!(target: "drop_channel", "channel: {:?}", name);
    let chan = chan.read();
    assert_ne!(chan.name.as_str(), name0);
    if self
    .channel_has_state(&chan.states, &p.b)
    .map_err(|e| e.0)?
    .is_some()
    {
    // This other channel is in the same state as
    // our dropped channel is, so all subsequent
    // patches are in use.
    break 'outer;
    }
    if self
    .get_changeset(&chan.changes, &p.a)
    .map_err(|e| e.0)?
    .is_some()
    {
    // This channel has a patch, move on.
    continue 'outer;
    }
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2189
    [27.596][27.2282:2470](),[27.2470][27.927:989](),[27.989][27.2470:2511](),[27.2470][27.2470:2511]()
    if self
    .get_changeset(&chan.changes, &p.a)
    .map_err(|e| e.0)?
    .is_some()
    {
    // This channel has a patch, move on.
    continue 'outer;
    [27.596]
    [27.729]
    debug!(target: "drop_channel", "actually unused: {:?}", p);
    unused_changes.push(p.a);
    }
    let mut deps = Vec::new();
    for ch in unused_changes.iter() {
    for x in btree::iter(&self.txn, &self.dep, Some((ch, None)))? {
    let (k, v) = x?;
    if k > ch {
    break;
    }
    deps.push((*k, *v));
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2202
    [27.751][27.751:769](),[27.769][27.990:1067](),[27.1067][27.769:825](),[27.769][27.769:825](),[27.825][27.70:109](),[27.109][27.825:871](),[27.825][27.825:871](),[27.871][27.110:259](),[27.259][27.2512:2543]()
    }
    debug!(target: "drop_channel", "actually unused: {:?}", p);
    unused_changes.push(p.a);
    }
    let mut deps = Vec::new();
    for ch in unused_changes.iter() {
    for x in btree::iter(&self.txn, &self.dep, Some((ch, None)))? {
    let (k, v) = x?;
    if k > ch {
    break;
    [27.751]
    [27.289]
    for (k, v) in deps.drain(..) {
    debug!(target: "drop_channel", "deleting from revdep: {:?} {:?}", k, v);
    btree::del(&mut self.txn, &mut self.dep, &k, Some(&v))?;
    btree::del(&mut self.txn, &mut self.revdep, &v, Some(&k))?;
  • edit in libpijul/src/pristine/sanakirja.rs at line 2207
    [27.311][27.311:352]()
    deps.push((*k, *v));
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2208
    [27.370][27.370:417](),[27.417][27.1068:1238](),[27.1238][27.497:595](),[27.497][27.497:595]()
    for (k, v) in deps.drain(..) {
    debug!(target: "drop_channel", "deleting from revdep: {:?} {:?}", k, v);
    btree::del(&mut self.txn, &mut self.dep, &k, Some(&v))?;
    btree::del(&mut self.txn, &mut self.revdep, &v, Some(&k))?;
    }
    [27.370]
    [27.1028]
    btree::drop(&mut self.txn, a)?;
    btree::drop(&mut self.txn, b)?;
    btree::drop(&mut self.txn, c)?;
    btree::drop(&mut self.txn, d)?;
    btree::drop(&mut self.txn, e)?;
    Ok(true)
    } else {
    Ok(false)
  • edit in libpijul/src/pristine/sanakirja.rs at line 2217
    [27.1042][27.1183:1359](),[27.1183][27.1183:1359](),[27.1359][27.191:235](),[27.235][27.596:656](),[27.1359][27.596:656]()
    btree::drop(&mut self.txn, a)?;
    btree::drop(&mut self.txn, b)?;
    btree::drop(&mut self.txn, c)?;
    btree::drop(&mut self.txn, d)?;
    btree::drop(&mut self.txn, e)?;
    Ok(true)
    } else {
    Ok(false)
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2225
    [27.30318][27.568157:568188](),[27.90802][27.568157:568188](),[27.568157][27.568157:568188](),[27.568188][27.99703:99754](),[27.30379][27.568255:568289](),[27.67583][27.568255:568289](),[27.99754][27.568255:568289](),[27.568255][27.568255:568289](),[27.568289][27.30380:30534](),[27.30534][27.67584:67641](),[27.12543][27.67584:67641](),[27.67641][27.30535:30809](),[27.30809][27.3746:3815](),[27.3815][27.30809:30872](),[27.30809][27.30809:30872](),[27.30872][27.12814:12843](),[27.12814][27.12814:12843](),[27.12843][27.30873:30901](),[27.30901][27.12887:12982](),[27.12887][27.12887:12982]()
    let mut commit = None;
    match self.open_remotes.lock().entry(id) {
    Entry::Vacant(v) => {
    let r = match btree::get(&self.txn, &self.remotes, &id, None)? {
    Some((name_, remote)) if *name_ == id => RemoteRef {
    db: Arc::new(Mutex::new(Remote {
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
    path: SmallString::from_str(path),
    })),
    id,
    },
    _ => {
    let br = RemoteRef {
    [27.30318]
    [27.67642]
    unsafe {
    let mut commit = None;
    match self.open_remotes.lock().entry(id) {
    Entry::Vacant(v) => {
    let r = match btree::get(&self.txn, &self.remotes, &id, None)? {
    Some((name_, remote)) if *name_ == id => RemoteRef {
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2232
    [27.67703][27.13044:13266](),[27.13044][27.13044:13266](),[27.13266][27.30902:30955](),[27.30955][27.3816:3888]()
    remote: btree::create_db_(&mut self.txn)?,
    rev: btree::create_db_(&mut self.txn)?,
    states: btree::create_db_(&mut self.txn)?,
    id_rev: 0u64.into(),
    tags: btree::create_db(&mut self.txn)?,
    [27.67703]
    [27.30955]
    remote: UDb::from_page(remote.remote.into()),
    rev: UDb::from_page(remote.rev.into()),
    states: UDb::from_page(remote.states.into()),
    id_rev: remote.id_rev.into(),
    tags: Db::from_page(remote.tags.into()),
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2240
    [27.31055][27.13347:13493](),[27.13347][27.13347:13493](),[27.13493][27.569306:569335](),[27.569306][27.569306:569335]()
    };
    commit = Some(br.clone());
    br
    }
    };
    v.insert(r);
    [27.31055]
    [27.569335]
    },
    _ => {
    let br = RemoteRef {
    db: Arc::new(Mutex::new(Remote {
    remote: btree::create_db_(&mut self.txn)?,
    rev: btree::create_db_(&mut self.txn)?,
    states: btree::create_db_(&mut self.txn)?,
    id_rev: 0u64.into(),
    tags: btree::create_db(&mut self.txn)?,
    path: SmallString::from_str(path),
    })),
    id,
    };
    commit = Some(br.clone());
    br
    }
    };
    v.insert(r);
    }
    Entry::Occupied(_) => {}
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2261
    [27.569349][27.569349:569386]()
    Entry::Occupied(_) => {}
    [27.569349]
    [27.569386]
    if let Some(commit) = commit {
    self.put_remotes(commit)?;
    }
    Ok(self.open_remotes.lock().get(&id).unwrap().clone())
  • edit in libpijul/src/pristine/sanakirja.rs at line 2266
    [27.569396][27.569396:569435](),[27.569435][27.2750:2789](),[27.2789][27.569482:569492](),[27.569482][27.569482:569492](),[27.569492][27.99755:99818]()
    if let Some(commit) = commit {
    self.put_remotes(commit)?;
    }
    Ok(self.open_remotes.lock().get(&id).unwrap().clone())
  • edit in libpijul/src/pristine/sanakirja.rs at line 2325
    [27.2151][27.92330:92526](),[27.68505][27.92330:92526](),[27.571127][27.92330:92526]()
    self.txn.set_root(Root::Tree as usize, self.tree.db);
    self.txn.set_root(Root::RevTree as usize, self.revtree.db);
    self.txn.set_root(Root::Inodes as usize, self.inodes.db);
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2326
    [27.13511][27.13511:13579](),[27.13579][27.92598:92942](),[27.92598][27.92598:92942]()
    .set_root(Root::RevInodes as usize, self.revinodes.db);
    self.txn.set_root(Root::Internal as usize, self.internal.db);
    self.txn.set_root(Root::External as usize, self.external.db);
    self.txn.set_root(Root::RevDep as usize, self.revdep.db);
    self.txn.set_root(Root::Channels as usize, self.channels.db);
    self.txn.set_root(Root::Remotes as usize, self.remotes.db);
    [27.13511]
    [27.571712]
    .set_root(Root::Tree as usize, u64::from(self.tree.db).into());
    self.txn
    .set_root(Root::RevTree as usize, u64::from(self.revtree.db).into());
    self.txn
    .set_root(Root::Inodes as usize, u64::from(self.inodes.db).into());
    self.txn
    .set_root(Root::RevInodes as usize, self.revinodes.db.into());
    self.txn
    .set_root(Root::Internal as usize, self.internal.db.into());
    self.txn
    .set_root(Root::External as usize, self.external.db.into());
    self.txn
    .set_root(Root::RevDep as usize, self.revdep.db.into());
    self.txn
    .set_root(Root::Channels as usize, self.channels.db.into());
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2342
    [27.571729][27.92943:93078]()
    .set_root(Root::TouchedFiles as usize, self.touched_files.db);
    self.txn.set_root(Root::Dep as usize, self.dep.db);
    [27.571729]
    [27.571858]
    .set_root(Root::Remotes as usize, self.remotes.db.into());
  • edit in libpijul/src/pristine/sanakirja.rs at line 2344
    [27.571875]
    [27.572022]
    .set_root(Root::TouchedFiles as usize, self.touched_files.db.into());
    self.txn.set_root(Root::Dep as usize, self.dep.db.into());
    self.txn.set_root(
    Root::RevTouchedFiles as usize,
    self.rev_touched_files.db.into(),
    );
    self.txn
    .set_root(Root::Partials as usize, self.partials.db.into());
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2364
    [27.48706][27.572161:572209](),[27.53620][27.572161:572209](),[27.572161][27.572161:572209](),[27.572209][27.93232:93300](),[27.93300][27.132:192](),[27.192][27.13580:13648](),[27.93384][27.13580:13648](),[27.13648][27.93452:93486](),[27.93452][27.93452:93486](),[27.93486][27.31606:31856](),[27.31856][27.4881:4937](),[27.4937][27.31913:32061](),[27.31913][27.31913:32061](),[27.26316][27.93824:93870](),[27.32061][27.93824:93870](),[27.93824][27.93824:93870]()
    let name = SmallString::from_str(name);
    match btree::get(&self.txn, &self.channels, &name, None)? {
    Some((name_, c)) if name.as_ref() == name_ => {
    debug!("load_const_channel = {:?} {:?}", name_, c);
    Ok(Some(Channel {
    graph: Db::from_page(c.graph.into()),
    changes: Db::from_page(c.changes.into()),
    revchanges: UDb::from_page(c.revchanges.into()),
    states: UDb::from_page(c.states.into()),
    tags: Db::from_page(c.tags.into()),
    apply_counter: c.apply_counter.into(),
    last_modified: c.last_modified.into(),
    id: c.id,
    name,
    }))
    [27.48706]
    [27.93870]
    unsafe {
    let name = SmallString::from_str(name);
    match btree::get(&self.txn, &self.channels, &name, None)? {
    Some((name_, c)) if name.as_ref() == name_ => {
    debug!("load_const_channel = {:?} {:?}", name_, c);
    Ok(Some(Channel {
    graph: Db::from_page(c.graph.into()),
    changes: Db::from_page(c.changes.into()),
    revchanges: UDb::from_page(c.revchanges.into()),
    states: UDb::from_page(c.states.into()),
    tags: Db::from_page(c.tags.into()),
    apply_counter: c.apply_counter.into(),
    last_modified: c.last_modified.into(),
    id: c.id,
    name,
    }))
    }
    _ => Ok(None),
  • edit in libpijul/src/pristine/sanakirja.rs at line 2383
    [27.93884][27.13649:13676]()
    _ => Ok(None),
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2402
    [27.32099][27.32099:32333]()
    graph: channel.graph.db.into(),
    changes: channel.changes.db.into(),
    revchanges: channel.revchanges.db.into(),
    states: channel.states.db.into(),
    tags: channel.tags.db.into(),
    [27.32099]
    [27.32333]
    graph: u64::from(channel.graph.db).into(),
    changes: u64::from(channel.changes.db).into(),
    revchanges: u64::from(channel.revchanges.db).into(),
    states: u64::from(channel.states.db).into(),
    tags: u64::from(channel.tags.db).into(),
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2426
    [27.32678][27.32678:32795]()
    _remote: r.remote.db.into(),
    _rev: r.rev.db.into(),
    _states: r.states.db.into(),
    [27.32678]
    [27.32795]
    _remote: u64::from(r.remote.db).into(),
    _rev: u64::from(r.rev.db).into(),
    _states: u64::from(r.states.db).into(),
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2430
    [27.32833][27.43445:43482]()
    _tags: r.tags.db.into(),
    [27.32833]
    [27.32833]
    _tags: u64::from(r.tags.db).into(),
  • edit in libpijul/src/pristine/sanakirja.rs at line 2446
    [27.576098][27.94946:94965](),[27.94965][27.706:748](),[27.748][27.576850:576851](),[27.2428][27.576850:576851](),[27.94965][27.576850:576851](),[27.576850][27.576850:576851]()
    direct_repr!(L64);
    impl ::sanakirja::debug::Check for L64 {}
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2480
    [27.580114][27.95644:95693]()
    unsafe fn write_to_page(&self, p: *mut u8) {
    [27.580114]
    [27.95693]
    unsafe fn write_to_page<T: AllocPage>(&self, t: &mut T, p: *mut u8) {
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2482
    [27.95745][27.95745:95791]()
    self.basename.write_to_page(p.add(8))
    [27.95745]
    [27.580261]
    self.basename.write_to_page(t, p.add(8))
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2559
    [27.584822][27.97617:97699]()
    unsafe fn write_to_page(&self, p: *mut u8) {
    self.a.write_to_page(p);
    [27.584822]
    [27.97699]
    unsafe fn write_to_page<T: sanakirja::AllocPage>(&self, t: &mut T, p: *mut u8) {
    self.a.write_to_page(t, p);
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2562
    [27.97769][27.97769:97811]()
    self.b.write_to_page(p.add(off));
    [27.97769]
    [27.584945]
    self.b.write_to_page(t, p.add(off));
  • replacement in libpijul/src/pristine/sanakirja.rs at line 2594
    [27.33816][27.33816:33865]()
    unsafe fn write_to_page(&self, p: *mut u8) {
    [27.33816]
    [27.33865]
    unsafe fn write_to_page<T: sanakirja::AllocPage>(&self, _: &mut T, p: *mut u8) {
  • edit in libpijul/src/pristine/sanakirja.rs at line 2636
    [27.571875][27.93079:93231](),[27.151][27.69:151](),[27.151][5.375:441](),[5.441][27.664:739](),[27.664][27.664:739]()
    .set_root(Root::RevTouchedFiles as usize, self.rev_touched_files.db);
    self.txn.set_root(Root::Partials as usize, self.partials.db);
    debug!(target: "drop_channel", "testing unused change: {:?}", p);
    for chan in self.channels("").map_err(|e| e.0)? {
    debug!(target: "drop_channel", "channel: {:?}", name);
  • resolve order conflict in libpijul/src/pristine/sanakirja.rs at line 2636
    [27.1439]
  • edit in libpijul/src/pristine/mod.rs at line 4
    [27.68821]
    [27.100436]
    pub use ::sanakirja::L64;
  • edit in libpijul/src/pristine/mod.rs at line 25
    [27.98674][27.98674:99750]()
    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
    pub struct L64(pub u64);
    impl From<usize> for L64 {
    fn from(u: usize) -> Self {
    L64((u as u64).to_le())
    }
    }
    impl From<u64> for L64 {
    fn from(u: u64) -> Self {
    L64(u.to_le())
    }
    }
    impl From<L64> for u64 {
    fn from(u: L64) -> Self {
    u64::from_le(u.0)
    }
    }
    impl From<L64> for usize {
    fn from(u: L64) -> Self {
    u64::from_le(u.0) as usize
    }
    }
    impl L64 {
    pub fn as_u64(&self) -> u64 {
    u64::from_le(self.0)
    }
    pub fn as_usize(&self) -> usize {
    u64::from_le(self.0) as usize
    }
    }
    impl std::fmt::Display for L64 {
    fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::fmt::Result {
    self.0.fmt(fmt)
    }
    }
    impl Ord for L64 {
    fn cmp(&self, x: &Self) -> std::cmp::Ordering {
    u64::from_le(self.0).cmp(&u64::from_le(x.0))
    }
    }
    impl PartialOrd for L64 {
    fn partial_cmp(&self, x: &Self) -> Option<std::cmp::Ordering> {
    Some(u64::from_le(self.0).cmp(&u64::from_le(x.0)))
    }
    }
  • edit in libpijul/src/pristine/mod.rs at line 26
    [27.99751][27.99751:100342](),[27.100342][27.14267:14362](),[27.14362][27.100457:100688](),[27.100457][27.100457:100688]()
    impl std::ops::Add<L64> for L64 {
    type Output = Self;
    fn add(self, x: L64) -> L64 {
    L64((u64::from_le(self.0) + u64::from_le(x.0)).to_le())
    }
    }
    impl std::ops::Add<usize> for L64 {
    type Output = Self;
    fn add(self, x: usize) -> L64 {
    L64((u64::from_le(self.0) + x as u64).to_le())
    }
    }
    impl std::ops::SubAssign<usize> for L64 {
    fn sub_assign(&mut self, x: usize) {
    self.0 = ((u64::from_le(self.0)) - x as u64).to_le()
    }
    }
    impl L64 {
    pub fn from_slice_le(s: &[u8]) -> Self {
    let mut u = 0u64;
    assert!(s.len() >= 8);
    unsafe { std::ptr::copy_nonoverlapping(s.as_ptr(), &mut u as *mut u64 as *mut u8, 8) }
    L64(u)
    }
    pub fn to_slice_le(&self, s: &mut [u8]) {
    assert!(s.len() >= 8);
    unsafe {
    std::ptr::copy_nonoverlapping(&self.0 as *const u64 as *const u8, s.as_mut_ptr(), 8)
    }
    }
    }
  • replacement in libpijul/src/pristine/edge.rs at line 166
    [27.119378][27.119378:119421]()
    let pos = u64::from_le((pos.0).0);
    [27.119378]
    [27.17262]
    let pos = pos.0.as_u64();
  • replacement in libpijul/src/output/archive.rs at line 267
    [27.1275][27.5649:5681](),[27.5681][27.5221:5325]()
    let mut l =
    crate::alive::retrieve(&*txn_, txn_.graph(&channel_), output_item.pos, false)?;
    [27.1275]
    [27.0]
    let mut l = crate::alive::retrieve(
    &*txn_,
    txn_.graph(&channel_),
    output_item.pos,
    false,
    )?;
  • replacement in libpijul/src/diff/replace.rs at line 307
    [9.100][9.100:130]()
    break
    [9.100]
    [27.790553]
    break;
  • replacement in libpijul/src/change.rs at line 304
    [20.239][20.239:290]()
    return Err(MakeChangeError::InvalidChange)
    [20.239]
    [20.290]
    return Err(MakeChangeError::InvalidChange);
  • replacement in libpijul/src/change.rs at line 343
    [20.428][20.428:479]()
    return Err(MakeChangeError::InvalidChange)
    [20.428]
    [20.479]
    return Err(MakeChangeError::InvalidChange);
  • replacement in libpijul/src/change.rs at line 1449
    [27.140483][27.0:83]()
    info!("compressing with ZStd {}", zstd_seekable::version().to_str().unwrap());
    [27.140483]
    [18.25]
    info!(
    "compressing with ZStd {}",
    zstd_seekable::version().to_str().unwrap()
    );
  • replacement in libpijul/src/change/text_changes.rs at line 29
    [20.1212][20.1212:1255]()
    MakeChange(#[from]MakeChangeError<T>),
    [20.1212]
    [27.38343]
    MakeChange(#[from] MakeChangeError<T>),
  • replacement in libpijul/src/change/text_changes.rs at line 202
    [27.10351][27.122912:122944](),[27.59097][27.122912:122944](),[27.43188][27.122912:122944](),[27.122944][20.1301:1380]()
    let (mut deps, extra) =
    dependencies(txn, &channel.read(), change.hashed.changes.iter())?;
    [27.59097]
    [27.43278]
    let (mut deps, extra) = dependencies(txn, &channel.read(), change.hashed.changes.iter())?;
  • replacement in libpijul/src/change/text_changes.rs at line 333
    [27.13315][27.13315:13395]()
    start: new_vertex.start.0 .0,
    end: new_vertex.end.0 .0,
    [27.13315]
    [27.13395]
    start: new_vertex.start.0.as_u64(),
    end: new_vertex.end.0.as_u64(),
  • replacement in libpijul/src/change/text_changes.rs at line 350
    [27.14013][27.14013:14056]()
    to_end: c.to.end.0 .0,
    [27.14013]
    [27.14056]
    to_end: c.to.end.0.as_u64(),
  • replacement in libpijul/src/change/text_changes.rs at line 374
    [27.14841][27.14841:14896]()
    end: ChangePosition(L64(edge.to_end)),
    [27.14841]
    [27.14896]
    end: ChangePosition(L64(edge.to_end.to_le())),
  • replacement in libpijul/src/change/text_changes.rs at line 500
    [27.17922][27.17922:18008]()
    start: n.start.0 .0,
    end: n.end.0 .0,
    [27.17922]
    [27.18008]
    start: n.start.0.as_u64(),
    end: n.end.0.as_u64(),
  • replacement in libpijul/src/change/text_changes.rs at line 598
    [27.1936][27.1936:1981]()
    start: n.start.0 .0,
    [27.1936]
    [27.1981]
    start: n.start.0.as_u64(),
  • replacement in libpijul/src/change/text_changes.rs at line 1184
    [27.88087][27.36064:36103]()
    PrintablePos(change, pos.pos.0 .0)
    [27.88087]
    [27.88142]
    PrintablePos(change, pos.pos.0.as_u64())
  • replacement in libpijul/src/change/parse.rs at line 396
    [23.11153][23.11153:11262]()
    parse(i)
    .map_err(|_| nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Verify)))
    [23.11153]
    [27.7469]
    parse(i).map_err(|_| nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Verify)))
  • replacement in libpijul/src/change/parse.rs at line 408
    [23.11519][23.11519:11628]()
    parse(i)
    .map_err(|_| nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Verify)))
    [23.11519]
    [27.7827]
    parse(i).map_err(|_| nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Verify)))
  • replacement in libpijul/src/apply.rs at line 583
    [25.319][25.319:345]()
    is_on_path: false
    [25.319]
    [25.345]
    is_on_path: false,
  • edit in libpijul/src/apply.rs at line 589
    [25.394][27.2083:2084](),[27.2083][27.2083:2084]()
  • replacement in libpijul/src/apply.rs at line 591
    [25.512][25.512:533]()
    continue
    [25.512]
    [25.533]
    continue;
  • replacement in libpijul/src/apply.rs at line 595
    [25.581][25.581:640]()
    stack.push(StackElt { is_on_path: true, .. elt });
    [25.581]
    [25.640]
    stack.push(StackElt {
    is_on_path: true,
    ..elt
    });
  • replacement in libpijul/src/apply.rs at line 607
    [27.2385][25.747:849]()
    for e in iter_adjacent(txn, channel, elt.vertex, EdgeFlags::empty(), EdgeFlags::all())? {
    [27.2385]
    [27.2484]
    for e in iter_adjacent(
    txn,
    channel,
    elt.vertex,
    EdgeFlags::empty(),
    EdgeFlags::all(),
    )? {
  • replacement in libpijul/src/apply.rs at line 625
    [26.185][26.185:219]()
    return Ok(())
    [26.185]
    [27.2817]
    return Ok(());
  • replacement in libpijul/src/apply.rs at line 633
    [25.1049][25.1049:1091]()
    is_on_path: false
    [25.1049]
    [25.1091]
    is_on_path: false,
  • edit in libpijul/src/apply.rs at line 640
    [25.1167][25.1167:1168]()
  • replacement in libpijul/src/apply.rs at line 651
    [25.1615][25.1615:1718]()
    if let Some(last_on_path) = (&stack[..len - 1]).iter().rev().position(|x| x.is_on_path) {
    [25.1615]
    [27.3174]
    if let Some(last_on_path) = (&stack[..len - 1]).iter().rev().position(|x| x.is_on_path)
    {
  • replacement in libpijul/src/apply.rs at line 934
    [27.8133][27.8133:8310](),[27.8310][27.1327:1384](),[27.1327][27.1327:1384]()
    if has_missing_context_nondeleted(
    txn,
    channel,
    change_id,
    e,
    )
    .map_err(LocalApplyError::from_missing)?
    [27.8133]
    [27.8311]
    if has_missing_context_nondeleted(txn, channel, change_id, e)
    .map_err(LocalApplyError::from_missing)?
  • edit in libpijul/src/apply.rs at line 1163
    [131.685]
    [132.1660]
    debug!(
    "change position {:?} {:?}",
    ChangePosition(1u64.into()),
    ChangePosition(1u64.into()).0.as_u64()
    );
  • replacement in libpijul/src/apply/vertex.rs at line 117
    [27.378][27.378:434]()
    return Err(LocalApplyError::Corruption)
    [27.378]
    [27.434]
    return Err(LocalApplyError::Corruption);
  • replacement in libpijul/src/apply/vertex.rs at line 165
    [27.685][27.685:745]()
    return Err(LocalApplyError::Corruption)
    [27.685]
    [27.745]
    return Err(LocalApplyError::Corruption);
  • replacement in libpijul/src/alive/retrieve.rs at line 50
    [27.7881][27.7881:7906]()
    continue
    [27.7881]
    [27.7906]
    continue;
  • replacement in libpijul/Cargo.toml at line 99
    [27.1022980][15.0:82]()
    sanakirja = { version = "1.3", default-features = false, features = [ "crc32" ] }
    [27.1022980]
    [27.451]
    sanakirja = { version = "1.4.0", default-features = false, features = [ "crc32" ] }
  • edit in Cargo.toml at line 3
    [27.280][27.315972:315973](),[27.315972][27.315972:315973]()
  • replacement in Cargo.lock at line 2671
    [27.56744][15.83:101]()
    version = "1.3.3"
    [27.56744]
    [27.56763]
    version = "1.4.0"
  • replacement in Cargo.lock at line 2673
    [27.56828][15.102:180]()
    checksum = "766699f1bb95f2e358c1ec0945da82b40097ec29a3a61636833f5ff27071c392"
    [27.56828]
    [27.56906]
    checksum = "2b783ffdf047e99d9a2fd1d50724d72e9acdd74f157168d74fd70862f8e35236"
  • edit in Cargo.lock at line 2682
    [27.57021]
    [27.57021]
    "serde",
  • replacement in Cargo.lock at line 2688
    [27.57074][15.181:199]()
    version = "1.3.3"
    [27.57074]
    [27.57093]
    version = "1.4.0"
  • replacement in Cargo.lock at line 2690
    [27.57158][15.200:278]()
    checksum = "4b18ebf28e53f067c2867f2cbae572f5e5320c1074ad2f9e6ed309df22277de6"
    [27.57158]
    [27.57236]
    checksum = "e8278ad92194c3131827375ad63c7b59f167c0bbe83de1e63813929dd531e2c6"