| # git-gui desktop icon creators | 
 | # Copyright (C) 2006, 2007 Shawn Pearce | 
 |  | 
 | proc do_windows_shortcut {} { | 
 | 	global _gitworktree | 
 | 	set fn [tk_getSaveFile \ | 
 | 		-parent . \ | 
 | 		-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ | 
 | 		-initialfile "Git [reponame].lnk"] | 
 | 	if {$fn != {}} { | 
 | 		if {[file extension $fn] ne {.lnk}} { | 
 | 			set fn ${fn}.lnk | 
 | 		} | 
 | 		# Use git-gui.exe if available (ie: git-for-windows) | 
 | 		set cmdLine [auto_execok git-gui.exe] | 
 | 		if {$cmdLine eq {}} { | 
 | 			set cmdLine [list [info nameofexecutable] \ | 
 | 							 [file normalize $::argv0]] | 
 | 		} | 
 | 		if {[catch { | 
 | 				win32_create_lnk $fn $cmdLine \ | 
 | 					[file normalize $_gitworktree] | 
 | 			} err]} { | 
 | 			error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] | 
 | 		} | 
 | 	} | 
 | } | 
 |  | 
 | proc do_cygwin_shortcut {} { | 
 | 	global argv0 _gitworktree | 
 |  | 
 | 	if {[catch { | 
 | 		set desktop [exec cygpath \ | 
 | 			--windows \ | 
 | 			--absolute \ | 
 | 			--long-name \ | 
 | 			--desktop] | 
 | 		}]} { | 
 | 			set desktop . | 
 | 	} | 
 | 	set fn [tk_getSaveFile \ | 
 | 		-parent . \ | 
 | 		-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ | 
 | 		-initialdir $desktop \ | 
 | 		-initialfile "Git [reponame].lnk"] | 
 | 	if {$fn != {}} { | 
 | 		if {[file extension $fn] ne {.lnk}} { | 
 | 			set fn ${fn}.lnk | 
 | 		} | 
 | 		if {[catch { | 
 | 				set sh [exec cygpath \ | 
 | 					--windows \ | 
 | 					--absolute \ | 
 | 					/bin/sh.exe] | 
 | 				set me [exec cygpath \ | 
 | 					--unix \ | 
 | 					--absolute \ | 
 | 					$argv0] | 
 | 				win32_create_lnk $fn [list \ | 
 | 					$sh -c \ | 
 | 					"CHERE_INVOKING=1 source /etc/profile;[sq $me] &" \ | 
 | 					] \ | 
 | 					[file normalize $_gitworktree] | 
 | 			} err]} { | 
 | 			error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"] | 
 | 		} | 
 | 	} | 
 | } | 
 |  | 
 | proc do_macosx_app {} { | 
 | 	global argv0 env | 
 |  | 
 | 	set fn [tk_getSaveFile \ | 
 | 		-parent . \ | 
 | 		-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \ | 
 | 		-initialdir [file join $env(HOME) Desktop] \ | 
 | 		-initialfile "Git [reponame].app"] | 
 | 	if {$fn != {}} { | 
 | 		if {[file extension $fn] ne {.app}} { | 
 | 			set fn ${fn}.app | 
 | 		} | 
 | 		if {[catch { | 
 | 				set Contents [file join $fn Contents] | 
 | 				set MacOS [file join $Contents MacOS] | 
 | 				set exe [file join $MacOS git-gui] | 
 |  | 
 | 				file mkdir $MacOS | 
 |  | 
 | 				set fd [open [file join $Contents Info.plist] w] | 
 | 				puts $fd {<?xml version="1.0" encoding="UTF-8"?> | 
 | <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | 
 | <plist version="1.0"> | 
 | <dict> | 
 | 	<key>CFBundleDevelopmentRegion</key> | 
 | 	<string>English</string> | 
 | 	<key>CFBundleExecutable</key> | 
 | 	<string>git-gui</string> | 
 | 	<key>CFBundleIdentifier</key> | 
 | 	<string>org.spearce.git-gui</string> | 
 | 	<key>CFBundleInfoDictionaryVersion</key> | 
 | 	<string>6.0</string> | 
 | 	<key>CFBundlePackageType</key> | 
 | 	<string>APPL</string> | 
 | 	<key>CFBundleSignature</key> | 
 | 	<string>????</string> | 
 | 	<key>CFBundleVersion</key> | 
 | 	<string>1.0</string> | 
 | 	<key>NSPrincipalClass</key> | 
 | 	<string>NSApplication</string> | 
 | </dict> | 
 | </plist>} | 
 | 				close $fd | 
 |  | 
 | 				set fd [open $exe w] | 
 | 				puts $fd "#!/bin/sh" | 
 | 				foreach name [lsort [array names env]] { | 
 | 					set value $env($name) | 
 | 					switch -- $name { | 
 | 					GIT_DIR { set value [file normalize [gitdir]] } | 
 | 					} | 
 |  | 
 | 					switch -glob -- $name { | 
 | 					SSH_* - | 
 | 					GIT_* { | 
 | 						puts $fd "if test \"z\$$name\" = z; then" | 
 | 						puts $fd "  export $name=[sq $value]" | 
 | 						puts $fd "fi &&" | 
 | 					} | 
 | 					} | 
 | 				} | 
 | 				puts $fd "export PATH=[sq [file dirname $::_git]]:\$PATH &&" | 
 | 				puts $fd "cd [sq [file normalize [pwd]]] &&" | 
 | 				puts $fd "exec \\" | 
 | 				puts $fd " [sq [info nameofexecutable]] \\" | 
 | 				puts $fd " [sq [file normalize $argv0]]" | 
 | 				close $fd | 
 |  | 
 | 				file attributes $exe -permissions u+x,g+x,o+x | 
 | 			} err]} { | 
 | 			error_popup [strcat [mc "Cannot write icon:"] "\n\n$err"] | 
 | 		} | 
 | 	} | 
 | } |