From d607dbb56c984a9713f8f71b73acb659fe5b8dd0 Mon Sep 17 00:00:00 2001 From: Sam Kvale Date: Thu, 5 Mar 2026 07:41:58 -0600 Subject: [PATCH 1/2] fix: gh pr edit/comment pass correct subcommand to gh pr_action was receiving the past-tense display label ("edited", "commented") and using it as both the gh subcommand and the ok_confirmation message. This caused `gh pr edited` to be invoked instead of `gh pr edit`, which fails with "unknown flag" errors. Split the parameter into subcmd (for the gh invocation) and display_label (for ok_confirmation output). --- src/gh_cmd.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gh_cmd.rs b/src/gh_cmd.rs index f52ed80d87..9c9a0521ff 100644 --- a/src/gh_cmd.rs +++ b/src/gh_cmd.rs @@ -136,8 +136,8 @@ fn run_pr(args: &[String], verbose: u8, ultra_compact: bool) -> Result<()> { "create" => pr_create(&args[1..], verbose), "merge" => pr_merge(&args[1..], verbose), "diff" => pr_diff(&args[1..], verbose), - "comment" => pr_action("commented", &args[1..], verbose), - "edit" => pr_action("edited", &args[1..], verbose), + "comment" => pr_action("comment", "commented", &args[1..], verbose), + "edit" => pr_action("edit", "edited", &args[1..], verbose), _ => run_passthrough("gh", "pr", args), } } @@ -1068,25 +1068,25 @@ fn pr_diff(args: &[String], _verbose: u8) -> Result<()> { } /// Generic PR action handler for comment/edit -fn pr_action(action: &str, args: &[String], _verbose: u8) -> Result<()> { +fn pr_action(subcmd: &str, display_label: &str, args: &[String], _verbose: u8) -> Result<()> { let timer = tracking::TimedExecution::start(); let mut cmd = Command::new("gh"); - cmd.args(["pr", action]); + cmd.args(["pr", subcmd]); for arg in args { cmd.arg(arg); } let output = cmd .output() - .context(format!("Failed to run gh pr {}", action))?; + .context(format!("Failed to run gh pr {}", subcmd))?; let stdout = String::from_utf8_lossy(&output.stdout).to_string(); if !output.status.success() { let stderr = String::from_utf8_lossy(&output.stderr).to_string(); timer.track( - &format!("gh pr {}", action), - &format!("rtk gh pr {}", action), + &format!("gh pr {}", subcmd), + &format!("rtk gh pr {}", subcmd), &stderr, &stderr, ); @@ -1101,7 +1101,7 @@ fn pr_action(action: &str, args: &[String], _verbose: u8) -> Result<()> { .map(|s| format!("#{}", s)) .unwrap_or_default(); - let filtered = ok_confirmation(action, &pr_num); + let filtered = ok_confirmation(display_label, &pr_num); println!("{}", filtered); // Use stdout or pr_num as raw input @@ -1112,8 +1112,8 @@ fn pr_action(action: &str, args: &[String], _verbose: u8) -> Result<()> { }; timer.track( - &format!("gh pr {}", action), - &format!("rtk gh pr {}", action), + &format!("gh pr {}", subcmd), + &format!("rtk gh pr {}", subcmd), &raw, &filtered, ); From 14bf0cbb7cdfd9648cd21032c624d04d66fa50dd Mon Sep 17 00:00:00 2001 From: Sam Kvale Date: Thu, 5 Mar 2026 19:17:11 -0600 Subject: [PATCH 2/2] smaller diff --- src/gh_cmd.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/gh_cmd.rs b/src/gh_cmd.rs index 9c9a0521ff..5a254011aa 100644 --- a/src/gh_cmd.rs +++ b/src/gh_cmd.rs @@ -136,8 +136,8 @@ fn run_pr(args: &[String], verbose: u8, ultra_compact: bool) -> Result<()> { "create" => pr_create(&args[1..], verbose), "merge" => pr_merge(&args[1..], verbose), "diff" => pr_diff(&args[1..], verbose), - "comment" => pr_action("comment", "commented", &args[1..], verbose), - "edit" => pr_action("edit", "edited", &args[1..], verbose), + "comment" => pr_action("commented", &args, verbose), + "edit" => pr_action("edited", &args, verbose), _ => run_passthrough("gh", "pr", args), } } @@ -1068,11 +1068,12 @@ fn pr_diff(args: &[String], _verbose: u8) -> Result<()> { } /// Generic PR action handler for comment/edit -fn pr_action(subcmd: &str, display_label: &str, args: &[String], _verbose: u8) -> Result<()> { +fn pr_action(action: &str, args: &[String], _verbose: u8) -> Result<()> { let timer = tracking::TimedExecution::start(); + let subcmd = &args[0]; let mut cmd = Command::new("gh"); - cmd.args(["pr", subcmd]); + cmd.arg("pr"); for arg in args { cmd.arg(arg); } @@ -1094,14 +1095,14 @@ fn pr_action(subcmd: &str, display_label: &str, args: &[String], _verbose: u8) - std::process::exit(output.status.code().unwrap_or(1)); } - // Extract PR number from args - let pr_num = args + // Extract PR number from args (skip args[0] which is the subcommand) + let pr_num = args[1..] .iter() .find(|a| !a.starts_with('-')) .map(|s| format!("#{}", s)) .unwrap_or_default(); - let filtered = ok_confirmation(display_label, &pr_num); + let filtered = ok_confirmation(action, &pr_num); println!("{}", filtered); // Use stdout or pr_num as raw input