feat(cli)!: convert update subcommand to --update flag
BREAKING CHANGE: The 'update' subcommand is replaced with flags: - Use '--update' to update all cached repositories - Use '--update --repo owner/repo' to update a specific repo - Searching for 'update' keyword now works: 'gh-celebs update'
This commit is contained in:
23
src/cli.rs
23
src/cli.rs
@@ -1,13 +1,10 @@
|
||||
use clap::{Parser, Subcommand};
|
||||
use clap::Parser;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(name = "gh-celebs")]
|
||||
#[command(about = "A fast CLI tool for searching GitHub repositories by popularity")]
|
||||
#[command(version)]
|
||||
pub struct Cli {
|
||||
#[command(subcommand)]
|
||||
pub command: Option<Commands>,
|
||||
|
||||
#[arg(help = "Search query", value_name = "QUERY")]
|
||||
pub query: Option<String>,
|
||||
|
||||
@@ -16,15 +13,13 @@ pub struct Cli {
|
||||
|
||||
#[arg(long, help = "Output results as JSON")]
|
||||
pub json: bool,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
pub enum Commands {
|
||||
#[command(about = "Update cached repositories")]
|
||||
Update {
|
||||
#[arg(
|
||||
help = "Repository to update (format: owner/repo). If not specified, updates all cached repos."
|
||||
)]
|
||||
repo: Option<String>,
|
||||
},
|
||||
#[arg(long, help = "Update cached repositories")]
|
||||
pub update: bool,
|
||||
|
||||
#[arg(
|
||||
long,
|
||||
help = "Repository to update (format: owner/repo). Requires --update"
|
||||
)]
|
||||
pub repo: Option<String>,
|
||||
}
|
||||
|
||||
53
src/main.rs
53
src/main.rs
@@ -11,7 +11,7 @@ use clap::Parser;
|
||||
use directories::ProjectDirs;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use crate::cli::{Cli, Commands};
|
||||
use crate::cli::Cli;
|
||||
use crate::config::Config;
|
||||
use crate::db::Database;
|
||||
use crate::github::GitHubClient;
|
||||
@@ -51,38 +51,35 @@ async fn main() -> Result<()> {
|
||||
let github = GitHubClient::new(config.github.token)?;
|
||||
let search_engine = SearchEngine::new(db, github);
|
||||
|
||||
match cli.command {
|
||||
Some(Commands::Update { repo }) => {
|
||||
if let Some(repo_name) = repo {
|
||||
let rate_limit = search_engine.update_single(&repo_name).await?;
|
||||
if rate_limit.remaining < 3 {
|
||||
eprintln!("Warning: Rate limit running low ({} remaining)", rate_limit.remaining);
|
||||
}
|
||||
} else {
|
||||
let rate_limit = search_engine.update_all().await?;
|
||||
if rate_limit.remaining < 3 {
|
||||
eprintln!("Warning: Rate limit running low ({} remaining)", rate_limit.remaining);
|
||||
}
|
||||
if cli.update {
|
||||
if let Some(repo_name) = cli.repo {
|
||||
let rate_limit = search_engine.update_single(&repo_name).await?;
|
||||
if rate_limit.remaining < 3 {
|
||||
eprintln!("Warning: Rate limit running low ({} remaining)", rate_limit.remaining);
|
||||
}
|
||||
} else {
|
||||
let rate_limit = search_engine.update_all().await?;
|
||||
if rate_limit.remaining < 3 {
|
||||
eprintln!("Warning: Rate limit running low ({} remaining)", rate_limit.remaining);
|
||||
}
|
||||
}
|
||||
None => {
|
||||
let query = cli.query.ok_or_else(|| {
|
||||
anyhow::anyhow!("Query is required when not using a subcommand")
|
||||
})?;
|
||||
} else {
|
||||
let query = cli.query.ok_or_else(|| {
|
||||
anyhow::anyhow!("Query is required. Use --update to update cached repositories.")
|
||||
})?;
|
||||
|
||||
let response = search_engine.search(&query, cli.limit).await?;
|
||||
let response = search_engine.search(&query, cli.limit).await?;
|
||||
|
||||
if cli.json {
|
||||
let json = OutputFormatter::format_json(&response)?;
|
||||
println!("{}", json);
|
||||
} else {
|
||||
let text = OutputFormatter::format_text(&response)?;
|
||||
println!("{}", text);
|
||||
}
|
||||
if cli.json {
|
||||
let json = OutputFormatter::format_json(&response)?;
|
||||
println!("{}", json);
|
||||
} else {
|
||||
let text = OutputFormatter::format_text(&response)?;
|
||||
println!("{}", text);
|
||||
}
|
||||
|
||||
if response.api_remaining < 3 {
|
||||
eprintln!("Warning: GitHub API rate limit running low ({} remaining)", response.api_remaining);
|
||||
}
|
||||
if response.api_remaining < 3 {
|
||||
eprintln!("Warning: GitHub API rate limit running low ({} remaining)", response.api_remaining);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user