make ent list sort issues first by state, then by ctime

This commit is contained in:
Sebastian Kuzminsky 2025-07-08 16:09:45 -06:00
parent a08b514c34
commit 9933b139d9
2 changed files with 33 additions and 2 deletions

View file

@ -61,8 +61,39 @@ fn handle_command(args: &Args, issues_dir: &std::path::Path) -> anyhow::Result<(
Commands::List => {
let issues =
entomologist::issues::Issues::new_from_dir(std::path::Path::new(issues_dir))?;
let mut uuids_by_state = std::collections::HashMap::<
entomologist::issue::State,
Vec<&entomologist::issue::IssueHandle>,
>::new();
for (uuid, issue) in issues.issues.iter() {
println!("{} {} ({:?})", uuid, issue.title(), issue.state);
uuids_by_state
.entry(issue.state.clone())
.or_default()
.push(uuid);
}
use entomologist::issue::State;
for state in [
State::InProgress,
State::Blocked,
State::Backlog,
State::New,
State::Done,
State::WontDo,
] {
let these_uuids = uuids_by_state.entry(state.clone()).or_default();
these_uuids.sort_by(|a_id, b_id| {
let a = issues.issues.get(*a_id).unwrap();
let b = issues.issues.get(*b_id).unwrap();
a.timestamp.cmp(&b.timestamp)
});
println!("{:?}:", state);
for uuid in these_uuids {
let issue = issues.issues.get(*uuid).unwrap();
println!("{} {}", uuid, issue.title());
}
println!("");
}
}

View file

@ -5,7 +5,7 @@ use std::str::FromStr;
#[cfg(feature = "log")]
use log::debug;
#[derive(Clone, Debug, PartialEq, serde::Deserialize)]
#[derive(Clone, Debug, Eq, Hash, PartialEq, serde::Deserialize)]
/// These are the states an issue can be in.
pub enum State {
New,