diff --git a/src/bin/ent/main.rs b/src/bin/ent/main.rs index 952d178..cb8eb9d 100644 --- a/src/bin/ent/main.rs +++ b/src/bin/ent/main.rs @@ -150,6 +150,9 @@ fn handle_command(args: &Args, issues_dir: &std::path::Path) -> anyhow::Result<( if let Some(dependencies) = &issue.dependencies { println!("dependencies: {:?}", dependencies); } + if let Some(assignee) = &issue.assignee { + println!("assignee: {}", assignee); + } println!(""); println!("{}", issue.description); for comment in &issue.comments { diff --git a/src/issue.rs b/src/issue.rs index 97aa8f1..096e497 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -24,6 +24,7 @@ pub struct Issue { pub timestamp: chrono::DateTime, pub state: State, pub dependencies: Option>, + pub assignee: Option, pub description: String, pub comments: Vec, @@ -90,6 +91,7 @@ impl Issue { let mut state = State::New; // default state, if not specified in the issue let mut dependencies: Option> = None; let mut comments = Vec::::new(); + let mut assignee: Option = None; for direntry in dir.read_dir()? { if let Ok(direntry) = direntry { @@ -99,6 +101,10 @@ impl Issue { } else if file_name == "state" { let state_string = std::fs::read_to_string(direntry.path())?; state = State::from_str(state_string.trim())?; + } else if file_name == "assignee" { + assignee = Some(String::from( + std::fs::read_to_string(direntry.path())?.trim(), + )); } else if file_name == "dependencies" { let dep_strings = std::fs::read_to_string(direntry.path())?; let deps: Vec = dep_strings @@ -129,6 +135,7 @@ impl Issue { timestamp, state: state, dependencies, + assignee, description: description.unwrap(), comments, dir: std::path::PathBuf::from(dir), @@ -180,6 +187,7 @@ impl Issue { timestamp: chrono::Local::now(), state: State::New, dependencies: None, + assignee: None, description: String::from(""), // FIXME: kind of bogus to use the empty string as None comments: Vec::::new(), dir: issue_dir, @@ -260,6 +268,7 @@ mod tests { .with_timezone(&chrono::Local), state: State::New, dependencies: None, + assignee: None, description: String::from("this is the title of my issue\n\nThis is the description of my issue.\nIt is multiple lines.\n* Arbitrary contents\n* But let's use markdown by convention\n"), comments: Vec::::new(), dir: std::path::PathBuf::from(issue_dir), @@ -278,6 +287,7 @@ mod tests { .with_timezone(&chrono::Local), state: State::InProgress, dependencies: None, + assignee: Some(String::from("beep boop")), description: String::from("minimal"), comments: Vec::::new(), dir: std::path::PathBuf::from(issue_dir), diff --git a/src/issues.rs b/src/issues.rs index ff6accb..16dab55 100644 --- a/src/issues.rs +++ b/src/issues.rs @@ -102,6 +102,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::InProgress, dependencies: None, + assignee: Some(String::from("beep boop")), description: String::from("minimal"), comments: Vec::::new(), dir, @@ -120,6 +121,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::New, dependencies: None, + assignee: None, description: String::from("this is the title of my issue\n\nThis is the description of my issue.\nIt is multiple lines.\n* Arbitrary contents\n* But let's use markdown by convention\n"), comments: Vec::::new(), dir, @@ -147,6 +149,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::Done, dependencies: None, + assignee: None, description: String::from("oh yeah we got titles"), comments: Vec::::new(), dir, @@ -179,6 +182,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::WontDo, dependencies: None, + assignee: None, description: String::from("issues out the wazoo\n\nLots of words\nthat don't say much\nbecause this is just\na test\n"), comments: expected_comments, dir, @@ -206,6 +210,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::Done, dependencies: None, + assignee: None, description: String::from("oh yeah we got titles\n"), comments: Vec::::new(), dir, @@ -224,6 +229,7 @@ mod tests { .with_timezone(&chrono::Local), state: crate::issue::State::WontDo, dependencies: None, + assignee: None, description: String::from("issues out the wazoo\n\nLots of words\nthat don't say much\nbecause this is just\na test\n"), comments: Vec::::new(), dir, @@ -245,6 +251,7 @@ mod tests { crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"), crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"), ]), + assignee: None, description: String::from("issue with dependencies\n\na test has begun\nfor dependencies we seek\nintertwining life"), comments: Vec::::new(), dir, diff --git a/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee b/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee new file mode 100644 index 0000000..fae06e3 --- /dev/null +++ b/test/0000/7792b063eef6d33e7da5dc1856750c149ba678c6/assignee @@ -0,0 +1 @@ +beep boop