ent tag: speed up adding/removing tag
This commit is contained in:
parent
452671d272
commit
cc1b378346
1 changed files with 36 additions and 39 deletions
|
|
@ -445,50 +445,47 @@ fn handle_command(
|
|||
}
|
||||
}
|
||||
|
||||
Commands::Tag { issue_id, 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) => {
|
||||
// Add or remove tag.
|
||||
let issues_database = entomologist::database::make_issues_database(
|
||||
issues_database_source,
|
||||
entomologist::database::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));
|
||||
};
|
||||
if tag.len() == 0 {
|
||||
return Err(anyhow::anyhow!("invalid zero-length tag"));
|
||||
}
|
||||
if tag.chars().nth(0).unwrap() == '-' {
|
||||
let tag = &tag[1..];
|
||||
issue.remove_tag(tag)?;
|
||||
} else {
|
||||
issue.add_tag(tag)?;
|
||||
}
|
||||
Commands::Tag { issue_id, tag } => match tag {
|
||||
Some(tag) => {
|
||||
// Add or remove tag.
|
||||
if tag.len() == 0 {
|
||||
return Err(anyhow::anyhow!("invalid zero-length tag"));
|
||||
}
|
||||
None => {
|
||||
// Just list the tags.
|
||||
match &issue.tags.len() {
|
||||
0 => println!("no tags"),
|
||||
_ => {
|
||||
// Could use `format!(" {:?}", issue.tags)`
|
||||
// here, but that results in `["tag1", "TAG2",
|
||||
// "i-am-also-a-tag"]` and i don't want the
|
||||
// double-quotes around each tag.
|
||||
for tag in &issue.tags {
|
||||
println!("{}", tag);
|
||||
}
|
||||
let issues_database = entomologist::database::make_issues_database(
|
||||
issues_database_source,
|
||||
entomologist::database::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));
|
||||
};
|
||||
if tag.chars().nth(0).unwrap() == '-' {
|
||||
let tag = &tag[1..];
|
||||
issue.remove_tag(tag)?;
|
||||
} else {
|
||||
issue.add_tag(tag)?;
|
||||
}
|
||||
}
|
||||
None => {
|
||||
// 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() {
|
||||
0 => println!("no tags"),
|
||||
_ => {
|
||||
// Could use `format!(" {:?}", issue.tags)`
|
||||
// here, but that results in `["tag1", "TAG2",
|
||||
// "i-am-also-a-tag"]` and i don't want the
|
||||
// double-quotes around each tag.
|
||||
for tag in &issue.tags {
|
||||
println!("{}", tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Commands::DoneTime {
|
||||
issue_id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue