@@ -1326,9 +1326,6 @@ if {[lindex $_reponame end] eq {.git}} {
1326
1326
set _reponame [ lindex $_reponame end]
1327
1327
}
1328
1328
1329
- set env(GIT_DIR) $_gitdir
1330
- set env(GIT_WORK_TREE) $_gitworktree
1331
-
1332
1329
######################################################################
1333
1330
##
1334
1331
## global init
@@ -2153,7 +2150,7 @@ set starting_gitk_msg [mc "Starting gitk... please wait..."]
2153
2150
2154
2151
proc do_gitk {revs {is_submodule false}} {
2155
2152
global current_diff_path file_states current_diff_side ui_index
2156
- global _gitdir _gitworktree
2153
+ global _gitworktree
2157
2154
2158
2155
# -- Always start gitk through whatever we were loaded with. This
2159
2156
# lets us bypass using shell process on Windows systems.
@@ -2165,12 +2162,19 @@ proc do_gitk {revs {is_submodule false}} {
2165
2162
} else {
2166
2163
global env
2167
2164
2165
+ if {[ info exists env(GIT_DIR)] } {
2166
+ set old_GIT_DIR $env(GIT_DIR)
2167
+ } else {
2168
+ set old_GIT_DIR {}
2169
+ }
2170
+
2168
2171
set pwd [ pwd ]
2169
2172
2170
2173
if {!$is_submodule } {
2171
2174
if {![ is_bare] } {
2172
2175
cd $_gitworktree
2173
2176
}
2177
+ set env(GIT_DIR) [ file normalize [gitdir] ]
2174
2178
} else {
2175
2179
cd $current_diff_path
2176
2180
if {$revs eq {--}} {
@@ -2191,18 +2195,15 @@ proc do_gitk {revs {is_submodule false}} {
2191
2195
}
2192
2196
set revs $old_sha1 ...$new_sha1
2193
2197
}
2194
- # GIT_DIR and GIT_WORK_TREE for the submodule are not the ones
2195
- # we've been using for the main repository, so unset them.
2196
- # TODO we could make life easier (start up faster?) for gitk
2197
- # by setting these to the appropriate values to allow gitk
2198
- # to skip the heuristics to find their proper value
2199
- unset env(GIT_DIR)
2200
- unset env(GIT_WORK_TREE)
2198
+ if {[ info exists env(GIT_DIR)] } {
2199
+ unset env(GIT_DIR)
2200
+ }
2201
2201
}
2202
2202
eval exec $cmd $revs " --" " --" &
2203
2203
2204
- set env(GIT_DIR) $_gitdir
2205
- set env(GIT_WORK_TREE) $_gitworktree
2204
+ if {$old_GIT_DIR ne {}} {
2205
+ set env(GIT_DIR) $old_GIT_DIR
2206
+ }
2206
2207
cd $pwd
2207
2208
2208
2209
ui_status $::starting_gitk_msg
@@ -2223,20 +2224,22 @@ proc do_git_gui {} {
2223
2224
error_popup [ mc " Couldn't find git gui in PATH" ]
2224
2225
} else {
2225
2226
global env
2226
- global _gitdir _gitworktree
2227
2227
2228
- # see note in do_gitk about unsetting these vars when
2229
- # running tools in a submodule
2230
- unset env(GIT_DIR)
2231
- unset env(GIT_WORK_TREE)
2228
+ if {[ info exists env(GIT_DIR)] } {
2229
+ set old_GIT_DIR $env(GIT_DIR)
2230
+ unset env(GIT_DIR)
2231
+ } else {
2232
+ set old_GIT_DIR {}
2233
+ }
2232
2234
2233
2235
set pwd [ pwd ]
2234
2236
cd $current_diff_path
2235
2237
2236
2238
eval exec $exe gui &
2237
2239
2238
- set env(GIT_DIR) $_gitdir
2239
- set env(GIT_WORK_TREE) $_gitworktree
2240
+ if {$old_GIT_DIR ne {}} {
2241
+ set env(GIT_DIR) $old_GIT_DIR
2242
+ }
2240
2243
cd $pwd
2241
2244
2242
2245
ui_status $::starting_gitk_msg
0 commit comments