fix(git): convert default_branch to full ref name (refs/heads/*)
The database stores short branch names (e.g., "main"), but git2's push_ref()
requires full reference names (e.g., "refs/heads/main"). This fixes all
service-layer endpoints to convert default_branch to the full ref format.
Fixed endpoints:
- git_readme: convert to refs/heads/{branch}
- git_commit_count: convert to refs/heads/{branch}
- git_contributors: convert to refs/heads/{branch}
- git_commit_log: convert to refs/heads/{branch}
- git_commit_walk: convert to refs/heads/{branch}
Resolves errors:
- Internal("the given reference name 'main' is not valid")
This commit is contained in:
parent
4c49953572
commit
82ed726848
@ -133,7 +133,13 @@ impl AppService {
|
|||||||
let repo = self
|
let repo = self
|
||||||
.utils_find_repo(namespace.clone(), repo_name.clone(), ctx)
|
.utils_find_repo(namespace.clone(), repo_name.clone(), ctx)
|
||||||
.await?;
|
.await?;
|
||||||
let rev = query.r#ref.unwrap_or_else(|| repo.default_branch.clone());
|
let rev = query.r#ref.unwrap_or_else(|| {
|
||||||
|
if repo.default_branch.is_empty() {
|
||||||
|
"HEAD".to_string()
|
||||||
|
} else {
|
||||||
|
format!("refs/heads/{}", repo.default_branch)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let tree_oid: git::CommitOid = {
|
let tree_oid: git::CommitOid = {
|
||||||
let rev_clone = rev.clone();
|
let rev_clone = rev.clone();
|
||||||
|
|||||||
@ -786,7 +786,13 @@ impl AppService {
|
|||||||
let repo = self
|
let repo = self
|
||||||
.utils_find_repo(namespace.clone(), repo_name.clone(), ctx)
|
.utils_find_repo(namespace.clone(), repo_name.clone(), ctx)
|
||||||
.await?;
|
.await?;
|
||||||
let rev_clone = query.rev.clone().or_else(|| Some(repo.default_branch.clone()));
|
let rev_clone = query.rev.clone().or_else(|| {
|
||||||
|
if repo.default_branch.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(format!("refs/heads/{}", repo.default_branch))
|
||||||
|
}
|
||||||
|
});
|
||||||
let rev_for_count = rev_clone.clone();
|
let rev_for_count = rev_clone.clone();
|
||||||
|
|
||||||
let commits = git_spawn!(repo, domain -> {
|
let commits = git_spawn!(repo, domain -> {
|
||||||
@ -853,11 +859,15 @@ impl AppService {
|
|||||||
let repo = self.utils_find_repo(namespace, repo_name, ctx).await?;
|
let repo = self.utils_find_repo(namespace, repo_name, ctx).await?;
|
||||||
let from_clone = from.clone();
|
let from_clone = from.clone();
|
||||||
let to_clone = to.clone();
|
let to_clone = to.clone();
|
||||||
let default_branch = repo.default_branch.clone();
|
let default_ref = if repo.default_branch.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(format!("refs/heads/{}", repo.default_branch))
|
||||||
|
};
|
||||||
|
|
||||||
let count = git_spawn!(repo, domain -> {
|
let count = git_spawn!(repo, domain -> {
|
||||||
let from_ref = from_clone.as_deref();
|
let from_ref = from_clone.as_deref();
|
||||||
let to_ref = to_clone.as_deref().or(Some(default_branch.as_str()));
|
let to_ref = to_clone.as_deref().or(default_ref.as_deref());
|
||||||
domain.commit_count(from_ref, to_ref)
|
domain.commit_count(from_ref, to_ref)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
@ -1276,7 +1286,13 @@ impl AppService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let repo = self.utils_find_repo(namespace, repo_name, ctx).await?;
|
let repo = self.utils_find_repo(namespace, repo_name, ctx).await?;
|
||||||
let rev_clone = query.rev.clone();
|
let rev_clone = query.rev.clone().or_else(|| {
|
||||||
|
if repo.default_branch.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(format!("refs/heads/{}", repo.default_branch))
|
||||||
|
}
|
||||||
|
});
|
||||||
let limit = query.limit.unwrap_or(0);
|
let limit = query.limit.unwrap_or(0);
|
||||||
let first_parent_only = query.first_parent_only;
|
let first_parent_only = query.first_parent_only;
|
||||||
let topological = query.topological;
|
let topological = query.topological;
|
||||||
|
|||||||
@ -65,7 +65,13 @@ impl AppService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let repo_clone = repo.clone();
|
let repo_clone = repo.clone();
|
||||||
let ref_name_clone = query.ref_name.clone().or_else(|| Some(repo.default_branch.clone()));
|
let ref_name_clone = query.ref_name.clone().or_else(|| {
|
||||||
|
if repo.default_branch.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(format!("refs/heads/{}", repo.default_branch))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let commits = tokio::task::spawn_blocking(move || {
|
let commits = tokio::task::spawn_blocking(move || {
|
||||||
let domain = git::GitDomain::from_model(repo_clone)?;
|
let domain = git::GitDomain::from_model(repo_clone)?;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user