fix(git): peel les tags annotés vers leur commit cible dans log_graph — #218

This commit is contained in:
2026-08-15 20:01:23 +02:00
parent 3d466f9cee
commit bfa4d322e8
2 changed files with 58 additions and 2 deletions

View File

@ -207,8 +207,9 @@ impl GitPort for Git2Repository {
let mut ref_map: HashMap<git2::Oid, Vec<String>> = HashMap::new();
if let Ok(references) = repo.references() {
for reference in references.flatten() {
// Only handle symbolic and direct refs; skip errors.
let target_oid = reference.resolve().ok().and_then(|r| r.target());
// Only handle refs that resolve to commits; annotated tags point at
// tag objects, so `target()` alone would never match revwalk commits.
let target_oid = reference_commit_oid(&reference);
if let Some(oid) = target_oid {
let label = match reference.shorthand() {
Some(name) => {
@ -269,3 +270,16 @@ impl GitPort for Git2Repository {
))
}
}
fn reference_commit_oid(reference: &git2::Reference<'_>) -> Option<git2::Oid> {
reference
.peel(git2::ObjectType::Commit)
.ok()
.map(|object| object.id())
.or_else(|| {
reference
.resolve()
.ok()
.and_then(|resolved| resolved.target())
})
}