53 lines
996 B
Rust
53 lines
996 B
Rust
use std::{process::Command, str};
|
|
|
|
use proc_macro::TokenStream;
|
|
use quote::quote;
|
|
|
|
pub(super) fn semantic(_args: TokenStream) -> TokenStream {
|
|
static ARGS: &[&str] = &["describe", "--tags", "--abbrev=1"];
|
|
|
|
let output = git(ARGS);
|
|
let output = output
|
|
.strip_prefix('v')
|
|
.map(str::to_string)
|
|
.unwrap_or(output);
|
|
|
|
let output = output
|
|
.rsplit_once('-')
|
|
.map(|(s, _)| s)
|
|
.map(str::to_string)
|
|
.unwrap_or(output);
|
|
|
|
let ret = quote! {
|
|
static GIT_SEMANTIC: &'static str = #output;
|
|
};
|
|
|
|
ret.into()
|
|
}
|
|
|
|
pub(super) fn commit(_args: TokenStream) -> TokenStream {
|
|
static ARGS: &[&str] = &["describe", "--always", "--dirty", "--abbrev=10"];
|
|
|
|
let output = git(ARGS);
|
|
let ret = quote! {
|
|
static GIT_COMMIT: &'static str = #output;
|
|
};
|
|
|
|
ret.into()
|
|
}
|
|
|
|
fn git(args: &[&str]) -> String {
|
|
Command::new("git")
|
|
.args(args)
|
|
.output()
|
|
.map(|output| {
|
|
str::from_utf8(&output.stdout)
|
|
.map(str::trim)
|
|
.map(String::from)
|
|
.ok()
|
|
})
|
|
.ok()
|
|
.flatten()
|
|
.unwrap_or_default()
|
|
}
|