Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git-gui: fix GIT_DIR handling for submodules. #2452

Merged
merged 2 commits into from
Jan 3, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 20 additions & 25 deletions git-gui/git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1335,6 +1335,9 @@ if {[lindex $_reponame end] eq {.git}} {
set _reponame [lindex $_reponame end]
}

set env(GIT_DIR) $_gitdir
set env(GIT_WORK_TREE) $_gitworktree

######################################################################
##
## global init
Expand Down Expand Up @@ -2161,7 +2164,7 @@ set starting_gitk_msg [mc "Starting gitk... please wait..."]

proc do_gitk {revs {is_submodule false}} {
global current_diff_path file_states current_diff_side ui_index
global _gitworktree
global _gitdir _gitworktree

# -- Always start gitk through whatever we were loaded with. This
# lets us bypass using shell process on Windows systems.
Expand All @@ -2173,19 +2176,12 @@ proc do_gitk {revs {is_submodule false}} {
} else {
global env

if {[info exists env(GIT_DIR)]} {
set old_GIT_DIR $env(GIT_DIR)
} else {
set old_GIT_DIR {}
}

set pwd [pwd]

if {!$is_submodule} {
if {![is_bare]} {
cd $_gitworktree
}
set env(GIT_DIR) [file normalize [gitdir]]
} else {
cd $current_diff_path
if {$revs eq {--}} {
Expand All @@ -2206,17 +2202,18 @@ proc do_gitk {revs {is_submodule false}} {
}
set revs $old_sha1...$new_sha1
}
if {[info exists env(GIT_DIR)]} {
unset env(GIT_DIR)
}
# GIT_DIR and GIT_WORK_TREE for the submodule are not the ones
# we've been using for the main repository, so unset them.
# TODO we could make life easier (start up faster?) for gitk
# by setting these to the appropriate values to allow gitk
# to skip the heuristics to find their proper value
unset env(GIT_DIR)
unset env(GIT_WORK_TREE)
}
eval exec $cmd $revs "--" "--" &

if {$old_GIT_DIR ne {}} {
set env(GIT_DIR) $old_GIT_DIR
} else {
unset env(GIT_DIR)
}
set env(GIT_DIR) $_gitdir
set env(GIT_WORK_TREE) $_gitworktree
cd $pwd

ui_status $::starting_gitk_msg
Expand All @@ -2237,22 +2234,20 @@ proc do_git_gui {} {
error_popup [mc "Couldn't find git gui in PATH"]
} else {
global env
global _gitdir _gitworktree

if {[info exists env(GIT_DIR)]} {
set old_GIT_DIR $env(GIT_DIR)
unset env(GIT_DIR)
} else {
set old_GIT_DIR {}
}
# see note in do_gitk about unsetting these vars when
# running tools in a submodule
unset env(GIT_DIR)
unset env(GIT_WORK_TREE)

set pwd [pwd]
cd $current_diff_path

eval exec $exe gui &

if {$old_GIT_DIR ne {}} {
set env(GIT_DIR) $old_GIT_DIR
}
set env(GIT_DIR) $_gitdir
set env(GIT_WORK_TREE) $_gitworktree
cd $pwd

ui_status $::starting_gitk_msg
Expand Down