From 1c8d994fd9cb798f1ac6d366e7c294b90a004969 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Fri, 11 Jul 2025 12:39:48 -0600 Subject: [PATCH] better `ent assign` log message --- src/bin/ent/main.rs | 37 +++++++++++++++++++------------------ src/issue.rs | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/bin/ent/main.rs b/src/bin/ent/main.rs index 1bc66ba..11f74a4 100644 --- a/src/bin/ent/main.rs +++ b/src/bin/ent/main.rs @@ -363,31 +363,32 @@ fn handle_command( issue_id, new_assignee, } => { - let issues_database = - make_issues_database(issues_database_source, IssuesDatabaseAccess::ReadWrite)?; - let mut issues = entomologist::issues::Issues::new_from_dir(&issues_database.dir)?; - let Some(issue) = issues.issues.get_mut(issue_id) else { + let issues = read_issues_database(issues_database_source)?; + let Some(original_issue) = issues.issues.get(issue_id) else { return Err(anyhow::anyhow!("issue {} not found", issue_id)); }; - match (&issue.assignee, new_assignee) { - (Some(old_assignee), Some(new_assignee)) => { - println!("issue: {}", issue_id); + let old_assignee: String = match &original_issue.assignee { + Some(assignee) => assignee.clone(), + None => String::from("None"), + }; + println!("issue: {}", issue_id); + match new_assignee { + Some(new_assignee) => { + let issues_database = make_issues_database( + issues_database_source, + IssuesDatabaseAccess::ReadWrite, + )?; + let mut issues = + entomologist::issues::Issues::new_from_dir(&issues_database.dir)?; + let Some(issue) = issues.get_mut_issue(issue_id) else { + return Err(anyhow::anyhow!("issue {} not found", issue_id)); + }; println!("assignee: {} -> {}", old_assignee, new_assignee); issue.set_assignee(new_assignee)?; } - (Some(old_assignee), None) => { - println!("issue: {}", issue_id); + None => { println!("assignee: {}", old_assignee); } - (None, Some(new_assignee)) => { - println!("issue: {}", issue_id); - println!("assignee: None -> {}", new_assignee); - issue.set_assignee(new_assignee)?; - } - (None, None) => { - println!("issue: {}", issue_id); - println!("assignee: None"); - } } } } diff --git a/src/issue.rs b/src/issue.rs index 9b5ee18..d83cf99 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -289,12 +289,28 @@ impl Issue { Ok(()) } + /// Set the Assignee of an Issue. pub fn set_assignee(&mut self, new_assignee: &str) -> Result<(), IssueError> { + let old_assignee = match &self.assignee { + Some(assignee) => assignee.clone(), + None => String::from("None"), + }; let mut assignee_filename = std::path::PathBuf::from(&self.dir); assignee_filename.push("assignee"); let mut assignee_file = std::fs::File::create(&assignee_filename)?; write!(assignee_file, "{}", new_assignee)?; - crate::git::git_commit_file(&assignee_filename)?; + crate::git::add(&assignee_filename)?; + if crate::git::worktree_is_dirty(&self.dir.to_string_lossy())? { + crate::git::commit( + &self.dir, + &format!( + "change assignee of issue {}, {} -> {}", + self.dir.file_name().unwrap().to_string_lossy(), + old_assignee, + new_assignee, + ), + )?; + } Ok(()) } }