зеркало из https://github.com/microsoft/git.git
git-gui: set GIT_DIR and GIT_WORK_TREE after setup
Rather than juggling with the env var GIT_DIR around the invocation of gitk, set it and GIT_WORK_TREE after finishing setup, ensuring that any external tool works with the setup we're running with. This also allows us to remove a couple of conditionals when running gitk or git gui in a submodule, as we know that the variables are present and have to be unset and reset before and after the invocation. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Родитель
3748b03d92
Коммит
a9fa11fe5b
43
git-gui.sh
43
git-gui.sh
|
@ -1171,6 +1171,9 @@ if {[lindex $_reponame end] eq {.git}} {
|
||||||
set _reponame [lindex $_reponame end]
|
set _reponame [lindex $_reponame end]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set env(GIT_DIR) $_gitdir
|
||||||
|
set env(GIT_WORK_TREE) $_gitworktree
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
##
|
##
|
||||||
## global init
|
## global init
|
||||||
|
@ -1979,7 +1982,7 @@ set starting_gitk_msg [mc "Starting gitk... please wait..."]
|
||||||
|
|
||||||
proc do_gitk {revs {is_submodule false}} {
|
proc do_gitk {revs {is_submodule false}} {
|
||||||
global current_diff_path file_states current_diff_side ui_index
|
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
|
# -- Always start gitk through whatever we were loaded with. This
|
||||||
# lets us bypass using shell process on Windows systems.
|
# lets us bypass using shell process on Windows systems.
|
||||||
|
@ -1991,19 +1994,12 @@ proc do_gitk {revs {is_submodule false}} {
|
||||||
} else {
|
} else {
|
||||||
global env
|
global env
|
||||||
|
|
||||||
if {[info exists env(GIT_DIR)]} {
|
|
||||||
set old_GIT_DIR $env(GIT_DIR)
|
|
||||||
} else {
|
|
||||||
set old_GIT_DIR {}
|
|
||||||
}
|
|
||||||
|
|
||||||
set pwd [pwd]
|
set pwd [pwd]
|
||||||
|
|
||||||
if {!$is_submodule} {
|
if {!$is_submodule} {
|
||||||
if {![is_bare]} {
|
if {![is_bare]} {
|
||||||
cd $_gitworktree
|
cd $_gitworktree
|
||||||
}
|
}
|
||||||
set env(GIT_DIR) [file normalize [gitdir]]
|
|
||||||
} else {
|
} else {
|
||||||
cd $current_diff_path
|
cd $current_diff_path
|
||||||
if {$revs eq {--}} {
|
if {$revs eq {--}} {
|
||||||
|
@ -2024,15 +2020,18 @@ proc do_gitk {revs {is_submodule false}} {
|
||||||
}
|
}
|
||||||
set revs $old_sha1...$new_sha1
|
set revs $old_sha1...$new_sha1
|
||||||
}
|
}
|
||||||
if {[info exists env(GIT_DIR)]} {
|
# GIT_DIR and GIT_WORK_TREE for the submodule are not the ones
|
||||||
unset env(GIT_DIR)
|
# 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 "--" "--" &
|
eval exec $cmd $revs "--" "--" &
|
||||||
|
|
||||||
if {$old_GIT_DIR ne {}} {
|
set env(GIT_DIR) $_gitdir
|
||||||
set env(GIT_DIR) $old_GIT_DIR
|
set env(GIT_WORK_TREE) $_gitworktree
|
||||||
}
|
|
||||||
cd $pwd
|
cd $pwd
|
||||||
|
|
||||||
ui_status $::starting_gitk_msg
|
ui_status $::starting_gitk_msg
|
||||||
|
@ -2053,22 +2052,20 @@ proc do_git_gui {} {
|
||||||
error_popup [mc "Couldn't find git gui in PATH"]
|
error_popup [mc "Couldn't find git gui in PATH"]
|
||||||
} else {
|
} else {
|
||||||
global env
|
global env
|
||||||
|
global _gitdir _gitworktree
|
||||||
|
|
||||||
if {[info exists env(GIT_DIR)]} {
|
# see note in do_gitk about unsetting these vars when
|
||||||
set old_GIT_DIR $env(GIT_DIR)
|
# running tools in a submodule
|
||||||
unset env(GIT_DIR)
|
unset env(GIT_DIR)
|
||||||
} else {
|
unset env(GIT_WORK_TREE)
|
||||||
set old_GIT_DIR {}
|
|
||||||
}
|
|
||||||
|
|
||||||
set pwd [pwd]
|
set pwd [pwd]
|
||||||
cd $current_diff_path
|
cd $current_diff_path
|
||||||
|
|
||||||
eval exec $exe gui &
|
eval exec $exe gui &
|
||||||
|
|
||||||
if {$old_GIT_DIR ne {}} {
|
set env(GIT_DIR) $_gitdir
|
||||||
set env(GIT_DIR) $old_GIT_DIR
|
set env(GIT_WORK_TREE) $_gitworktree
|
||||||
}
|
|
||||||
cd $pwd
|
cd $pwd
|
||||||
|
|
||||||
ui_status $::starting_gitk_msg
|
ui_status $::starting_gitk_msg
|
||||||
|
|
Загрузка…
Ссылка в новой задаче