cleanups-and-show-log-in-ent-sync #17

Merged
seb merged 5 commits from cleanups-and-show-log-in-ent-sync into main 2025-07-11 20:28:58 -06:00
2 changed files with 36 additions and 19 deletions
Showing only changes of commit 1c8d994fd9 - Show all commits

View file

@ -363,31 +363,32 @@ fn handle_command(
issue_id, issue_id,
new_assignee, new_assignee,
} => { } => {
let issues_database = let issues = read_issues_database(issues_database_source)?;
make_issues_database(issues_database_source, IssuesDatabaseAccess::ReadWrite)?; let Some(original_issue) = issues.issues.get(issue_id) else {
let mut issues = entomologist::issues::Issues::new_from_dir(&issues_database.dir)?;
let Some(issue) = issues.issues.get_mut(issue_id) else {
return Err(anyhow::anyhow!("issue {} not found", issue_id)); return Err(anyhow::anyhow!("issue {} not found", issue_id));
}; };
match (&issue.assignee, new_assignee) { let old_assignee: String = match &original_issue.assignee {
(Some(old_assignee), Some(new_assignee)) => { Some(assignee) => assignee.clone(),
None => String::from("None"),
};
println!("issue: {}", issue_id); 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); println!("assignee: {} -> {}", old_assignee, new_assignee);
issue.set_assignee(new_assignee)?; issue.set_assignee(new_assignee)?;
} }
(Some(old_assignee), None) => { None => {
println!("issue: {}", issue_id);
println!("assignee: {}", old_assignee); 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");
}
} }
} }
} }

View file

@ -289,12 +289,28 @@ impl Issue {
Ok(()) Ok(())
} }
/// Set the Assignee of an Issue.
pub fn set_assignee(&mut self, new_assignee: &str) -> Result<(), IssueError> { 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); let mut assignee_filename = std::path::PathBuf::from(&self.dir);
assignee_filename.push("assignee"); assignee_filename.push("assignee");
let mut assignee_file = std::fs::File::create(&assignee_filename)?; let mut assignee_file = std::fs::File::create(&assignee_filename)?;
write!(assignee_file, "{}", new_assignee)?; 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(()) Ok(())
} }
} }