
We now embed any GIT_* and SSH_* environment variables as well as the path to the git wrapper executable into the Mac OS X .app file. This should allow us to restore the environment properly when we restart. We also try to use proper Bourne shell single quoting when we can, as this avoids any sort of problems that might occur due to a path containing shell metacharacters. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
153 lines
3.7 KiB
Tcl
153 lines
3.7 KiB
Tcl
# git-gui desktop icon creators
|
|
# Copyright (C) 2006, 2007 Shawn Pearce
|
|
|
|
proc do_windows_shortcut {} {
|
|
global argv0
|
|
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-initialfile "Git [reponame].bat"]
|
|
if {$fn != {}} {
|
|
if {[file extension $fn] ne {.bat}} {
|
|
set fn ${fn}.bat
|
|
}
|
|
if {[catch {
|
|
set ge [file normalize [file dirname $::_git]]
|
|
set fd [open $fn w]
|
|
puts $fd "@ECHO Entering [reponame]"
|
|
puts $fd "@ECHO Starting git-gui... please wait..."
|
|
puts $fd "@SET PATH=$ge;%PATH%"
|
|
puts $fd "@SET GIT_DIR=[file normalize [gitdir]]"
|
|
puts -nonewline $fd "@\"[info nameofexecutable]\""
|
|
puts $fd " \"[file normalize $argv0]\""
|
|
close $fd
|
|
} err]} {
|
|
error_popup "Cannot write script:\n\n$err"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc do_cygwin_shortcut {} {
|
|
global argv0
|
|
|
|
if {[catch {
|
|
set desktop [exec cygpath \
|
|
--windows \
|
|
--absolute \
|
|
--long-name \
|
|
--desktop]
|
|
}]} {
|
|
set desktop .
|
|
}
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-initialdir $desktop \
|
|
-initialfile "Git [reponame].bat"]
|
|
if {$fn != {}} {
|
|
if {[file extension $fn] ne {.bat}} {
|
|
set fn ${fn}.bat
|
|
}
|
|
if {[catch {
|
|
set fd [open $fn w]
|
|
set sh [exec cygpath \
|
|
--windows \
|
|
--absolute \
|
|
/bin/sh]
|
|
set me [exec cygpath \
|
|
--unix \
|
|
--absolute \
|
|
$argv0]
|
|
set gd [exec cygpath \
|
|
--unix \
|
|
--absolute \
|
|
[gitdir]]
|
|
puts $fd "@ECHO Entering [reponame]"
|
|
puts $fd "@ECHO Starting git-gui... please wait..."
|
|
puts -nonewline $fd "@\"$sh\" --login -c \""
|
|
puts -nonewline $fd "GIT_DIR=[sq [$gd]]"
|
|
puts -nonewline $fd " [sq $me]"
|
|
puts $fd "&\""
|
|
close $fd
|
|
} err]} {
|
|
error_popup "Cannot write script:\n\n$err"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc do_macosx_app {} {
|
|
global argv0 env
|
|
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-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 "Cannot write icon:\n\n$err"
|
|
}
|
|
}
|
|
}
|