Skip to content

Commit 413bec9

Browse files
authored
Fix geting main branch SHA for main branch (#290)
1 parent 1e8688d commit 413bec9

File tree

2 files changed

+14
-39
lines changed

2 files changed

+14
-39
lines changed

fplus-lib/src/core/mod.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4916,10 +4916,7 @@ impl LDNPullRequest {
49164916
) -> Result<String, LDNError> {
49174917
let initial_commit = Self::application_initial_commit(&owner_name, &issue_number);
49184918
let gh: GithubWrapper = github_async_new(owner.to_string(), repo.to_string()).await?;
4919-
let head_hash = gh
4920-
.get_main_branch_sha()
4921-
.await
4922-
.map_err(|e| LDNError::New(format!("Failed to get branch: {e}")))?;
4919+
let head_hash = gh.get_main_branch_sha().await?;
49234920
let create_ref_request = gh
49244921
.build_create_ref_request(app_branch_name.clone(), head_hash)
49254922
.map_err(|e| {
@@ -4965,10 +4962,7 @@ impl LDNPullRequest {
49654962
pr_title: String,
49664963
) -> Result<NewPrNumberAndFileSha, LDNError> {
49674964
let gh = github_async_new(owner.to_string(), repo.to_string()).await?;
4968-
let head_hash = gh
4969-
.get_main_branch_sha()
4970-
.await
4971-
.map_err(|e| LDNError::New(format!("Failed to get main branch: {e}")))?;
4965+
let head_hash = gh.get_main_branch_sha().await?;
49724966
let create_ref_request = gh
49734967
.build_create_ref_request(branch_name.clone(), head_hash)
49744968
.map_err(|e| {

fplus-lib/src/external_services/github.rs

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ use hyper_rustls::HttpsConnectorBuilder;
77
use octocrab::auth::AppAuth;
88
use octocrab::models::issues::{Comment, Issue};
99
use octocrab::models::pulls::PullRequest;
10-
use octocrab::models::repos::{Branch, ContentItems, FileDeletion, FileUpdate};
10+
use octocrab::models::repos::{Branch, ContentItems, FileDeletion, FileUpdate, Object};
1111
use octocrab::models::{IssueState, Label};
12+
use octocrab::params::repos::Reference;
1213
use octocrab::params::{pulls::State as PullState, State};
1314
use octocrab::service::middleware::base_uri::BaseUriLayer;
1415
use octocrab::service::middleware::extra_headers::ExtraHeadersLayer;
@@ -520,38 +521,18 @@ impl GithubWrapper {
520521
}
521522

522523
pub async fn get_main_branch_sha(&self) -> Result<String, LDNError> {
523-
let url = format!(
524-
"https://api.github.com/repos/{}/{}/git/refs",
525-
self.owner, self.repo
526-
);
527-
let request = http::request::Builder::new()
528-
.method(http::Method::GET)
529-
.uri(url);
530-
let request = self
524+
let head_hash = self
531525
.inner
532-
.build_request::<String>(request, None)
533-
.map_err(|e| LDNError::Load(format!("Failed to build request: {e}")))?;
534-
535-
let mut response = match self.inner.execute(request).await {
536-
Ok(r) => r,
537-
Err(e) => {
538-
println!("Error getting main branch sha: {e:?}");
539-
return Ok("".to_string());
540-
}
541-
};
542-
let response = response.body_mut();
543-
let body = hyper::body::to_bytes(response)
526+
.repos(&self.owner, &self.repo)
527+
.get_ref(&Reference::Branch("main".to_string()))
544528
.await
545-
.map_err(|e| LDNError::Load(format!("Failed to serialize to bytes: {e}")))?;
546-
let shas = body.into_iter().map(|b| b as char).collect::<String>();
547-
let shas: RefList = serde_json::from_str(&shas)
548-
.map_err(|e| LDNError::Load(format!("Failed to serialize to RefList: {e}")))?;
549-
for sha in shas.0 {
550-
if sha._ref == "refs/heads/main" {
551-
return Ok(sha.object.sha);
552-
}
553-
}
554-
Ok("".to_string())
529+
.map_err(|e| LDNError::New(format!("Failed to get ref for main branch: {e}")))?;
530+
let sha = if let Object::Commit { sha, .. } = head_hash.object {
531+
sha
532+
} else {
533+
return Err(LDNError::New("Failed to get SHA for main branch".into()));
534+
};
535+
Ok(sha)
555536
}
556537

557538
pub fn build_create_ref_request(

0 commit comments

Comments
 (0)