diff --git a/Cargo.lock b/Cargo.lock index ba48384..77b2790 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,7 +35,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "fast-git-prompt" -version = "0.1.0" +version = "0.2.0" dependencies = [ "git2", "regex", diff --git a/Cargo.toml b/Cargo.toml index 86e4948..ea6dcfa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fast-git-prompt" -version = "0.1.1" +version = "0.2.0" description = "A fast git prompt for zsh and bash." license = "MIT" repository = "https://github.com/MasterGordon/fast-git-prompt" diff --git a/src/prompt_parts/branch_name.rs b/src/prompt_parts/branch_name.rs index 94a53ab..1251d09 100644 --- a/src/prompt_parts/branch_name.rs +++ b/src/prompt_parts/branch_name.rs @@ -1,3 +1,4 @@ +use crate::colors::{color, Color}; use crate::prompt_parts::prompt_part::RenderablePromptPart; use git2::Repository; use schemars::JsonSchema; @@ -5,7 +6,7 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, JsonSchema)] pub struct BranchName { - pub color: Option, + pub color: Option, } impl RenderablePromptPart for BranchName { @@ -16,6 +17,25 @@ impl RenderablePromptPart for BranchName { }?; let name = head.name()?; let last = name.split('/').last()?; - return Some(format!("{}{}", self.color.unwrap_or("".to_string()), last)); + let head_commit = head.peel_to_commit().unwrap(); + let mut current_tags: Vec = vec![]; + let tag_names = repo.tag_names(None); + for tag_name in tag_names.iter().flatten() { + let tag_object = repo.revparse_single(&format!("refs/tags/{}", tag_name?)); + + if let Ok(tag_commit) = tag_object.unwrap().peel_to_commit() { + if head_commit.id() == tag_commit.id() { + if let Some(tag) = tag_name { + current_tags.push(tag.to_string()); + } + } + } + } + let last_tag = current_tags.last(); + if let Some(tag) = last_tag { + return Some(format!("{}{} ({})", color(self.color), last, tag)); + } else { + return Some(format!("{}{}", color(self.color), last)); + } } }