From a7b3bc593856b588118537bc6af7451c7af889bc Mon Sep 17 00:00:00 2001
From: James R <justsomejames2@gmail.com>
Date: Fri, 5 Apr 2024 22:09:31 -0700
Subject: [PATCH] alias-bootstrap.sh: rewrite git build alias for new build
 system

- Built-in help messages
- On-disk cache for last used preset
---
 alias-bootstrap.sh            |  2 +-
 custom-git-commands/git-build | 43 +++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100755 custom-git-commands/git-build

diff --git a/alias-bootstrap.sh b/alias-bootstrap.sh
index 30f2e2d18a..1ca24a5929 100755
--- a/alias-bootstrap.sh
+++ b/alias-bootstrap.sh
@@ -19,7 +19,7 @@ git config 'alias.cmake' '!cmake'
 #
 #     git cmake --build
 #
-git config 'alias.build' '!p="${1##-*}"; [ "$p" ] && shift; git cmake --build --preset "${p:-default}"'
+git config 'alias.build' '!./custom-git-commands/git-build'
 
 # Usage: git crossmake
 #
diff --git a/custom-git-commands/git-build b/custom-git-commands/git-build
new file mode 100755
index 0000000000..901d52c167
--- /dev/null
+++ b/custom-git-commands/git-build
@@ -0,0 +1,43 @@
+#!/bin/sh
+git_dir="$(git rev-parse --git-dir)"
+preset_file="$git_dir/custom-git-build-cached-preset"
+
+from_cache=
+if [ $# -ge 1 ]; then
+	preset="$1"
+else
+	preset="$(cat "$preset_file" 2>/dev/null)"
+	if [ -n "$preset" ]; then
+		from_cache=1
+	fi
+fi
+
+case "$preset" in
+	''|help)
+		git cmake --list-presets
+		>&2 cat <<-EOF
+
+		This is the first you're running 'git build'.
+		Pick a preset from above and try again.
+
+		For example: 'git build ninja-x86_mingw_static_vcpkg-develop'
+
+		After this first run, you can run 'git build' by itself and it will re-use the preset from last time!
+		EOF
+		;;
+
+	*)
+		if [ -n "$from_cache" ]; then
+			echo "Using same build preset as last time: '$preset'"
+		else
+			echo "$preset" > "$preset_file"
+		fi
+		git cmake --build --preset "$preset"
+		if [ $? -ne 0 ]; then
+			>&2 cat <<-EOF
+
+			CMake ran into some sort of error.
+			Have you already ran 'git cmake --preset $preset' at least once?
+			EOF
+		fi
+esac
-- 
GitLab