Skip to main content

ralph/cli/queue/
history.rs

1//! Queue history subcommand.
2
3use anyhow::Result;
4use clap::Args;
5
6use crate::cli::load_and_validate_queues_read_only;
7use crate::config::Resolved;
8use crate::reports;
9
10use super::QueueReportFormat;
11
12/// Arguments for `ralph queue history`.
13#[derive(Args)]
14#[command(
15    after_long_help = "Examples:\n  ralph queue history\n  ralph queue history --days 14\n  ralph queue history --format json"
16)]
17pub struct QueueHistoryArgs {
18    /// Number of days to show (default: 7).
19    #[arg(long, default_value_t = 7)]
20    pub days: u32,
21
22    /// Output format.
23    #[arg(long, value_enum, default_value_t = QueueReportFormat::Text)]
24    pub format: QueueReportFormat,
25}
26
27pub(crate) fn handle(resolved: &Resolved, args: QueueHistoryArgs) -> Result<()> {
28    let (queue_file, done_file) = load_and_validate_queues_read_only(resolved, true)?;
29    let done_ref = done_file
30        .as_ref()
31        .filter(|d| !d.tasks.is_empty() || resolved.done_path.exists());
32    reports::print_history(&queue_file, done_ref, args.days, args.format.into())?;
33    Ok(())
34}