version-helper: git: return the commit date as well

This commit is contained in:
Guillaume Desmottes 2020-04-03 13:15:34 +02:00 committed by Sebastian Dröge
parent bbdf90d67c
commit 0e42c6b9b1

View file

@ -1,25 +1,30 @@
use std::path::Path; use std::path::Path;
use std::process::Command; use std::process::Command;
pub fn repo_hash<P: AsRef<Path>>(path: P) -> Option<String> { pub fn repo_hash<P: AsRef<Path>>(path: P) -> Option<(String, String)> {
let git_path = path.as_ref().to_str(); let git_path = path.as_ref().to_str();
let mut args = match git_path { let mut args = match git_path {
Some(path) => vec!["-C", path], Some(path) => vec!["-C", path],
None => vec![], None => vec![],
}; };
args.extend(&["rev-parse", "--short", "HEAD"]); args.extend(&["log", "-1", "--format=%h_%cd", "--date=short"]);
let output = Command::new("git").args(&args).output().ok()?; let output = Command::new("git").args(&args).output().ok()?;
if !output.status.success() { if !output.status.success() {
return None; return None;
} }
let hash = String::from_utf8(output.stdout).ok()?; let output = String::from_utf8(output.stdout).ok()?;
let hash = hash.trim_end_matches('\n'); let output = output.trim_end_matches('\n');
let mut s = output.split('_');
let hash = s.next()?;
let date = s.next()?;
if dirty(path) { let hash = if dirty(path) {
Some(format!("{}+", hash)) format!("{}+", hash)
} else { } else {
Some(hash.into()) hash.into()
} };
Some((hash, date.into()))
} }
fn dirty<P: AsRef<Path>>(path: P) -> bool { fn dirty<P: AsRef<Path>>(path: P) -> bool {