record!
[?]
Feb 24, 2025, 12:57 PM
A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQCDependencies
- [2]
6YZAVBWUInitial commit - [3]
KLR5FRIBadd fs state read/write of repos - [4]
IQDCHWCPload a pijul repo - [5]
SWWE2R6Mdisplay basic repo stuff - [6]
WT3GA27Padd cursor with selection - [7]
UB2ITZJSrefresh changed files on FS changes - [8]
EC3TVL4Xadd untracked files - [9]
KT5UYXGKfix selection after adding file, add changed file diffs - [10]
S2NVIFXRallow to enter record msg - [11]
W7IUT3ZVstart recording impl - [12]
YBJRDOTCmake all repo actions async - [13]
2VUX5BTDload identity - [14]
ELG3UDT6allow to rm added files
Change contents
- edit in crates/libflowers_client/src/repo.rs at line 1
use crate::identity::{PublicKey, SKey};use libflowers::prelude::*;use pijul::changestore::ChangeStore; - replacement in crates/libflowers_client/src/repo.rs at line 6
use std::collections::BTreeSet;use std::collections::{BTreeMap, BTreeSet}; - edit in crates/libflowers_client/src/repo.rs at line 9
use std::sync::Arc; - edit in crates/libflowers_client/src/repo.rs at line 13
use libflowers::prelude::*; - replacement in crates/libflowers_client/src/repo.rs at line 15
working_copy, ChannelTxnT, Hash, MutTxnT, MutTxnTExt, TxnT, TxnTExt,working_copy, ChannelMutTxnT, ChannelTxnT, Hash, HashSet, MutTxnT,MutTxnTExt, TxnT, TxnTExt, - replacement in crates/libflowers_client/src/repo.rs at line 61
#[derive(Debug, Clone, strum::Display)]#[derive(Clone, Derivative, strum::Display)]#[derivative(Debug)] - replacement in crates/libflowers_client/src/repo.rs at line 65
AddUntrackedFile { path: String },RmAddedFile { path: String },Record { msg: String },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
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;}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
async fn update<'a>(async fn update( - replacement in crates/libflowers_client/src/repo.rs at line 154
MsgIn::Record { msg } => {MsgIn::Record { msg, sk } => { - replacement in crates/libflowers_client/src/repo.rs at line 156
record(&mut state, msg);record(&state, msg, sk); - replacement in crates/libflowers_client/src/repo.rs at line 198
fn record(state: &InternalState, msg: String) {fn record(state: &InternalState, message: String, sk: Arc<SKey>) { - replacement in crates/libflowers_client/src/repo.rs at line 200
let channel = current_channel(&repo);let channel = current_channel(repo); - replacement in crates/libflowers_client/src/repo.rs at line 203
let mut channel = txn.read().load_channel(&channel).unwrap().unwrap();let channel = txn.read().load_channel(&channel).unwrap().unwrap(); - replacement in crates/libflowers_client/src/repo.rs at line 222
let header = todo!();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 descriptiondescription: 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
let repo_path = CanonicalPathBuf::canonicalize(&repo.path).unwrap();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
#[doc(inline)]pub use pijul::key::{PublicKey, SKey, SecretKey}; - edit in crates/libflowers_client/Cargo.toml at line 23
workspace = true[dependencies.rand]workspace = true[dependencies.serde_json] - edit in crates/libflowers/src/prelude.rs at line 1
#[doc(inline)]pub use chrono::Utc; - replacement in crates/libflowers/src/prelude.rs at line 10
pub use tracing::{debug, error, info, warn};pub use tracing::{debug, error, info, span, warn}; - replacement in crates/libflowers/Cargo.toml at line 10
std = ["dep:async-fd-lock", "dep:directories", "dep:toml_edit", "tokio/io-util"]std = ["dep:async-fd-lock","dep:directories","dep:toml_edit","chrono/std","tokio/io-util",] - edit in crates/libflowers/Cargo.toml at line 23
[dependencies.chrono]workspace = truedefault-features = false - edit in crates/flowers_ui/src/main.rs at line 4
use notify_debouncer_full::notify::{RecommendedWatcher, RecursiveMode}; - edit in crates/flowers_ui/src/main.rs at line 7
use notify_debouncer_full::notify::{RecommendedWatcher, RecursiveMode}; - edit in crates/flowers_ui/src/main.rs at line 14
use std::sync::Arc; - replacement in crates/flowers_ui/src/main.rs at line 57
Message::LoadedId(id)Message::LoadedId(Box::new(id)) - replacement in crates/flowers_ui/src/main.rs at line 92
LoadedId(Id),LoadedId(Box<Id>), - replacement in crates/flowers_ui/src/main.rs at line 129
let _ = state.repo_tx_in.send(msg);state.repo_tx_in.send(msg).unwrap(); - replacement in crates/flowers_ui/src/main.rs at line 249
let _ =state.repo_tx_in.send(repo::MsgIn::AddUntrackedFile {state.repo_tx_in.send(repo::MsgIn::AddUntrackedFile { - replacement in crates/flowers_ui/src/main.rs at line 253
});}).unwrap(); - replacement in crates/flowers_ui/src/main.rs at line 286
let _ =state.repo_tx_in.send(repo::MsgIn::RmAddedFile {state.repo_tx_in.send(repo::MsgIn::RmAddedFile { - replacement in crates/flowers_ui/src/main.rs at line 290
});}).unwrap(); - edit in crates/flowers_ui/src/main.rs at line 344
let id = state.id.as_ref().expect("ID must be loaded at this point");// TODO: this call has CLI prompt - replace itlet (sk, _) = id.decrypt().unwrap(); - replacement in crates/flowers_ui/src/main.rs at line 354
let _ = state.repo_tx_in.send(repo::MsgIn::Record { msg });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
state.id = Some(id);state.id = Some(*id); - replacement in Cargo.toml at line 22
version = "0.2.0"version = "0.2" - edit in Cargo.toml at line 25
[workspace.dependencies.chrono]version = "0.4"default-features = false - edit in Cargo.toml at line 48
[workspace.dependencies.rand]version = "0.8" # has to match libpijul version - edit in Cargo.toml at line 51
version = "1"[workspace.dependencies.serde_json] - edit in Cargo.lock at line 2669
"chrono", - edit in Cargo.lock at line 2690
"rand 0.8.5","serde_json",