aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Levedahl <mlevedahl@gmail.com>2025-04-07 17:12:56 -0400
committerTaylor Blau <me@ttaylorr.com>2025-05-23 17:04:23 -0400
commit676c49583f063c6cb92e5b38eb6576929cebf1ff (patch)
tree2ea01182b9eafaf67d49df1e834ed48adad36ec5
parentgit-gui: avoid auto_execok in do_windows_shortcut (diff)
downloadgit-676c49583f063c6cb92e5b38eb6576929cebf1ff.tar.gz
git-676c49583f063c6cb92e5b38eb6576929cebf1ff.zip
git-gui: cleanup git-bash menu item
git-gui on Git for Windows creates a menu item to start a git-bash session for the current repository. This menu-item works as desired when git-gui is installed in the Git for Windows (g4w) distribution, but not when run from a different location such as normally done in development. The reason is that git-bash's location is known to be '/git-bash' in the Unix pathname space known to MSYS, but this is not known in the Windows pathname space. Instead, git-gui derives a pathname for git-bash assuming it is at a known relative location. If git-gui is run from a different directory than assumed in g4w, the relative location changes, and git-gui resorts to running a generic bash login session in a Windows console. But, the MSYS system underlying Git for Windows includes the 'cygpath' utility to convert between Unix and Windows pathnames. Let's use this so git-bash's Windows pathname is determined directly from /git-bash. Signed-off-by: Mark Levedahl <mlevedahl@gmail.com> Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Taylor Blau <me@ttaylorr.com>
Diffstat (limited to '')
-rwxr-xr-xgit-gui.sh13
1 files changed, 6 insertions, 7 deletions
diff --git a/git-gui.sh b/git-gui.sh
index 3bfe4364c7..570c236f57 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -2759,17 +2759,16 @@ if {![is_bare]} {
if {[is_Windows]} {
# Use /git-bash.exe if available
- set normalized [file normalize $::argv0]
- regsub "/mingw../libexec/git-core/git-gui$" \
- $normalized "/git-bash.exe" cmdLine
- if {$cmdLine != $normalized && [file exists $cmdLine]} {
- set cmdLine [list "Git Bash" $cmdLine &]
+ set _git_bash [exec cygpath -m /git-bash.exe]
+ if {[file executable $_git_bash]} {
+ set _bash_cmdline [list "Git Bash" $_git_bash &]
} else {
- set cmdLine [list "Git Bash" bash --login -l &]
+ set _bash_cmdline [list "Git Bash" bash --login -l &]
}
.mbar.repository add command \
-label [mc "Git Bash"] \
- -command {eval exec [list [_which cmd] /c start] $cmdLine}
+ -command {eval exec [list [_which cmd] /c start] $_bash_cmdline}
+ unset _git_bash
}
if {[is_Windows] || ![is_bare]} {