git-gui: Correctly handle GIT_DIR environment variable.

Some users may want to start us by running "git --git-dir=... gui"
rather than trying to cd into the directory first.  This is especially
true if they want to just make a shortcut to our executable on Windows
and always have that associated with a certain repository.

Since Tcl on Windows throws away our environment and doesn't pass it
down to the child process correctly we cannot call git-rev-parse to
get the GIT_DIR environment variable.  So instead we ask for it
specifically ourselves; if its not defined then we ask rev-parse.
This should actually reduce startup by 1 fork/exec if we were started
as "git gui" as GIT_DIR will be set for us.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
maint
Shawn O. Pearce 2006-11-15 22:13:45 -05:00
parent b3678bacbc
commit fbee8500a5
1 changed files with 6 additions and 5 deletions

11
git-gui
View File

@ -161,16 +161,17 @@ proc info_popup {msg} {
## ##
## repository setup ## repository setup


if { [catch {set cdup [exec git rev-parse --show-cdup]} err] if { [catch {set gitdir $env(GIT_DIR)}]
|| [catch {set gitdir [exec git rev-parse --git-dir]} err]} { && [catch {set gitdir [exec git rev-parse --git-dir]} err]} {
catch {wm withdraw .} catch {wm withdraw .}
error_popup "Cannot find the git directory:\n\n$err" error_popup "Cannot find the git directory:\n\n$err"
exit 1 exit 1
} }
if {$cdup ne ""} { if {[catch {cd [file dirname $gitdir]} err]} {
cd $cdup catch {wm withdraw .}
error_popup "No working directory [file dirname $gitdir]:\n\n$err"
exit 1
} }
unset cdup


set single_commit 0 set single_commit 0
if {$appname eq {git-citool}} { if {$appname eq {git-citool}} {