fix(git): peel les tags annotés vers leur commit cible dans log_graph — #218
This commit is contained in:
@ -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())
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user