diff options
author | Shawn O. Pearce <spearce@spearce.org> | 2006-11-18 00:31:00 -0500 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2006-11-18 00:31:00 -0500 |
commit | 06c311157a045c2189acc5496fdc71a806c28f8c (patch) | |
tree | 6f85d7eef7cff5236d7898c04ba8da10f1917b46 /git-gui | |
parent | git-gui: Only populate a fetch or push if we have an action. (diff) | |
download | tgif-06c311157a045c2189acc5496fdc71a806c28f8c.tar.xz |
git-gui: Create a .app file on MacOS X if requested.
If a user works with a repository frequently they may want to just
create an icon they can use to launch git-gui against that repository.
Since we already support this concept on Windows we can do the same on
Mac OS X by creating a .app file with a tiny shell script in it that
sets up the necessary environment then invokes our script.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'git-gui')
-rwxr-xr-x | git-gui | 78 |
1 files changed, 78 insertions, 0 deletions
@@ -2114,6 +2114,79 @@ proc do_windows_shortcut {} { } } +proc do_macosx_app {} { + global gitdir appname argv0 env + + set reponame [lindex [file split \ + [file normalize [file dirname $gitdir]]] \ + end] + + set fn [tk_getSaveFile \ + -parent . \ + -title "$appname ($reponame): Create Desktop Icon" \ + -initialdir [file join $env(HOME) Desktop] \ + -initialfile "Git $reponame.app"] + if {$fn != {}} { + 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 PkgInfo] w] + puts -nonewline $fd {APPL????} + close $fd + + 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] + set gd [file normalize $gitdir] + set ep [file normalize [exec git --exec-path]] + regsub -all ' $gd "'\\''" gd + regsub -all ' $ep "'\\''" ep + puts $fd "#!/bin/sh" + foreach name [array names env] { + if {[string match GIT_* $name]} { + regsub -all ' $env($name) "'\\''" v + puts $fd "export $name='$v'" + } + } + puts $fd "export PATH='$ep':\$PATH" + puts $fd "export GIT_DIR='$gd'" + puts $fd "exec [file normalize $argv0]" + close $fd + + file attributes $exe -permissions u+x,g+x,o+x + } err]} { + error_popup "Cannot write icon:\n\n$err" + } + } +} + proc toggle_or_diff {w x y} { global file_lists ui_index ui_other global last_clicked selected_paths @@ -2286,6 +2359,11 @@ if {!$single_commit} { -label {Create Desktop Icon} \ -command do_windows_shortcut \ -font font_ui + } elseif {[is_MacOSX]} { + .mbar.project add command \ + -label {Create Desktop Icon} \ + -command do_macosx_app \ + -font font_ui } } .mbar.project add command -label Quit \ |