From 6f3e4009035545581c492ae21a8defc2e0dda780 Mon Sep 17 00:00:00 2001 From: atlas Date: Wed, 8 Jul 2026 23:50:45 +0200 Subject: [PATCH] =?UTF-8?q?refactor(#1868):=20drop=20tokenised=5Frepo=5Fur?= =?UTF-8?q?l=20=E2=80=94=20call=20forge=5Fgit=5Furl=20directly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hive-c0re/src/forge/pr_merge.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/hive-c0re/src/forge/pr_merge.rs b/hive-c0re/src/forge/pr_merge.rs index cad72a5e..74398dec 100644 --- a/hive-c0re/src/forge/pr_merge.rs +++ b/hive-c0re/src/forge/pr_merge.rs @@ -77,13 +77,6 @@ fn repo_agent_name(repo: &str) -> &str { repo.rsplit('/').next().unwrap_or(repo) } -/// Token-in-URL clone/push URL for a forge repo (`owner/name`). Mirrors -/// `push_config`'s pattern; the token is passed straight to git and never -/// stored as a named remote. -fn tokenised_repo_url(repo: &str, token: &str) -> String { - forge_git_url(token, repo) -} - /// Resolve a PR's head sha via `git ls-remote refs/pull//head` /// (Forgejo exposes PR heads there). Pure read, no mutation — the handler's /// primary drift gate (compare against the approved sha), and `mark_pr_merged` @@ -94,7 +87,7 @@ fn tokenised_repo_url(repo: &str, token: &str) -> String { pub async fn pr_head_sha(repo: &str, pr: u64) -> Result { let token = core_token() .ok_or_else(|| ForgeMergeError::Other(anyhow::anyhow!("forge core token absent")))?; - let url = tokenised_repo_url(repo, &token); + let url = forge_git_url(&token, repo); let refspec = format!("refs/pull/{pr}/head"); let out = crate::lifecycle::git_command() .args(["ls-remote", &url, &refspec]) @@ -139,7 +132,7 @@ pub fn config_repo(agent: &str) -> String { pub async fn fetch_pr_head_into_applied(repo: &str, pr: u64) -> Result<(), ForgeMergeError> { let token = core_token() .ok_or_else(|| ForgeMergeError::Other(anyhow::anyhow!("forge core token absent")))?; - let url = tokenised_repo_url(repo, &token); + let url = forge_git_url(&token, repo); let applied = Coordinator::agent_applied_dir(repo_agent_name(repo)); let refspec = format!("refs/pull/{pr}/head"); let out = crate::lifecycle::git_command() @@ -171,7 +164,7 @@ pub async fn fetch_pr_head_into_applied(repo: &str, pr: u64) -> Result<(), Forge pub async fn ff_push_to_main(repo: &str, sha: &str) -> Result<(), ForgeMergeError> { let token = core_token() .ok_or_else(|| ForgeMergeError::Other(anyhow::anyhow!("forge core token absent")))?; - let url = tokenised_repo_url(repo, &token); + let url = forge_git_url(&token, repo); let applied = Coordinator::agent_applied_dir(repo_agent_name(repo)); // Current `main` on the forge repo. @@ -300,7 +293,8 @@ pub async fn mark_pr_merged(repo: &str, pr: u64, sha: &str) -> Result<(), ForgeM #[cfg(test)] mod tests { - use super::{repo_agent_name, tokenised_repo_url}; + use super::repo_agent_name; + use crate::forge::forge_git_url; #[test] fn repo_agent_name_takes_trailing_segment() { @@ -310,10 +304,10 @@ mod tests { } #[test] - fn tokenised_repo_url_shape() { + fn forge_git_url_shape() { // Credentials are inserted between scheme and authority; fallback // base is `http://localhost:3000` when HIVE_FORGE_URL is unset. - let url = tokenised_repo_url("agent-configs/iris", "tok"); + let url = forge_git_url("tok", "agent-configs/iris"); assert!(url.contains("core:tok@"), "must embed credentials: {url}"); assert!( url.ends_with("/agent-configs/iris.git"),