diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2018-09-06 08:19:47 +0200 |
|---|---|---|
| committer | Matthias Krüger <matthias.krueger@famsik.de> | 2018-09-06 14:45:12 +0200 |
| commit | fa11aad92a20aaf64c1ee4f43015fba9b6d24b62 (patch) | |
| tree | c418a18fa6dedce67e8eeace28097ae4f6f9eb12 /rustc_tools_util | |
| parent | 3262f9283fd8753873545e2ebeb40dc49f351e18 (diff) | |
| download | rust-fa11aad92a20aaf64c1ee4f43015fba9b6d24b62.tar.gz rust-fa11aad92a20aaf64c1ee4f43015fba9b6d24b62.zip | |
print git commit hash and commit date in version output
clippy 0.0.212 (964fcbe0 2018-09-06)
Diffstat (limited to 'rustc_tools_util')
| -rw-r--r-- | rustc_tools_util/Cargo.toml | 8 | ||||
| -rw-r--r-- | rustc_tools_util/src/lib.rs | 82 |
2 files changed, 90 insertions, 0 deletions
diff --git a/rustc_tools_util/Cargo.toml b/rustc_tools_util/Cargo.toml new file mode 100644 index 00000000000..01dca0a65b0 --- /dev/null +++ b/rustc_tools_util/Cargo.toml @@ -0,0 +1,8 @@ +cargo-features = ["edition"] + +[package] +name = "rustc_tools_util" +version = "0.1.0" +authors = ["Matthias Krüger <matthias.krueger@famsik.de>"] +edition = "2018" +[dependencies] diff --git a/rustc_tools_util/src/lib.rs b/rustc_tools_util/src/lib.rs new file mode 100644 index 00000000000..20b598346f1 --- /dev/null +++ b/rustc_tools_util/src/lib.rs @@ -0,0 +1,82 @@ +#![feature(tool_lints)] + +use std::env; + +#[macro_export] +macro_rules! get_version_info { + () => {{ + let major = env!("CARGO_PKG_VERSION_MAJOR").parse::<u8>().unwrap(); + let minor = env!("CARGO_PKG_VERSION_MINOR").parse::<u8>().unwrap(); + let patch = env!("CARGO_PKG_VERSION_PATCH").parse::<u16>().unwrap(); + + let host_compiler = $crate::get_channel(); + let commit_hash = option_env!("GIT_HASH").map(|s| s.to_string()); + let commit_date = option_env!("COMMIT_DATE").map(|s| s.to_string()); + + VersionInfo { + major, + minor, + patch, + host_compiler, + commit_hash, + commit_date, + } + }}; +} + +// some code taken and adapted from RLS and cargo +pub struct VersionInfo { + pub major: u8, + pub minor: u8, + pub patch: u16, + pub host_compiler: Option<String>, + pub commit_hash: Option<String>, + pub commit_date: Option<String>, +} + +impl std::fmt::Display for VersionInfo { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self.commit_hash { + Some(_) => { + write!( + f, + "clippy {}.{}.{} ({} {})", + self.major, + self.minor, + self.patch, + self.commit_hash.clone().unwrap_or_default().trim(), + self.commit_date.clone().unwrap_or_default().trim(), + )?; + }, + None => { + write!(f, "clippy {}.{}.{}", self.major, self.minor, self.patch)?; + }, + }; + Ok(()) + } +} + +pub fn get_channel() -> Option<String> { + if let Ok(channel) = env::var("CFG_RELEASE_CHANNEL") { + Some(channel) + } else { + // we could ask ${RUSTC} -Vv and do some parsing and find out + Some(String::from("nightly")) + } +} + +pub fn get_commit_hash() -> Option<String> { + std::process::Command::new("git") + .args(&["rev-parse", "--short", "HEAD"]) + .output() + .ok() + .and_then(|r| String::from_utf8(r.stdout).ok()) +} + +pub fn get_commit_date() -> Option<String> { + std::process::Command::new("git") + .args(&["log", "-1", "--date=short", "--pretty=format:%cd"]) + .output() + .ok() + .and_then(|r| String::from_utf8(r.stdout).ok()) +} |
