From 93d80d3be451ff9f9bf092ddfd63387837e20afe Mon Sep 17 00:00:00 2001 From: Martin Nordholts Date: Sat, 23 Oct 2021 16:32:39 +0200 Subject: [PATCH] Include git hash in `bat -V` and `bat --version` output if present I had to use a `lazy_static` due to that the clap API that only accepts a reference to a version string. And, in our code, only a 'static reference to a version string. Code could probably be refactored to accept a "normal" reference, but that would be a major undertaking. --- CHANGELOG.md | 1 + src/bin/bat/clap_app.rs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0ab9534d8..6e2fc2df66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Add PowerShell completion, see #1826 (@rashil2000) - Minimum supported Rust version (MSRV) bumped to 1.46 +- Include git hash in `bat -V` and `bat --version` output if present. See #1921 (@Enselic) ## Syntaxes diff --git a/src/bin/bat/clap_app.rs b/src/bin/bat/clap_app.rs index 5e25b01a61..dc74e574cf 100644 --- a/src/bin/bat/clap_app.rs +++ b/src/bin/bat/clap_app.rs @@ -2,6 +2,21 @@ use clap::{crate_name, crate_version, App as ClapApp, AppSettings, Arg, ArgGroup use std::env; use std::path::Path; +lazy_static::lazy_static! { + static ref VERSION: String = { + #[cfg(feature = "bugreport")] + let git_version = bugreport::git_version!(fallback = ""); + #[cfg(not(feature = "bugreport"))] + let git_version = ""; + + if git_version.is_empty() { + crate_version!().to_string() + } else { + format!("{} ({})", crate_version!(), git_version) + } + }; +} + pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { let clap_color_setting = if interactive_output && env::var_os("NO_COLOR").is_none() { AppSettings::ColoredHelp @@ -10,7 +25,7 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { }; let mut app = ClapApp::new(crate_name!()) - .version(crate_version!()) + .version(VERSION.as_str()) .global_setting(clap_color_setting) .global_setting(AppSettings::DeriveDisplayOrder) .global_setting(AppSettings::UnifiedHelpMessage)