A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC KLR5FRIBS6UOH3S3XAOE22TJACVSVOY7TOLW22DIWNGY27S6WZRAC IQDCHWCP47LL46EXQLQGHQPGFYIHQLMQBHA57RWJCIOX5UEUIQAQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC UB2ITZJSDADVINSQEZ3HA6PVGA7OA6JYFG5GMSO7Y7LOXJC4FI7AC EC3TVL4X6VZZVLOKUN63LC73ADPHBHMZO7QMDXGX2ZPURVI4B4XQC KT5UYXGKEEXUHURNOYFVIG7WQ3Y3SJZMM2TP4OSW6NXSXQ5XXRHAC S2NVIFXRFER4SRA37WCT5XTXHDHAL5WIGGKY4A4XOTPLTKTZSRGQC W7IUT3ZVMFH77IGKLAL7WX7IVVTGTY3FKEJ3WHMP3KI37B6NENLQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC 2VUX5BTDKHX3TJ677NW34H5WLSWH35C3PU46C7MXCN5O7PAZVXNQC 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;
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();
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();