ent tag: speed up adding/removing tag

This commit is contained in:
Sebastian Kuzminsky 2025-07-22 10:01:31 -06:00
parent 452671d272
commit cc1b378346

View file

@ -445,26 +445,20 @@ fn handle_command(
} }
} }
Commands::Tag { issue_id, tag } => { Commands::Tag { issue_id, tag } => match tag {
let issues = entomologist::database::read_issues_database(issues_database_source)?;
let Some(issue) = issues.issues.get(issue_id) else {
return Err(anyhow::anyhow!("issue {} not found", issue_id));
};
match tag {
Some(tag) => { Some(tag) => {
// Add or remove tag. // Add or remove tag.
if tag.len() == 0 {
return Err(anyhow::anyhow!("invalid zero-length tag"));
}
let issues_database = entomologist::database::make_issues_database( let issues_database = entomologist::database::make_issues_database(
issues_database_source, issues_database_source,
entomologist::database::IssuesDatabaseAccess::ReadWrite, entomologist::database::IssuesDatabaseAccess::ReadWrite,
)?; )?;
let mut issues = let mut issues = entomologist::issues::Issues::new_from_dir(&issues_database.dir)?;
entomologist::issues::Issues::new_from_dir(&issues_database.dir)?;
let Some(issue) = issues.get_mut_issue(issue_id) else { let Some(issue) = issues.get_mut_issue(issue_id) else {
return Err(anyhow::anyhow!("issue {} not found", issue_id)); return Err(anyhow::anyhow!("issue {} not found", issue_id));
}; };
if tag.len() == 0 {
return Err(anyhow::anyhow!("invalid zero-length tag"));
}
if tag.chars().nth(0).unwrap() == '-' { if tag.chars().nth(0).unwrap() == '-' {
let tag = &tag[1..]; let tag = &tag[1..];
issue.remove_tag(tag)?; issue.remove_tag(tag)?;
@ -474,6 +468,10 @@ fn handle_command(
} }
None => { None => {
// Just list the tags. // Just list the tags.
let issues = entomologist::database::read_issues_database(issues_database_source)?;
let Some(issue) = issues.issues.get(issue_id) else {
return Err(anyhow::anyhow!("issue {} not found", issue_id));
};
match &issue.tags.len() { match &issue.tags.len() {
0 => println!("no tags"), 0 => println!("no tags"),
_ => { _ => {
@ -487,8 +485,7 @@ fn handle_command(
} }
} }
} }
} },
}
Commands::DoneTime { Commands::DoneTime {
issue_id, issue_id,