fix(git): use repo.default_branch instead of HEAD to avoid master/branch mismatch
- Add #[serde(default)] to MergeAnalysisQuery.their_oid and MergeRefAnalysisQuery fields since they come from path parameters, not query strings - git_readme/git_commit_count/git_contributors: default to repo.default_branch instead of HEAD to avoid errors when HEAD points to refs/heads/master but the actual default branch is main
This commit is contained in:
parent
be423aabb6
commit
2bd1339d6c
@ -199,6 +199,16 @@ impl GitDomain {
|
||||
return Ok(CommitOid::from_git2(oid));
|
||||
}
|
||||
|
||||
// "HEAD" — use repo.head() to get the actual OID
|
||||
if rev == "HEAD" {
|
||||
if let Ok(reference) = self.repo.head() {
|
||||
if let Some(target) = reference.target() {
|
||||
return Ok(CommitOid::from_git2(target));
|
||||
}
|
||||
}
|
||||
return Err(GitError::InvalidOid("cannot resolve: HEAD (detached or empty)".into()));
|
||||
}
|
||||
|
||||
if let Ok(reference) = self.repo.find_reference(rev) {
|
||||
if let Some(target) = reference.target() {
|
||||
return Ok(CommitOid::from_git2(target));
|
||||
|
||||
@ -133,7 +133,7 @@ impl AppService {
|
||||
let repo = self
|
||||
.utils_find_repo(namespace.clone(), repo_name.clone(), ctx)
|
||||
.await?;
|
||||
let rev = query.r#ref.unwrap_or_else(|| "HEAD".to_string());
|
||||
let rev = query.r#ref.unwrap_or_else(|| repo.default_branch.clone());
|
||||
|
||||
let tree_oid: git::CommitOid = {
|
||||
let rev_clone = rev.clone();
|
||||
|
||||
@ -853,9 +853,12 @@ impl AppService {
|
||||
let repo = self.utils_find_repo(namespace, repo_name, ctx).await?;
|
||||
let from_clone = from.clone();
|
||||
let to_clone = to.clone();
|
||||
let default_branch = repo.default_branch.clone();
|
||||
|
||||
let count = git_spawn!(repo, domain -> {
|
||||
domain.commit_count(from_clone.as_deref(), to_clone.as_deref())
|
||||
let from_ref = from_clone.as_deref();
|
||||
let to_ref = to_clone.as_deref().or(Some(default_branch.as_str()));
|
||||
domain.commit_count(from_ref, to_ref)
|
||||
})?;
|
||||
|
||||
let response = CommitCountResponse { count };
|
||||
|
||||
@ -65,7 +65,7 @@ impl AppService {
|
||||
}
|
||||
|
||||
let repo_clone = repo.clone();
|
||||
let ref_name_clone = query.ref_name.clone();
|
||||
let ref_name_clone = query.ref_name.clone().or_else(|| Some(repo.default_branch.clone()));
|
||||
|
||||
let commits = tokio::task::spawn_blocking(move || {
|
||||
let domain = git::GitDomain::from_model(repo_clone)?;
|
||||
|
||||
@ -70,11 +70,14 @@ pub struct ConfigBoolResponse {
|
||||
}
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
pub struct MergeAnalysisQuery {
|
||||
#[serde(default)]
|
||||
pub their_oid: String,
|
||||
}
|
||||
#[derive(Debug, Clone, Deserialize, utoipa::ToSchema)]
|
||||
pub struct MergeRefAnalysisQuery {
|
||||
#[serde(default)]
|
||||
pub ref_name: String,
|
||||
#[serde(default)]
|
||||
pub their_oid: String,
|
||||
}
|
||||
#[derive(Debug, Clone, Deserialize, utoipa::ToSchema)]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user