hive-forge: global -r/--repo flag instead of per-verb [repo] positional (mara@#407)

This commit is contained in:
damocles 2026-05-25 02:12:04 +02:00 committed by Mara
commit badf21714b
21 changed files with 46 additions and 85 deletions

View file

@ -17,10 +17,7 @@ pub struct Args {
#[derive(Subcommand)]
enum Action {
/// List open milestones as JSON.
List {
/// Repo override.
repo: Option<String>,
},
List,
/// Create a milestone, print {id,title}.
Create {
/// Milestone title.
@ -32,22 +29,18 @@ enum Action {
/// Due date YYYY-MM-DD.
#[arg(long)]
due: Option<String>,
/// Repo override.
repo: Option<String>,
},
/// Close a milestone by id.
Close {
/// Milestone id.
id: u64,
/// Repo override.
repo: Option<String>,
},
}
pub fn run(client: &Client, args: Args) -> Result<()> {
match args.action.unwrap_or(Action::List { repo: None }) {
Action::List { repo } => {
let repo = client.repo(repo.as_deref());
let repo = client.repo();
match args.action.unwrap_or(Action::List) {
Action::List => {
let v =
client.get_json(&format!("/repos/{repo}/milestones?state=open&limit=50"))?;
let trimmed: Vec<Value> = v
@ -69,13 +62,7 @@ pub fn run(client: &Client, args: Args) -> Result<()> {
.unwrap_or_default();
print_json(&Value::Array(trimmed))
}
Action::Create {
title,
desc,
due,
repo,
} => {
let repo = client.repo(repo.as_deref());
Action::Create { title, desc, due } => {
let mut payload = json!({ "title": title });
if let Some(d) = desc.filter(|s| !s.is_empty()) {
payload["description"] = Value::String(d);
@ -89,8 +76,7 @@ pub fn run(client: &Client, args: Args) -> Result<()> {
"title": resp.get("title"),
}))
}
Action::Close { id, repo } => {
let repo = client.repo(repo.as_deref());
Action::Close { id } => {
let resp = client.patch_json(
&format!("/repos/{repo}/milestones/{id}"),
&json!({ "state": "closed" }),