record!

[?]
Feb 24, 2025, 12:57 PM
A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC

Dependencies

Change contents

  • edit in crates/libflowers_client/src/repo.rs at line 1
    [5.7]
    [8.7]
    use crate::identity::{PublicKey, SKey};
    use libflowers::prelude::*;
    use pijul::changestore::ChangeStore;
  • replacement in crates/libflowers_client/src/repo.rs at line 6
    [8.29][5.8:40](),[5.7][5.8:40]()
    use std::collections::BTreeSet;
    [8.29]
    [12.7]
    use std::collections::{BTreeMap, BTreeSet};
  • edit in crates/libflowers_client/src/repo.rs at line 9
    [8.75]
    [5.91]
    use std::sync::Arc;
  • edit in crates/libflowers_client/src/repo.rs at line 13
    [5.120][5.120:148]()
    use libflowers::prelude::*;
  • replacement in crates/libflowers_client/src/repo.rs at line 15
    [11.20][11.20:93]()
    working_copy, ChannelTxnT, Hash, MutTxnT, MutTxnTExt, TxnT, TxnTExt,
    [11.20]
    [11.93]
    working_copy, ChannelMutTxnT, ChannelTxnT, Hash, HashSet, MutTxnT,
    MutTxnTExt, TxnT, TxnTExt,
  • replacement in crates/libflowers_client/src/repo.rs at line 61
    [12.315][12.315:355]()
    #[derive(Debug, Clone, strum::Display)]
    [12.315]
    [12.355]
    #[derive(Clone, Derivative, strum::Display)]
    #[derivative(Debug)]
  • replacement in crates/libflowers_client/src/repo.rs at line 65
    [12.409][12.409:510]()
    AddUntrackedFile { path: String },
    RmAddedFile { path: String },
    Record { msg: String },
    [12.409]
    [5.466]
    AddUntrackedFile {
    path: String,
    },
    RmAddedFile {
    path: String,
    },
    Record {
    msg: String,
    #[derivative(Debug = "ignore")]
    sk: Arc<SKey>,
    },
  • replacement in crates/libflowers_client/src/repo.rs at line 111
    [12.1486][12.1486:1700]()
    loop {
    if let Some(msg) = msg_in_rx.recv().await {
    info!("Repo received msg {msg}");
    state = update(state, msg, &msg_out_tx).await;
    } else {
    break;
    }
    [12.1486]
    [5.589]
    while let Some(msg) = msg_in_rx.recv().await {
    info!("Repo received msg {msg}");
    state = update(state, msg, &msg_out_tx).await;
  • replacement in crates/libflowers_client/src/repo.rs at line 117
    [5.598][12.1701:1722]()
    async fn update<'a>(
    [5.598]
    [12.1722]
    async fn update(
  • replacement in crates/libflowers_client/src/repo.rs at line 154
    [12.2830][12.2830:2865]()
    MsgIn::Record { msg } => {
    [12.2830]
    [12.2865]
    MsgIn::Record { msg, sk } => {
  • replacement in crates/libflowers_client/src/repo.rs at line 156
    [12.2910][12.2910:2951]()
    record(&mut state, msg);
    [12.2910]
    [12.2951]
    record(&state, msg, sk);
  • replacement in crates/libflowers_client/src/repo.rs at line 198
    [5.1299][12.3279:3327]()
    fn record(state: &InternalState, msg: String) {
    [5.1299]
    [11.361]
    fn record(state: &InternalState, message: String, sk: Arc<SKey>) {
  • replacement in crates/libflowers_client/src/repo.rs at line 200
    [11.389][11.389:431]()
    let channel = current_channel(&repo);
    [11.389]
    [11.431]
    let channel = current_channel(repo);
  • replacement in crates/libflowers_client/src/repo.rs at line 203
    [11.486][11.486:561]()
    let mut channel = txn.read().load_channel(&channel).unwrap().unwrap();
    [11.486]
    [11.561]
    let channel = txn.read().load_channel(&channel).unwrap().unwrap();
  • replacement in crates/libflowers_client/src/repo.rs at line 222
    [11.1070][11.1070:1096]()
    let header = todo!();
    [11.1070]
    [11.1096]
    let PublicKey { key: pk, .. } = sk.public_key();
    let authors = vec![Author(BTreeMap::from_iter([("key".to_string(), pk)]))];
    let timestamp = Utc::now();
    let header = ChangeHeader {
    message,
    authors,
    // TODO: allow to set description
    description: None,
    timestamp,
    };
    txn.write()
    .apply_root_change_if_needed(
    &repo.changes,
    &channel,
    rand::thread_rng(),
    )
    .unwrap();
    let mut state = pijul::RecordBuilder::new();
    state
    .record(
    txn.clone(),
    pijul::Algorithm::default(),
    false,
    &pijul::DEFAULT_SEPARATOR,
    channel.clone(),
    &repo.working_copy,
    &repo.changes,
    "",
    1, // std::thread::available_parallelism()?.get(),
    )
    .unwrap();
    let rec = state.finish();
    if rec.actions.is_empty() {
    panic!("Nothing to record?");
    }
    {
    let mut txn_ = txn.write();
    let actions = rec
    .actions
    .into_iter()
    .map(|rec| rec.globalize(&*txn_).unwrap())
    .collect();
    let contents = Arc::try_unwrap(rec.contents).unwrap().into_inner();
    let mut change = LocalChange::make_change(
    &*txn_,
    &channel,
    actions,
    contents,
    header,
    vec![],
    )
    .unwrap();
    let current: HashSet<_> = change.dependencies.iter().cloned().collect();
    for dep in extra.into_iter() {
    if !current.contains(&dep) {
    change.dependencies.push(dep)
    }
    }
    let hash = repo
    .changes
    .save_change(&mut change, |change, hash| {
    change.unhashed = Some(serde_json::json!({
    "signature": sk.sign_raw(&hash.to_bytes()).unwrap(),
    }));
    Ok::<_, pijul::changestore::filesystem::Error>(())
    })
    .unwrap();
  • replacement in crates/libflowers_client/src/repo.rs at line 293
    [11.1097][11.1097:1170]()
    let repo_path = CanonicalPathBuf::canonicalize(&repo.path).unwrap();
    [11.1097]
    [11.1170]
    txn_.apply_local_change(&channel, &change, &hash, &rec.updatables)
    .unwrap();
    let mut path = repo.path.join(pijul::DOT_DIR);
    path.push("identities");
    std::fs::create_dir_all(&path).unwrap();
    let mut oldest = rec
    .oldest_change
    .duration_since(std::time::SystemTime::UNIX_EPOCH)
    .unwrap()
    .as_millis() as u64;
    if oldest == 0 {
    // If no diff was done at all, it means that no
    // existing file changed since last time (some
    // files may have been added, deleted or moved,
    // but `touch` isn't about those).
    oldest = std::time::SystemTime::now()
    .duration_since(std::time::SystemTime::UNIX_EPOCH)
    .unwrap()
    .as_millis() as u64;
    }
    txn_.touch_channel(&mut *channel.write(), Some((oldest / 1000) * 1000));
    }
    txn.commit().unwrap();
  • edit in crates/libflowers_client/src/identity.rs at line 3
    [13.58]
    [13.58]
    #[doc(inline)]
    pub use pijul::key::{PublicKey, SKey, SecretKey};
  • edit in crates/libflowers_client/Cargo.toml at line 23
    [8.1784]
    [9.4549]
    workspace = true
    [dependencies.rand]
    workspace = true
    [dependencies.serde_json]
  • edit in crates/libflowers/src/prelude.rs at line 1
    [3.2377]
    [3.2378]
    #[doc(inline)]
    pub use chrono::Utc;
  • replacement in crates/libflowers/src/prelude.rs at line 10
    [12.4580][12.4580:4625]()
    pub use tracing::{debug, error, info, warn};
    [12.4580]
    [4.601]
    pub use tracing::{debug, error, info, span, warn};
  • replacement in crates/libflowers/Cargo.toml at line 10
    [2.2557][3.5451:5532]()
    std = ["dep:async-fd-lock", "dep:directories", "dep:toml_edit", "tokio/io-util"]
    [2.2557]
    [2.2583]
    std = [
    "dep:async-fd-lock",
    "dep:directories",
    "dep:toml_edit",
    "chrono/std",
    "tokio/io-util",
    ]
  • edit in crates/libflowers/Cargo.toml at line 23
    [3.5596]
    [2.2625]
    [dependencies.chrono]
    workspace = true
    default-features = false
  • edit in crates/flowers_ui/src/main.rs at line 4
    [13.496][7.177:249](),[6.372][7.177:249]()
    use notify_debouncer_full::notify::{RecommendedWatcher, RecursiveMode};
  • edit in crates/flowers_ui/src/main.rs at line 7
    [6.508]
    [7.250]
    use notify_debouncer_full::notify::{RecommendedWatcher, RecursiveMode};
  • edit in crates/flowers_ui/src/main.rs at line 14
    [7.375]
    [12.4709]
    use std::sync::Arc;
  • replacement in crates/flowers_ui/src/main.rs at line 57
    [13.639][13.639:669]()
    Message::LoadedId(id)
    [13.639]
    [13.669]
    Message::LoadedId(Box::new(id))
  • replacement in crates/flowers_ui/src/main.rs at line 92
    [6.668][13.798:816]()
    LoadedId(Id),
    [6.668]
    [12.6176]
    LoadedId(Box<Id>),
  • replacement in crates/flowers_ui/src/main.rs at line 129
    [12.6993][12.6993:7041]()
    let _ = state.repo_tx_in.send(msg);
    [12.6993]
    [11.1273]
    state.repo_tx_in.send(msg).unwrap();
  • replacement in crates/flowers_ui/src/main.rs at line 249
    [12.11426][12.11426:11532]()
    let _ =
    state.repo_tx_in.send(repo::MsgIn::AddUntrackedFile {
    [12.11426]
    [12.11532]
    state
    .repo_tx_in
    .send(repo::MsgIn::AddUntrackedFile {
  • replacement in crates/flowers_ui/src/main.rs at line 253
    [12.11580][12.11580:11608]()
    });
    [12.11580]
    [12.11608]
    })
    .unwrap();
  • replacement in crates/flowers_ui/src/main.rs at line 286
    [12.12763][12.12763:12872]()
    let _ =
    state.repo_tx_in.send(repo::MsgIn::RmAddedFile {
    [12.12763]
    [12.12872]
    state
    .repo_tx_in
    .send(repo::MsgIn::RmAddedFile {
  • replacement in crates/flowers_ui/src/main.rs at line 290
    [12.12924][12.12924:12956]()
    });
    [12.12924]
    [12.12956]
    })
    .unwrap();
  • edit in crates/flowers_ui/src/main.rs at line 344
    [10.1143]
    [10.1143]
    let id = state
    .id
    .as_ref()
    .expect("ID must be loaded at this point");
    // TODO: this call has CLI prompt - replace it
    let (sk, _) = id.decrypt().unwrap();
  • replacement in crates/flowers_ui/src/main.rs at line 354
    [12.14639][12.14639:14719]()
    let _ = state.repo_tx_in.send(repo::MsgIn::Record { msg });
    [12.14639]
    [10.1247]
    let sk = Arc::new(sk);
    state
    .repo_tx_in
    .send(repo::MsgIn::Record { msg, sk })
    .unwrap();
  • replacement in crates/flowers_ui/src/main.rs at line 365
    [13.987][13.987:1020]()
    state.id = Some(id);
    [13.987]
    [13.1020]
    state.id = Some(*id);
  • replacement in Cargo.toml at line 22
    [3.5948][3.5948:5966]()
    version = "0.2.0"
    [3.5948]
    [8.8720]
    version = "0.2"
  • edit in Cargo.toml at line 25
    [9.7808]
    [4.1644]
    [workspace.dependencies.chrono]
    version = "0.4"
    default-features = false
  • edit in Cargo.toml at line 48
    [4.1837]
    [3.5995]
    [workspace.dependencies.rand]
    version = "0.8" # has to match libpijul version
  • edit in Cargo.toml at line 51
    [3.6026]
    [9.7854]
    version = "1"
    [workspace.dependencies.serde_json]
  • edit in Cargo.lock at line 2669
    [3.7674]
    [2.44936]
    "chrono",
  • edit in Cargo.lock at line 2690
    [8.8872]
    [9.8159]
    "rand 0.8.5",
    "serde_json",