use crate::config::Config;
use crate::engine::Stack;
use crate::forge::ForgeClient;
use crate::git::GitRepo;
use crate::remote::RemoteInfo;
use anyhow::Result;
pub fn resolve_pr_number(
repo: &GitRepo,
stack: &Stack,
branch: &str,
config: &Config,
) -> Result<Option<u64>> {
if let Some(branch_info) = stack.branches.get(branch) {
if let Some(pr_number) = branch_info.pr_number {
return Ok(Some(pr_number));
}
}
let remote_info = match RemoteInfo::from_repo(repo, config) {
Ok(info) => info,
Err(_) => return Ok(None),
};
let rt = tokio::runtime::Runtime::new()?;
let _enter = rt.enter();
let client = match ForgeClient::new(&remote_info) {
Ok(c) => c,
Err(_) => return Ok(None),
};
let pr_number = match rt.block_on(async { client.find_open_pr_by_head(branch).await }) {
Ok(Some(pr_info)) => pr_info.info.number,
_ => return Ok(None),
};
Ok(Some(pr_number))
}