Show default backlog when invoked with no arguments
diff --git a/src/bin/ranger/main.rs b/src/bin/ranger/main.rs
index 0a39733..e1744b2 100644
--- a/src/bin/ranger/main.rs
+++ b/src/bin/ranger/main.rs
@@ -16,7 +16,7 @@ struct Cli {
db: Option<PathBuf>,
#[command(subcommand)]
- command: Commands,
+ command: Option<Commands>,
}
#[derive(Subcommand)]
@@ -62,15 +62,31 @@ async fn main() -> color_eyre::Result<()> {
let pool = ranger::db::connect(&db_path).await?;
match cli.command {
- Commands::Backlog { command } => {
+ Some(Commands::Backlog { command }) => {
commands::backlog::run(&pool, command, cli.json).await?;
}
- Commands::Task { command } => {
+ Some(Commands::Task { command }) => {
commands::task::run(&pool, command, cli.json).await?;
}
- Commands::Comment { command } => {
+ Some(Commands::Comment { command }) => {
commands::comment::run(&pool, command, cli.json).await?;
}
+ None => {
+ // No subcommand: show the default backlog
+ let backlog_name = std::env::var("RANGER_DEFAULT_BACKLOG").ok();
+ match backlog_name {
+ Some(name) => {
+ let show_cmd =
+ commands::backlog::BacklogCommands::Show { name };
+ commands::backlog::run(&pool, show_cmd, cli.json).await?;
+ }
+ None => {
+ // No default backlog set — list all backlogs
+ let list_cmd = commands::backlog::BacklogCommands::List;
+ commands::backlog::run(&pool, list_cmd, cli.json).await?;
+ }
+ }
+ }
}
Ok(())
diff --git a/tests/cli.rs b/tests/cli.rs
index 37cc970..0c8eddd 100644
--- a/tests/cli.rs
+++ b/tests/cli.rs
@@ -250,4 +250,27 @@ fn full_workflow() {
.unwrap();
let tasks: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
assert_eq!(tasks.as_array().unwrap().len(), 3);
+
+ // No-args with RANGER_DEFAULT_BACKLOG shows the default backlog
+ let output = ranger(db_path).output().unwrap();
+ assert!(output.status.success());
+ let stdout = String::from_utf8(output.stdout).unwrap();
+ assert!(stdout.contains("Ranger"));
+ // Should show task state sections
+ assert!(stdout.contains("[in_progress]") || stdout.contains("[queued]") || stdout.contains("[icebox]"));
+
+ // No-args with JSON flag
+ let output = ranger(db_path).args(["--json"]).output().unwrap();
+ assert!(output.status.success());
+ let detail: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
+ assert_eq!(detail["backlog"]["name"], "Ranger");
+
+ // No-args without RANGER_DEFAULT_BACKLOG lists all backlogs
+ let mut cmd = Command::from(cargo_bin_cmd!("ranger"));
+ cmd.env("RANGER_DB", db_path);
+ cmd.env_remove("RANGER_DEFAULT_BACKLOG");
+ let output = cmd.output().unwrap();
+ assert!(output.status.success());
+ let stdout = String::from_utf8(output.stdout).unwrap();
+ assert!(stdout.contains("Ranger"));
}