From 85d67c9efd34a06581a973f6340263d5e19705a6 Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Tue, 22 Jul 2025 22:52:06 -0600 Subject: [PATCH 01/11] add initial `Entry` code - single files work --- src/entry.rs | 151 ++++++++++++++++++++++++++++++++++ src/lib.rs | 2 + test/entry/0000/author | 1 + test/entry/0000/creation_time | 1 + test/entry/0000/entry | 1 + test/entry/0000/id | 1 + test/entry/0001/author | 1 + test/entry/0001/creation_time | 1 + test/entry/0001/id | 1 + 9 files changed, 160 insertions(+) create mode 100644 src/entry.rs create mode 100644 test/entry/0000/author create mode 100644 test/entry/0000/creation_time create mode 100644 test/entry/0000/entry create mode 100644 test/entry/0000/id create mode 100644 test/entry/0001/author create mode 100644 test/entry/0001/creation_time create mode 100644 test/entry/0001/id diff --git a/src/entry.rs b/src/entry.rs new file mode 100644 index 0000000..51b495a --- /dev/null +++ b/src/entry.rs @@ -0,0 +1,151 @@ +use std::io::{Read, Write}; +use thiserror::Error; + +// TODO: i think this method of doing error handling probably has bad scoping +#[derive(Error, Debug)] +pub enum Error { + #[error(transparent)] + IoError(#[from] std::io::Error), + #[error(transparent)] + ParseError(#[from] chrono::ParseError), +} + +pub trait Enterable +where + Self: Sized, +{ + // load the type from a directory path + // TODO: return a result + fn fetch_from_fs(path: &std::path::Path) -> Result; + + // store self in the FS + // TODO: return a result + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error>; +} + +#[derive(PartialEq, Eq, Debug, Clone)] +pub struct Entry { + pub id: String, + pub author: String, + pub creation_time: chrono::DateTime, + pub entry: T, +} + +impl Enterable for Entry { + fn fetch_from_fs(path: &std::path::Path) -> Result { + let id_file_path = path.join("id"); + let mut id_file = std::fs::File::open(&id_file_path)?; + let mut id_buffer = String::new(); + id_file.read_to_string(&mut id_buffer)?; + + // author + let author_file_path = path.join("author"); + let mut author_file = std::fs::File::open(&author_file_path)?; + let mut author_buffer = String::new(); + author_file.read_to_string(&mut author_buffer)?; + + // creation_time + let creation_time_file_path = path.join("creation_time"); + let mut creation_time_file = std::fs::File::open(&creation_time_file_path)?; + let mut creation_time_buffer = String::new(); + creation_time_file.read_to_string(&mut creation_time_buffer)?; + + let entry_file_path_buf = path.join("entry"); + let entry_file_path = entry_file_path_buf.as_path(); + + Ok(Self { + id: id_buffer, + author: author_buffer, + creation_time: chrono::DateTime::<_>::parse_from_rfc3339(&creation_time_buffer)?.into(), + entry: ::fetch_from_fs(entry_file_path)?, + }) + } + + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + // id + let id_file_path = path.join("id"); + let mut id_file = std::fs::File::create(&id_file_path)?; + write!(id_file, "{}", self.id)?; + + // author + let author_file_path = path.join("author"); + let mut author_file = std::fs::File::create(&author_file_path)?; + write!(author_file, "{}", self.author)?; + + // created + let creation_time_file_path = path.join("creation_time"); + let mut creation_time_file = std::fs::File::create(&creation_time_file_path)?; + write!(creation_time_file, "{}", self.creation_time.to_rfc3339())?; + + // entry + // TODO: probably need to figure out better naming than "entry" + // TODO: fix this pathbuf nonsense woooooof + let entry_file_path_buf = path.join("entry"); + let entry_file_path = entry_file_path_buf.as_path(); + self.entry.store_to_fs(entry_file_path)?; + Ok(()) + } +} + +mod test { + + use super::*; + impl Enterable for String { + fn fetch_from_fs(path: &std::path::Path) -> Result { + let mut file = std::fs::File::open(&path)?; + let mut buffer = String::new(); + file.read_to_string(&mut buffer)?; + Ok(buffer) + } + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + let mut file = std::fs::File::create(&path)?; + write!(file, "{}", self)?; + Ok(()) + } + } + + impl Enterable for Vec { + fn fetch_from_fs(path: &std::path::Path) -> Result { + todo!("implement this"); + } + fn store_to_fs(self, path: &std::path::Path) -> Result<(), Error> { + todo!("implement this"); + } + } + + #[test] + fn store_load_string_entry() { + let test_path = std::path::Path::new("./test/entry/0000"); + let entry = Entry:: { + id: String::from("87fa3146b90db61c4ea0de182798a0e5"), + author: String::from("test"), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-22T21:54:42-06:00") + .unwrap() + .with_timezone(&chrono::Local), + entry: String::from("entry string"), + }; + entry.clone().store_to_fs(test_path).unwrap(); + + let fs_entry = Entry::::fetch_from_fs(test_path).unwrap(); + + assert_eq!(entry, fs_entry); + } + + #[test] + fn store_load_vec_string_entry() { + let test_path = std::path::Path::new("./test/entry/0001"); + let entry = Entry::> { + id: String::from("87fa3146b90db61c4ea0de182798a0e5"), + author: String::from("test"), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-22T21:54:42-06:00") + .unwrap() + .with_timezone(&chrono::Local), + entry: vec![String::from("string 1"), String::from("string 2")], + }; + entry.clone().store_to_fs(test_path).unwrap(); + + let fs_entry = Entry::>::fetch_from_fs(test_path).unwrap(); + + assert_eq!(entry, fs_entry); + } +} diff --git a/src/lib.rs b/src/lib.rs index b6245b9..740e431 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,6 +6,8 @@ pub mod git; pub mod issue; pub mod issues; +pub mod entry; + use crate::issue::State; #[derive(Debug, thiserror::Error)] diff --git a/test/entry/0000/author b/test/entry/0000/author new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/test/entry/0000/author @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/test/entry/0000/creation_time b/test/entry/0000/creation_time new file mode 100644 index 0000000..380d475 --- /dev/null +++ b/test/entry/0000/creation_time @@ -0,0 +1 @@ +2025-07-22T21:54:42-06:00 \ No newline at end of file diff --git a/test/entry/0000/entry b/test/entry/0000/entry new file mode 100644 index 0000000..5db03ab --- /dev/null +++ b/test/entry/0000/entry @@ -0,0 +1 @@ +entry string \ No newline at end of file diff --git a/test/entry/0000/id b/test/entry/0000/id new file mode 100644 index 0000000..b209563 --- /dev/null +++ b/test/entry/0000/id @@ -0,0 +1 @@ +87fa3146b90db61c4ea0de182798a0e5 \ No newline at end of file diff --git a/test/entry/0001/author b/test/entry/0001/author new file mode 100644 index 0000000..30d74d2 --- /dev/null +++ b/test/entry/0001/author @@ -0,0 +1 @@ +test \ No newline at end of file diff --git a/test/entry/0001/creation_time b/test/entry/0001/creation_time new file mode 100644 index 0000000..380d475 --- /dev/null +++ b/test/entry/0001/creation_time @@ -0,0 +1 @@ +2025-07-22T21:54:42-06:00 \ No newline at end of file diff --git a/test/entry/0001/id b/test/entry/0001/id new file mode 100644 index 0000000..b209563 --- /dev/null +++ b/test/entry/0001/id @@ -0,0 +1 @@ +87fa3146b90db61c4ea0de182798a0e5 \ No newline at end of file From e1287514f65fcc8052a4627170dc2c8018a8a353 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Wed, 23 Jul 2025 15:26:42 -0600 Subject: [PATCH 02/11] switch to pretty_assertions, makes it much easier to tell what blew up --- Cargo.toml | 3 +++ src/comment.rs | 1 + src/git.rs | 1 + src/issue.rs | 1 + src/issues.rs | 1 + 5 files changed, 7 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 864691a..4d2d2c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,9 @@ edition = "2024" default = [] log = ["dep:log", "dep:simple_logger"] +[dev-dependencies] +pretty_assertions = "1.4.1" + [dependencies] anyhow = "1.0.95" chrono = "0.4.41" diff --git a/src/comment.rs b/src/comment.rs index e042f63..9770d65 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -208,6 +208,7 @@ impl Comment { #[cfg(test)] mod tests { use super::*; + use pretty_assertions::assert_eq; #[test] fn read_comment_0() { diff --git a/src/git.rs b/src/git.rs index 3a03bac..6e70fa8 100644 --- a/src/git.rs +++ b/src/git.rs @@ -502,6 +502,7 @@ fn create_orphan_branch_at_path( #[cfg(test)] mod tests { use super::*; + use pretty_assertions::assert_eq; #[test] fn test_worktree() { diff --git a/src/issue.rs b/src/issue.rs index e3bf9d3..4d82deb 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -548,6 +548,7 @@ impl Issue { #[cfg(test)] mod tests { use super::*; + use pretty_assertions::assert_eq; #[test] fn read_issue_0() { diff --git a/src/issues.rs b/src/issues.rs index a01f41c..7c43e43 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -87,6 +87,7 @@ impl Issues { #[cfg(test)] mod tests { use super::*; + use pretty_assertions::assert_eq; #[test] fn read_issues_0000() { From 7abcf2e4466d95464252c036743cda3a757726a9 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Wed, 23 Jul 2025 18:45:20 -0600 Subject: [PATCH 03/11] sort issue tags This will be useful testing (and general consistency) when tags are files in a directory instead of lines in a file, and thus subject to random directory order. --- src/issue.rs | 3 ++- src/issues.rs | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/issue.rs b/src/issue.rs index 4d82deb..6f5889e 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -143,6 +143,7 @@ impl Issue { .filter(|s| s.len() > 0) .map(|tag| String::from(tag.trim())) .collect(); + tags.sort(); } else if file_name == "comments" && direntry.metadata()?.is_dir() { Self::read_comments(&mut comments, &direntry.path())?; } else { @@ -562,9 +563,9 @@ mod tests { .with_timezone(&chrono::Local), done_time: None, tags: Vec::::from([ - String::from("tag1"), String::from("TAG2"), String::from("i-am-also-a-tag"), + String::from("tag1"), ]), state: State::New, dependencies: None, diff --git a/src/issues.rs b/src/issues.rs index 7c43e43..fc182e7 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -127,9 +127,9 @@ mod tests { .with_timezone(&chrono::Local), done_time: None, tags: Vec::::from([ - String::from("tag1"), String::from("TAG2"), - String::from("i-am-also-a-tag") + String::from("i-am-also-a-tag"), + String::from("tag1"), ]), state: crate::issue::State::New, dependencies: None, From ef8a648cf8d6f60ac82c0017bec930459e3a76f3 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 24 Jul 2025 08:36:25 -0600 Subject: [PATCH 04/11] test dir cleanup: rename test/0000/3943fc5c173fdf41c0a22251593cd476 Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issue.rs | 6 +++--- src/issues.rs | 4 ++-- .../description | 0 .../tags | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename test/0000/{3943fc5c173fdf41c0a22251593cd476d96e6c9f => 3943fc5c173fdf41c0a22251593cd476}/description (100%) rename test/0000/{3943fc5c173fdf41c0a22251593cd476d96e6c9f => 3943fc5c173fdf41c0a22251593cd476}/tags (100%) diff --git a/src/issue.rs b/src/issue.rs index 6f5889e..3e13a7d 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -553,12 +553,12 @@ mod tests { #[test] fn read_issue_0() { - let issue_dir = std::path::Path::new("test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/"); + let issue_dir = std::path::Path::new("test/0000/3943fc5c173fdf41c0a22251593cd476/"); let issue = Issue::new_from_dir(issue_dir).unwrap(); let expected = Issue { - id: String::from("3943fc5c173fdf41c0a22251593cd476d96e6c9f"), + id: String::from("3943fc5c173fdf41c0a22251593cd476"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:36:25-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/src/issues.rs b/src/issues.rs index fc182e7..11cb233 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -115,14 +115,14 @@ mod tests { dir, }); - let uuid = String::from("3943fc5c173fdf41c0a22251593cd476d96e6c9f"); + let uuid = String::from("3943fc5c173fdf41c0a22251593cd476"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:36:25-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/description b/test/0000/3943fc5c173fdf41c0a22251593cd476/description similarity index 100% rename from test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/description rename to test/0000/3943fc5c173fdf41c0a22251593cd476/description diff --git a/test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/tags b/test/0000/3943fc5c173fdf41c0a22251593cd476/tags similarity index 100% rename from test/0000/3943fc5c173fdf41c0a22251593cd476d96e6c9f/tags rename to test/0000/3943fc5c173fdf41c0a22251593cd476/tags From 4683760942d33f99c50e321c3a901c0fc619da96 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 24 Jul 2025 08:37:07 -0600 Subject: [PATCH 05/11] test dir cleanup: rename test/0000/7792b063eef6d33e7da5dc1856750c14 Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issue.rs | 6 +++--- src/issues.rs | 4 ++-- .../assignee | 0 .../description | 0 .../state | 0 5 files changed, 5 insertions(+), 5 deletions(-) rename test/0000/{7792b063eef6d33e7da5dc1856750c149ba678c6 => 7792b063eef6d33e7da5dc1856750c14}/assignee (100%) rename test/0000/{7792b063eef6d33e7da5dc1856750c149ba678c6 => 7792b063eef6d33e7da5dc1856750c14}/description (100%) rename test/0000/{7792b063eef6d33e7da5dc1856750c149ba678c6 => 7792b063eef6d33e7da5dc1856750c14}/state (100%) diff --git a/src/issue.rs b/src/issue.rs index 3e13a7d..06f959f 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -581,12 +581,12 @@ mod tests { #[test] fn read_issue_1() { - let issue_dir = std::path::Path::new("test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/"); + let issue_dir = std::path::Path::new("test/0000/7792b063eef6d33e7da5dc1856750c14/"); let issue = Issue::new_from_dir(issue_dir).unwrap(); let expected = Issue { - id: String::from("7792b063eef6d33e7da5dc1856750c149ba678c6"), + id: String::from("7792b063eef6d33e7da5dc1856750c14"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:07-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/src/issues.rs b/src/issues.rs index 11cb233..db32737 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -96,13 +96,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("7792b063eef6d33e7da5dc1856750c149ba678c6"); + let uuid = String::from("7792b063eef6d33e7da5dc1856750c14"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T12:14:26-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:07-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee b/test/0000/7792b063eef6d33e7da5dc1856750c14/assignee similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee rename to test/0000/7792b063eef6d33e7da5dc1856750c14/assignee diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/description b/test/0000/7792b063eef6d33e7da5dc1856750c14/description similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/description rename to test/0000/7792b063eef6d33e7da5dc1856750c14/description diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/state b/test/0000/7792b063eef6d33e7da5dc1856750c14/state similarity index 100% rename from test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/state rename to test/0000/7792b063eef6d33e7da5dc1856750c14/state From 694d127638842de94ef646819be71e1e1bb86255 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 24 Jul 2025 08:37:46 -0600 Subject: [PATCH 06/11] test dir cleanup: rename test/0001/3fa5bfd93317ad25772680071d5ac325 Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issues.rs | 4 ++-- .../description | 0 .../done_time | 0 .../state | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename test/0001/{3fa5bfd93317ad25772680071d5ac3259cd2384f => 3fa5bfd93317ad25772680071d5ac325}/description (100%) rename test/0001/{3fa5bfd93317ad25772680071d5ac3259cd2384f => 3fa5bfd93317ad25772680071d5ac325}/done_time (100%) rename test/0001/{3fa5bfd93317ad25772680071d5ac3259cd2384f => 3fa5bfd93317ad25772680071d5ac325}/state (100%) diff --git a/src/issues.rs b/src/issues.rs index db32737..bd8d687 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -149,13 +149,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"); + let uuid = String::from("3fa5bfd93317ad25772680071d5ac325"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T11:59:44-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:37:46-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: Some( diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/description b/test/0001/3fa5bfd93317ad25772680071d5ac325/description similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/description rename to test/0001/3fa5bfd93317ad25772680071d5ac325/description diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/done_time b/test/0001/3fa5bfd93317ad25772680071d5ac325/done_time similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/done_time rename to test/0001/3fa5bfd93317ad25772680071d5ac325/done_time diff --git a/test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/state b/test/0001/3fa5bfd93317ad25772680071d5ac325/state similarity index 100% rename from test/0001/3fa5bfd93317ad25772680071d5ac3259cd2384f/state rename to test/0001/3fa5bfd93317ad25772680071d5ac325/state From 05c7c6f4416f23d8d71b54e80ca2a0683bad2b2c Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 24 Jul 2025 10:08:24 -0600 Subject: [PATCH 07/11] test dir cleanup: rename test/0001/dd79c8cfb8beeacd0460429944b4ecbe Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. fixup test/0001/dd79c8cfb8beeacd0460429944b4ecbe, no comment yet --- src/issues.rs | 15 +++------------ .../description | 0 .../state | 0 3 files changed, 3 insertions(+), 12 deletions(-) rename test/0001/{dd79c8cfb8beeacd0460429944b4ecbe95a31561 => dd79c8cfb8beeacd0460429944b4ecbe}/description (100%) rename test/0001/{dd79c8cfb8beeacd0460429944b4ecbe95a31561 => dd79c8cfb8beeacd0460429944b4ecbe}/state (100%) diff --git a/src/issues.rs b/src/issues.rs index bd8d687..e8b759f 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -172,28 +172,19 @@ mod tests { dir, }); - let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"); + let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); let mut comment_dir = dir.clone(); let comment_uuid = String::from("9055dac36045fe36545bed7ae7b49347"); comment_dir.push("comments"); comment_dir.push(&comment_uuid); - let mut expected_comments = Vec::::new(); - expected_comments.push( - crate::comment::Comment { - uuid: comment_uuid, - author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-07T15:26:26-06:00").unwrap().with_timezone(&chrono::Local), - description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561\n\nIt has multiple lines\n"), - dir: std::path::PathBuf::from(comment_dir), - } - ); + let expected_comments = Vec::::new(); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-03T11:59:44-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:24-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/description similarity index 100% rename from test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description rename to test/0001/dd79c8cfb8beeacd0460429944b4ecbe/description diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/state similarity index 100% rename from test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state rename to test/0001/dd79c8cfb8beeacd0460429944b4ecbe/state From 598f4e5df838618584ca81e1edceb9d6791b228e Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 24 Jul 2025 10:08:38 -0600 Subject: [PATCH 08/11] test dir cleanup: rename test/0001/dd79c8cfb8beeacd0460429944b4ecbe comment Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/comment.rs | 9 +++++---- src/issues.rs | 11 ++++++++++- .../9055dac36045fe36545bed7ae7b49347/description | 3 +++ .../9055dac36045fe36545bed7ae7b49347/description | 3 --- 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description delete mode 100644 test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description diff --git a/src/comment.rs b/src/comment.rs index 9770d65..1fa2e36 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -212,16 +212,17 @@ mod tests { #[test] fn read_comment_0() { - let comment_dir = - std::path::Path::new("test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347"); + let comment_dir = std::path::Path::new( + "test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347", + ); let comment = Comment::new_from_dir(comment_dir).unwrap(); let expected = Comment { uuid: String::from("9055dac36045fe36545bed7ae7b49347"), author: String::from("Sebastian Kuzminsky "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-07T15:26:26-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:38-06:00") .unwrap() .with_timezone(&chrono::Local), - description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561\n\nIt has multiple lines\n"), + description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe\n\nIt has multiple lines\n"), dir: std::path::PathBuf::from(comment_dir), }; assert_eq!(comment, expected); diff --git a/src/issues.rs b/src/issues.rs index e8b759f..8dca0cd 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -179,7 +179,16 @@ mod tests { let comment_uuid = String::from("9055dac36045fe36545bed7ae7b49347"); comment_dir.push("comments"); comment_dir.push(&comment_uuid); - let expected_comments = Vec::::new(); + let mut expected_comments = Vec::::new(); + expected_comments.push( + crate::comment::Comment { + uuid: comment_uuid, + author: String::from("Sebastian Kuzminsky "), + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T10:08:38-06:00").unwrap().with_timezone(&chrono::Local), + description: String::from("This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe\n\nIt has multiple lines\n"), + dir: std::path::PathBuf::from(comment_dir), + } + ); expected.add_issue( crate::issue::Issue { id: uuid, diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description new file mode 100644 index 0000000..daa3d62 --- /dev/null +++ b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe/comments/9055dac36045fe36545bed7ae7b49347/description @@ -0,0 +1,3 @@ +This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe + +It has multiple lines diff --git a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description b/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description deleted file mode 100644 index f9de678..0000000 --- a/test/0001/dd79c8cfb8beeacd0460429944b4ecbe95a31561/comments/9055dac36045fe36545bed7ae7b49347/description +++ /dev/null @@ -1,3 +0,0 @@ -This is a comment on issue dd79c8cfb8beeacd0460429944b4ecbe95a31561 - -It has multiple lines From b3f5aaeb76652989c82cb9d2d655e8fec23cc81d Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Thu, 24 Jul 2025 08:38:40 -0600 Subject: [PATCH 09/11] test dir cleanup: rename test/0002/3fa5bfd93317ad25772680071d5ac325 Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issues.rs | 4 ++-- .../description | 0 .../state | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename test/0002/{3fa5bfd93317ad25772680071d5ac3259cd2384f => 3fa5bfd93317ad25772680071d5ac325}/description (100%) rename test/0002/{3fa5bfd93317ad25772680071d5ac3259cd2384f => 3fa5bfd93317ad25772680071d5ac325}/state (100%) diff --git a/src/issues.rs b/src/issues.rs index 8dca0cd..e991880 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -216,13 +216,13 @@ mod tests { let mut expected = Issues::new(); - let uuid = String::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"); + let uuid = String::from("3fa5bfd93317ad25772680071d5ac325"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue(crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:38:40-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/description b/test/0002/3fa5bfd93317ad25772680071d5ac325/description similarity index 100% rename from test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/description rename to test/0002/3fa5bfd93317ad25772680071d5ac325/description diff --git a/test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/state b/test/0002/3fa5bfd93317ad25772680071d5ac325/state similarity index 100% rename from test/0002/3fa5bfd93317ad25772680071d5ac3259cd2384f/state rename to test/0002/3fa5bfd93317ad25772680071d5ac325/state From b3903a9ed2e25214239ae796878c2ba9adc559bd Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Thu, 24 Jul 2025 08:39:02 -0600 Subject: [PATCH 10/11] test dir cleanup: rename test/0002/a85f81fc5f14cb5d4851dd445dc9744c Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issues.rs | 8 ++++---- .../dependencies/3fa5bfd93317ad25772680071d5ac325} | 0 .../dependencies/dd79c8cfb8beeacd0460429944b4ecbe} | 0 .../description | 0 .../state | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename test/0002/{a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/3fa5bfd93317ad25772680071d5ac3259cd2384f => a85f81fc5f14cb5d4851dd445dc9744c/dependencies/3fa5bfd93317ad25772680071d5ac325} (100%) rename test/0002/{a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/dd79c8cfb8beeacd0460429944b4ecbe95a31561 => a85f81fc5f14cb5d4851dd445dc9744c/dependencies/dd79c8cfb8beeacd0460429944b4ecbe} (100%) rename test/0002/{a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7 => a85f81fc5f14cb5d4851dd445dc9744c}/description (100%) rename test/0002/{a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7 => a85f81fc5f14cb5d4851dd445dc9744c}/state (100%) diff --git a/src/issues.rs b/src/issues.rs index e991880..f54fe87 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -256,22 +256,22 @@ mod tests { }, ); - let uuid = String::from("a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7"); + let uuid = String::from("a85f81fc5f14cb5d4851dd445dc9744c"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:39:02-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, tags: Vec::::new(), state: crate::issue::State::WontDo, dependencies: Some(vec![ - crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"), - crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"), + crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac325"), + crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe"), ]), assignee: None, description: String::from("issue with dependencies\n\na test has begun\nfor dependencies we seek\nintertwining life"), diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/3fa5bfd93317ad25772680071d5ac3259cd2384f b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/3fa5bfd93317ad25772680071d5ac325 similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/3fa5bfd93317ad25772680071d5ac3259cd2384f rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/3fa5bfd93317ad25772680071d5ac325 diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/dd79c8cfb8beeacd0460429944b4ecbe95a31561 b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/dd79c8cfb8beeacd0460429944b4ecbe similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/dependencies/dd79c8cfb8beeacd0460429944b4ecbe95a31561 rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c/dependencies/dd79c8cfb8beeacd0460429944b4ecbe diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/description b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/description similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/description rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c/description diff --git a/test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/state b/test/0002/a85f81fc5f14cb5d4851dd445dc9744c/state similarity index 100% rename from test/0002/a85f81fc5f14cb5d4851dd445dc9744c7f16ccc7/state rename to test/0002/a85f81fc5f14cb5d4851dd445dc9744c/state From fad23ba233adc90a34175281552c5eadace9f661 Mon Sep 17 00:00:00 2001 From: sigil-03 Date: Thu, 24 Jul 2025 08:39:20 -0600 Subject: [PATCH 11/11] test dir cleanup: rename test/0002/dd79c8cfb8beeacd0460429944b4ecbe Renaming everything also means they have new creation-times, since we're now git logging a different file/dir. --- src/issues.rs | 4 ++-- .../description | 0 .../state | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename test/0002/{dd79c8cfb8beeacd0460429944b4ecbe95a31561 => dd79c8cfb8beeacd0460429944b4ecbe}/description (100%) rename test/0002/{dd79c8cfb8beeacd0460429944b4ecbe95a31561 => dd79c8cfb8beeacd0460429944b4ecbe}/state (100%) diff --git a/src/issues.rs b/src/issues.rs index f54fe87..d3c57c0 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -235,14 +235,14 @@ mod tests { dir, }); - let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"); + let uuid = String::from("dd79c8cfb8beeacd0460429944b4ecbe"); let mut dir = std::path::PathBuf::from(issues_dir); dir.push(&uuid); expected.add_issue( crate::issue::Issue { id: uuid, author: String::from("sigil-03 "), - creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-05T13:55:49-06:00") + creation_time: chrono::DateTime::parse_from_rfc3339("2025-07-24T08:39:20-06:00") .unwrap() .with_timezone(&chrono::Local), done_time: None, diff --git a/test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description b/test/0002/dd79c8cfb8beeacd0460429944b4ecbe/description similarity index 100% rename from test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/description rename to test/0002/dd79c8cfb8beeacd0460429944b4ecbe/description diff --git a/test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state b/test/0002/dd79c8cfb8beeacd0460429944b4ecbe/state similarity index 100% rename from test/0002/dd79c8cfb8beeacd0460429944b4ecbe95a31561/state rename to test/0002/dd79c8cfb8beeacd0460429944b4ecbe/state