From b29d5fbfc1e39804534353ab606d2ef2fcf2441f Mon Sep 17 00:00:00 2001 From: Quentin Boyer Date: Tue, 16 Sep 2025 17:55:15 +0200 Subject: [PATCH] Correctly identify remote branches --- src/main.rs | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index cc8a037..d5bb8ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,10 +69,35 @@ impl Delete { .as_ref() .try_m_unwrap_or_else(|| Ok(¤t_branch))?; - let has_remote = git_cd(&["rev-parse", "@{u}"]).is_ok(); - if has_remote && !self.local_only { - println!("Removing branch from remote repository"); - git_cd(&["push", "-d", "origin", branch])?; + if !self.local_only + && let Ok(remote) = git_cd(&[ + "rev-parse", + "--symbolic-full-name", + &format!("{branch}@{{u}}"), + ]) + { + let mut components = remote.split("/"); + let refs = components + .next() + .ok_or_else(|| miette!("Missing `refs` component in {remote}"))?; + miette::ensure!(refs == "refs", "Unexepected {refs} component in `{remote}`"); + let remotes = components + .next() + .ok_or_else(|| miette!("Missing `remotes` in {remote}"))?; + miette::ensure!( + remotes == "remotes", + "Unexepected {remotes} component in `{remote}`" + ); + + let remote_name = components + .next() + .ok_or_else(|| miette!("Missing remote name in {remote}"))?; + let remote_branch_name = components + .next() + .ok_or_else(|| miette!("Missing remote branch name in {remote}"))?; + + println!("Removing branch {remote_branch_name} from remote repository ({remote_name})"); + git_cd(&["push", "-d", remote_name, remote_branch_name])?; } if branch == ¤t_branch {