From 32794349492d108d49bf463a0f3811863b9450a6 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Mon, 5 Jun 2023 22:43:55 +0800
Subject: [PATCH] Add git version information to the build

---
 embassy/demos/picow/build.rs         | 17 +++++++++++++++++
 embassy/demos/picow/src/picowmenu.rs |  2 +-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/embassy/demos/picow/build.rs b/embassy/demos/picow/build.rs
index 3f915f9..7ba8277 100644
--- a/embassy/demos/picow/build.rs
+++ b/embassy/demos/picow/build.rs
@@ -12,8 +12,14 @@ use std::env;
 use std::fs::File;
 use std::io::Write;
 use std::path::PathBuf;
+use std::process::Command;
 
 fn main() {
+    link();
+    git();
+}
+
+fn link() {
     // Put `memory.x` in our output directory and ensure it's
     // on the linker search path.
     let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap());
@@ -34,3 +40,14 @@ fn main() {
     println!("cargo:rustc-link-arg-bins=-Tlink-rp.x");
     println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
 }
+
+fn git() {
+    let git_rev = Command::new("git")
+        .args(&["describe", "--always", "--tags", "--dirty=+"])
+        .output()
+        .map(|o| String::from_utf8(o.stdout).unwrap().to_string())
+        .unwrap_or("(unknown)".to_string());
+
+    println!("cargo:rustc-env=GIT_REV={git_rev}");
+    println!("cargo:rerun-if-changed=.git/HEAD");
+}
diff --git a/embassy/demos/picow/src/picowmenu.rs b/embassy/demos/picow/src/picowmenu.rs
index 3770c7d..b610422 100644
--- a/embassy/demos/picow/src/picowmenu.rs
+++ b/embassy/demos/picow/src/picowmenu.rs
@@ -602,7 +602,7 @@ fn do_bootsel(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) {
 fn do_about(_item: &Item<MenuCtx>, _args: &[&str], context: &mut MenuCtx) {
     let _ = writeln!(
         context,
-        "Sunset SSH, USB serial\nMatt Johnston <matt@ucc.asn.au>\n"
+        "Sunset SSH, USB serial\nMatt Johnston <matt@ucc.asn.au>\n{}", env!("GIT_REV"),
     );
 }
 
-- 
GitLab