# [PATCH 2/2] git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`

2 messages from 2015-10-30 to 2015-10-30. Participants: Johannes Schindelin.
Thread: https://gitlist.dev/t/40679

## Johannes Schindelin, 2015-10-30 19:09

Subject: [PATCH 1/2] git-gui: fix detection of Cygwin
Message-ID: <alpine.DEB.1.00.1510302009510.31610@s15462909.onlinehome-server.info>
URL: https://gitlist.dev/e/alpine.DEB.1.00.1510302009510.31610%40s15462909.onlinehome-server.info
In-Reply-To: <cover.1443619795.git.johannes.schindelin@gmx.de>

```
MSys2 might *look* like Cygwin, but it is *not* Cygwin... Unless it
is run with `MSYSTEM=MSYS`, that is.

This change is backwards-compatible because MSys also used the
MSYSTEM variable to determine whether to run in MSys or in MinGW
mode. The only difference is that MSys does not support running
in 64-bit mode at all.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 git-gui.sh | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/git-gui.sh b/git-gui.sh
index 11048c7..9038a4c 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -270,12 +270,10 @@ proc is_Windows {} {
 proc is_Cygwin {} {
 	global _iscygwin
 	if {$_iscygwin eq {}} {
-		if {$::tcl_platform(platform) eq {windows}} {
-			if {[catch {set p [exec cygpath --windir]} err]} {
-				set _iscygwin 0
-			} else {
-				set _iscygwin 1
-			}
+		if {$::tcl_platform(platform) eq {windows} &&
+				(![info exists ::env(MSYSTEM)] ||
+				 $::env(MSYSTEM) ne {MSYS})} {
+			set _iscygwin 1
 		} else {
 			set _iscygwin 0
 		}
-- 
2.5.3.windows.1.3.gc322723

```

## Johannes Schindelin, 2015-10-30 19:10

Subject: [PATCH 2/2] git-gui (Windows): use git-gui.exe in `Create Desktop Shortcut`
Message-ID: <alpine.DEB.1.00.1510302010010.31610@s15462909.onlinehome-server.info>
URL: https://gitlist.dev/e/alpine.DEB.1.00.1510302010010.31610%40s15462909.onlinehome-server.info
In-Reply-To: <cover.1443619795.git.johannes.schindelin@gmx.de>

```
When calling `Repository>Create Desktop Shortcut`, Git GUI assumes
that it is okay to call `wish.exe` directly on Windows. However, in
Git for Windows 2.x' context, that leaves several crucial environment
variables uninitialized, resulting in a shortcut that does not work.

To fix those environment variable woes, Git for Windows comes with a
convenient `git-gui.exe`, so let's just use it when it is available.

This fixes https://github.com/git-for-windows/git/issues/448

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 lib/shortcut.tcl | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/shortcut.tcl b/lib/shortcut.tcl
index 78878ef..715916b 100644
--- a/lib/shortcut.tcl
+++ b/lib/shortcut.tcl
@@ -11,11 +11,17 @@ proc do_windows_shortcut {} {
 		if {[file extension $fn] ne {.lnk}} {
 			set fn ${fn}.lnk
 		}
+		# Use /cmd/git-gui.exe if available
+		set normalized [file normalize $::argv0]
+		regsub "/mingw../libexec/git-core/git-gui$" \
+			$normalized "/cmd/git-gui.exe" cmdLine
+		if {$cmdLine != $normalized && [file exists $cmdLine]} {
+			set cmdLine [list [file nativename $cmdLine]]
+		} else {
+			set cmdLine [list [info nameofexecutable] $normalized]
+		}
 		if {[catch {
-				win32_create_lnk $fn [list \
-					[info nameofexecutable] \
-					[file normalize $::argv0] \
-					] \
+				win32_create_lnk $fn $cmdLine \
 					[file normalize $_gitworktree]
 			} err]} {
 			error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"]
-- 
2.5.3.windows.1.3.gc322723

```
