From 6c798df40a2f810239c962e0a74805ed7091a613 Mon Sep 17 00:00:00 2001 From: Stephan Dilly Date: Mon, 20 Jul 2020 23:40:02 +0200 Subject: [PATCH] fix different way of internal git represenation of tags to work (closes #206) --- CHANGELOG.md | 1 + asyncgit/src/sync/tags.rs | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0b8291e..aacbc2dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - tags not shown in commit details popup ([#193](https://github.com/extrawurst/gitui/issues/193)) - min size for relative popups on small terminals ([#179](https://github.com/extrawurst/gitui/issues/179)) - fix crash on resizing terminal to very small width ([#198](https://github.com/extrawurst/gitui/issues/198)) +- fix broken tags when using a different internal representation ([#206](https://github.com/extrawurst/gitui/issues/206)) ## [0.8.1] - 2020-07-07 diff --git a/asyncgit/src/sync/tags.rs b/asyncgit/src/sync/tags.rs index 63f4f604..4a9591da 100644 --- a/asyncgit/src/sync/tags.rs +++ b/asyncgit/src/sync/tags.rs @@ -23,13 +23,24 @@ pub fn get_tags(repo_path: &str) -> Result { let repo = repo(repo_path)?; + //TODO: use tag_foreach once its released + // see https://github.com/rust-lang/git2-rs/pull/595 for name in repo.tag_names(None)?.iter() { if let Some(name) = name { - let obj = repo.revparse_single(name)?; + let reference = repo.find_reference( + format!("refs/tags/{}", name).as_str(), + )?; + let reference = reference.resolve()?; - if let Some(tag) = obj.as_tag() { + let commit_id = if let Ok(tag) = reference.peel_to_tag() { + Some(tag.target_id()) + } else { + reference.target() + }; + + if let Some(commit_id) = commit_id { let tag_name = String::from(name); - adder(CommitId::new(tag.target_id()), tag_name); + adder(CommitId::new(commit_id), tag_name); } } }