1use std::{fs::File, path::Path, thread::sleep, time::Duration};
2
3const TEST_FILE: &'static str = "test-db.db";
4
5fn main() -> anyhow::Result<()> {
6 let db = db::Db::open_in_memory();
7 if db.real().is_none() {
8 return Err(anyhow::anyhow!("Migrations failed"));
9 }
10 let file = Path::new(TEST_FILE);
11
12 let f = File::create(file)?;
13 drop(f);
14
15 db.write_kvp("test", "1")?;
16 db.write_kvp("test-2", "2")?;
17
18 let workspace_1 = db.workspace_for_worktree_roots(&[]);
19 let workspace_2 = db.workspace_for_worktree_roots(&[]);
20 let workspace_3 = db.workspace_for_worktree_roots(&[]);
21 let workspace_4 = db.workspace_for_worktree_roots(&[]);
22 let workspace_5 = db.workspace_for_worktree_roots(&[]);
23 let workspace_6 = db.workspace_for_worktree_roots(&[]);
24 let workspace_7 = db.workspace_for_worktree_roots(&[]);
25
26 // Order scrambled + sleeps added because sqlite only has 1 second resolution on
27 // their timestamps
28 db.update_worktree_roots(&workspace_7.workspace_id, &["/tmp2"]);
29 sleep(Duration::from_secs(1));
30 db.update_worktree_roots(&workspace_1.workspace_id, &["/tmp1"]);
31 sleep(Duration::from_secs(1));
32 db.update_worktree_roots(&workspace_2.workspace_id, &["/tmp1", "/tmp2"]);
33 sleep(Duration::from_secs(1));
34 db.update_worktree_roots(&workspace_3.workspace_id, &["/tmp1", "/tmp2", "/tmp3"]);
35 sleep(Duration::from_secs(1));
36 db.update_worktree_roots(&workspace_4.workspace_id, &["/tmp2", "/tmp3"]);
37 sleep(Duration::from_secs(1));
38 db.update_worktree_roots(&workspace_5.workspace_id, &["/tmp2", "/tmp3", "/tmp4"]);
39 sleep(Duration::from_secs(1));
40 db.update_worktree_roots(&workspace_6.workspace_id, &["/tmp2", "/tmp4"]);
41
42 db.write_to(file).ok();
43
44 println!("Wrote database!");
45
46 Ok(())
47}