summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Levedahl <mlevedahl@gmail.com>2025-04-01 11:45:06 -0400
committerTaylor Blau <me@ttaylorr.com>2025-05-23 17:04:23 -0400
commit10637fc327fe9d3afd19a11ed64bd9e1c7a9c6b5 (patch)
tree606ae57864b2d6b66b0f5c40ad83c2296545cf9e
parentc5c32781c99bfa9d8b7c51b4a1ad66a9fa1e6bfe (diff)
downloadgit-10637fc327fe9d3afd19a11ed64bd9e1c7a9c6b5.tar.xz
git-gui: make _shellpath usable on startup
Since commit d5257fb3c1de (git-gui: handle textconv filter on Windows and in development, 2010-08-07), git-gui will search for a usable shell if _shellpath is not configured, and on Windows may resort to using auto_execok to find 'sh'. While this was intended for development use, checks are insufficient to assure a proper configuration when deployed where _shellpath is always set, but might not give a usable shell. Let's make this more robust by only searching if _shellpath was not defined, and then using only our restricted search functions. Furthermore, we should convert to a Windows path on Windows. Always check for a valid shell on startup, meaning an absolute path to an executable, aborting if these conditions are not met. Signed-off-by: Mark Levedahl <mlevedahl@gmail.com> Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Taylor Blau <me@ttaylorr.com>
-rwxr-xr-xgit-gui.sh38
1 files changed, 30 insertions, 8 deletions
diff --git a/git-gui.sh b/git-gui.sh
index 3135116169..d56610c892 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -307,15 +307,37 @@ if {$_trace >= 0} {
# branches).
set _last_merged_branch {}
-proc shellpath {} {
- global _shellpath env
- if {[string match @@* $_shellpath]} {
- if {[info exists env(SHELL)]} {
- return $env(SHELL)
- } else {
- return /bin/sh
- }
+# for testing, allow unconfigured _shellpath
+if {[string match @@* $_shellpath]} {
+ if {[info exists env(SHELL)]} {
+ set _shellpath $env(SHELL)
+ } else {
+ set _shellpath /bin/sh
}
+}
+
+if {[is_Windows]} {
+ set _shellpath [exec cygpath -m $_shellpath]
+}
+
+if {![file executable $_shellpath] || \
+ !([file pathtype $_shellpath] eq {absolute})} {
+ set errmsg "The defined shell ('$_shellpath') is not usable, \
+ it must be an absolute path to an executable."
+ puts stderr $errmsg
+
+ catch {wm withdraw .}
+ tk_messageBox \
+ -icon error \
+ -type ok \
+ -title "git-gui: configuration error" \
+ -message $errmsg
+ exit 1
+}
+
+
+proc shellpath {} {
+ global _shellpath
return $_shellpath
}