persist delta of last snapshot and stage

master
Bel LaPointe 2025-12-01 17:03:56 -07:00
parent 97caaebc09
commit 700b2a22cc
1 changed files with 21 additions and 30 deletions

View File

@ -154,7 +154,7 @@ impl File {
}
pub fn persist_unpersisted_stage(&self) -> Result<(), String> {
let events = self.events()?;
let old_snapshot = self.events()?.last_snapshot();
let stage_mod_time = std::fs::metadata(&self.file)
.unwrap()
.modified()
@ -162,29 +162,12 @@ impl File {
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_secs();
let old_persisted: Vec<Delta> = events
.0
.iter()
.filter(|x| x.ts <= stage_mod_time)
.map(|x| x.clone())
.collect();
let old_events = Events(old_persisted);
eprintln!(
"stage_mod_time = {}, old events = {:?}",
stage_mod_time, old_events
);
let old_snapshot = old_events.snapshot()?;
eprintln!(
"self.persist_delta_at({:?}, {:?}",
old_snapshot,
self.stage().unwrap()
);
self.persist_delta_at(old_snapshot, self.stage()?, stage_mod_time)
//self.stage_persisted()
}
pub fn stage_persisted(&self) -> Result<(), String> {
let persisted_as_snapshot = self.events()?.snapshot()?;
self.append(Delta::snapshot(persisted_as_snapshot.clone()))?;
let plaintext = serde_yaml::to_string(&persisted_as_snapshot).unwrap();
let mut f = std::fs::File::create(&self.file).expect("failed to open file for writing");
writeln!(f, "{}", plaintext).expect("failed to write");
@ -198,9 +181,6 @@ impl File {
let stage = self.stage()?;
eprintln!("persist delta...");
eprintln!(" persisted=before={:?}", &persisted);
eprintln!(" stage=aftere={:?}", &stage);
self.persist_delta(persisted, stage)?;
Ok(())
}
@ -364,12 +344,6 @@ mod test_file {
f.persist_stage().unwrap();
assert_eq!(6, f.events().unwrap().0.len());
assert_eq!(0, f.stage().unwrap().len());
eprintln!("persist_stage | events | {:?}", f.events().unwrap().0);
eprintln!(
"persist_stage | events.snapshot | {:?}",
f.events().unwrap().snapshot()
);
eprintln!("persist_stage | stage | {:?}", f.stage().unwrap());
tests::file_contains(&d, "plain", "[]");
f.stage_persisted().unwrap();
@ -536,9 +510,7 @@ mod test_file {
);
assert_eq!(0, f.stage().unwrap().len(), "{:?}", f.stage());
eprintln!("0 | {:?}", f.stage().unwrap());
f.persist_stage().unwrap();
eprintln!("0 | {:?}", f.stage().unwrap());
assert_eq!(
1,
f.events().unwrap().0.len(),
@ -596,6 +568,15 @@ impl Delta {
}
}
pub fn snapshot(tasks: Vec<Task>) -> Delta {
Delta {
ts: Self::now_time(),
op: Op::Snapshot,
task: Task(serde_yaml::Value::Null),
tasks: Some(tasks),
}
}
pub fn add(task: Task) -> Delta {
Self::add_at(task, Self::now_time())
}
@ -829,6 +810,16 @@ impl Events {
.to_string()
}
fn last_snapshot(&self) -> Vec<Task> {
for event in self.0.iter() {
match &event.op {
Op::Snapshot => return event.tasks.clone().unwrap(),
_ => {}
};
}
vec![]
}
fn snapshot(&self) -> Result<Vec<Task>, String> {
let mut result = vec![];
for event in self.0.iter() {