2007-05-08 03:35:48 +00:00
|
|
|
# git-gui desktop icon creators
|
|
|
|
# Copyright (C) 2006, 2007 Shawn Pearce
|
|
|
|
|
|
|
|
proc do_windows_shortcut {} {
|
2010-01-23 10:03:38 +00:00
|
|
|
global _gitworktree
|
2007-05-08 03:35:48 +00:00
|
|
|
set fn [tk_getSaveFile \
|
|
|
|
-parent . \
|
2016-05-08 10:52:57 +00:00
|
|
|
-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
|
2007-10-12 20:11:35 +00:00
|
|
|
-initialfile "Git [reponame].lnk"]
|
2007-05-08 03:35:48 +00:00
|
|
|
if {$fn != {}} {
|
2007-10-12 20:11:35 +00:00
|
|
|
if {[file extension $fn] ne {.lnk}} {
|
|
|
|
set fn ${fn}.lnk
|
2007-07-05 22:39:40 +00:00
|
|
|
}
|
2016-10-02 21:19:47 +00:00
|
|
|
# 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]]
|
|
|
|
}
|
2007-05-08 03:35:48 +00:00
|
|
|
if {[catch {
|
2016-10-02 21:19:47 +00:00
|
|
|
win32_create_lnk $fn $cmdLine \
|
2010-02-27 20:45:51 +00:00
|
|
|
[file normalize $_gitworktree]
|
2007-05-08 03:35:48 +00:00
|
|
|
} err]} {
|
2007-10-12 20:11:35 +00:00
|
|
|
error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"]
|
2007-05-08 03:35:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc do_cygwin_shortcut {} {
|
git-gui - use mkshortcut on Cygwin
git-gui enables the "Repository->Create Desktop Icon" item on Cygwin,
offering to create a shortcut that starts git-gui on the current
repository. The code in do_cygwin_shortcut invokes function
win32_create_lnk to create the shortcut. This latter function is shared
between Cygwin and Git For Windows and expects Windows rather than unix
pathnames, though do_cygwin_shortcut provides unix pathnames. Also, this
function tries to invoke the Windows Script Host to run a javascript
snippet, but this fails under Cygwin's Tcl. So, win32_create_lnk just
does not support Cygwin.
However, Cygwin's default installation provides /bin/mkshortcut for
creating desktop shortcuts. This is compatible with exec under Cygwin's
Tcl, understands Cygwin's unix pathnames, and avoids the need for shell
escapes to encode troublesome paths. So, teach git-gui to use mkshortcut
on Cygwin, leaving win32_create_lnk unchanged and for exclusive use by
Git For Windows.
Notes: "CHERE_INVOKING=1" is recognized by Cygwin's /etc/profile and
prevents a "chdir $HOME", leaving the shell in the working directory
specified by the shortcut. That directory is written directly by
mkshortcut eliminating any problems with shell escapes and quoting.
The code being replaced includes the full pathname of the git-gui
creating the shortcut, but that git-gui might not be compatible with the
git found after /etc/profile sets the path, and might have a pathname
that defies encoding using shell escapes that can survive the multiple
incompatible interpreters involved in the chain of creating and using
this shortcut. The new code uses bare "git gui" as the command to
execute, thus using the system git to launch the system git-gui, and
avoiding both issues.
Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Pratyush Yadav <me@yadavpratyush.com>
2023-06-26 16:53:05 +00:00
|
|
|
global argv0 _gitworktree oguilib
|
2007-05-08 03:35:48 +00:00
|
|
|
|
|
|
|
if {[catch {
|
|
|
|
set desktop [exec cygpath \
|
|
|
|
--desktop]
|
|
|
|
}]} {
|
|
|
|
set desktop .
|
|
|
|
}
|
|
|
|
set fn [tk_getSaveFile \
|
|
|
|
-parent . \
|
2016-05-08 10:52:57 +00:00
|
|
|
-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
|
2007-05-08 03:35:48 +00:00
|
|
|
-initialdir $desktop \
|
2007-10-12 20:11:35 +00:00
|
|
|
-initialfile "Git [reponame].lnk"]
|
2007-05-08 03:35:48 +00:00
|
|
|
if {$fn != {}} {
|
2007-10-12 20:11:35 +00:00
|
|
|
if {[file extension $fn] ne {.lnk}} {
|
|
|
|
set fn ${fn}.lnk
|
2007-07-05 22:39:40 +00:00
|
|
|
}
|
2007-05-08 03:35:48 +00:00
|
|
|
if {[catch {
|
git-gui - use mkshortcut on Cygwin
git-gui enables the "Repository->Create Desktop Icon" item on Cygwin,
offering to create a shortcut that starts git-gui on the current
repository. The code in do_cygwin_shortcut invokes function
win32_create_lnk to create the shortcut. This latter function is shared
between Cygwin and Git For Windows and expects Windows rather than unix
pathnames, though do_cygwin_shortcut provides unix pathnames. Also, this
function tries to invoke the Windows Script Host to run a javascript
snippet, but this fails under Cygwin's Tcl. So, win32_create_lnk just
does not support Cygwin.
However, Cygwin's default installation provides /bin/mkshortcut for
creating desktop shortcuts. This is compatible with exec under Cygwin's
Tcl, understands Cygwin's unix pathnames, and avoids the need for shell
escapes to encode troublesome paths. So, teach git-gui to use mkshortcut
on Cygwin, leaving win32_create_lnk unchanged and for exclusive use by
Git For Windows.
Notes: "CHERE_INVOKING=1" is recognized by Cygwin's /etc/profile and
prevents a "chdir $HOME", leaving the shell in the working directory
specified by the shortcut. That directory is written directly by
mkshortcut eliminating any problems with shell escapes and quoting.
The code being replaced includes the full pathname of the git-gui
creating the shortcut, but that git-gui might not be compatible with the
git found after /etc/profile sets the path, and might have a pathname
that defies encoding using shell escapes that can survive the multiple
incompatible interpreters involved in the chain of creating and using
this shortcut. The new code uses bare "git gui" as the command to
execute, thus using the system git to launch the system git-gui, and
avoiding both issues.
Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Pratyush Yadav <me@yadavpratyush.com>
2023-06-26 16:53:05 +00:00
|
|
|
set repodir [file normalize $_gitworktree]
|
|
|
|
set shargs {-c \
|
|
|
|
"CHERE_INVOKING=1 \
|
|
|
|
source /etc/profile; \
|
|
|
|
git gui"}
|
|
|
|
exec /bin/mkshortcut.exe \
|
|
|
|
--arguments $shargs \
|
|
|
|
--desc "git-gui on $repodir" \
|
|
|
|
--icon $oguilib/git-gui.ico \
|
|
|
|
--name $fn \
|
|
|
|
--show min \
|
|
|
|
--workingdir $repodir \
|
|
|
|
/bin/sh.exe
|
2007-05-08 03:35:48 +00:00
|
|
|
} err]} {
|
2007-10-12 20:11:35 +00:00
|
|
|
error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"]
|
2007-05-08 03:35:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc do_macosx_app {} {
|
|
|
|
global argv0 env
|
|
|
|
|
|
|
|
set fn [tk_getSaveFile \
|
|
|
|
-parent . \
|
2016-05-08 10:52:57 +00:00
|
|
|
-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
|
2007-05-08 03:35:48 +00:00
|
|
|
-initialdir [file join $env(HOME) Desktop] \
|
|
|
|
-initialfile "Git [reponame].app"]
|
|
|
|
if {$fn != {}} {
|
2007-07-09 07:28:41 +00:00
|
|
|
if {[file extension $fn] ne {.app}} {
|
|
|
|
set fn ${fn}.app
|
|
|
|
}
|
2007-05-08 03:35:48 +00:00
|
|
|
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"
|
2007-07-09 07:28:41 +00:00
|
|
|
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 &&"
|
|
|
|
}
|
2007-05-08 03:35:48 +00:00
|
|
|
}
|
|
|
|
}
|
2007-07-09 07:28:41 +00:00
|
|
|
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]]"
|
2007-05-08 03:35:48 +00:00
|
|
|
close $fd
|
|
|
|
|
|
|
|
file attributes $exe -permissions u+x,g+x,o+x
|
|
|
|
} err]} {
|
2007-09-14 05:50:09 +00:00
|
|
|
error_popup [strcat [mc "Cannot write icon:"] "\n\n$err"]
|
2007-05-08 03:35:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|