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 } => {
|
Commands::Tag { issue_id, tag } => match tag {
|
||||||
let issues = entomologist::database::read_issues_database(issues_database_source)?;
|
Some(tag) => {
|
||||||
let Some(issue) = issues.issues.get(issue_id) else {
|
// Add or remove tag.
|
||||||
return Err(anyhow::anyhow!("issue {} not found", issue_id));
|
if tag.len() == 0 {
|
||||||
};
|
return Err(anyhow::anyhow!("invalid zero-length tag"));
|
||||||
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)?;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
None => {
|
let issues_database = entomologist::database::make_issues_database(
|
||||||
// Just list the tags.
|
issues_database_source,
|
||||||
match &issue.tags.len() {
|
entomologist::database::IssuesDatabaseAccess::ReadWrite,
|
||||||
0 => println!("no tags"),
|
)?;
|
||||||
_ => {
|
let mut issues = entomologist::issues::Issues::new_from_dir(&issues_database.dir)?;
|
||||||
// Could use `format!(" {:?}", issue.tags)`
|
let Some(issue) = issues.get_mut_issue(issue_id) else {
|
||||||
// here, but that results in `["tag1", "TAG2",
|
return Err(anyhow::anyhow!("issue {} not found", issue_id));
|
||||||
// "i-am-also-a-tag"]` and i don't want the
|
};
|
||||||
// double-quotes around each tag.
|
if tag.chars().nth(0).unwrap() == '-' {
|
||||||
for tag in &issue.tags {
|
let tag = &tag[1..];
|
||||||
println!("{}", tag);
|
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 {
|
Commands::DoneTime {
|
||||||
issue_id,
|
issue_id,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue