@@ -1337,9 +1337,6 @@ if {[lindex $_reponame end] eq {.git}} {
1337
1337
set _reponame [ lindex $_reponame end]
1338
1338
}
1339
1339
1340
- set env(GIT_DIR) $_gitdir
1341
- set env(GIT_WORK_TREE) $_gitworktree
1342
-
1343
1340
######################################################################
1344
1341
##
1345
1342
## global init
@@ -2159,7 +2156,7 @@ set starting_gitk_msg [mc "Starting gitk... please wait..."]
2159
2156
2160
2157
proc do_gitk {revs {is_submodule false}} {
2161
2158
global current_diff_path file_states current_diff_side ui_index
2162
- global _gitdir _gitworktree
2159
+ global _gitworktree
2163
2160
2164
2161
# -- Always start gitk through whatever we were loaded with. This
2165
2162
# lets us bypass using shell process on Windows systems.
@@ -2171,12 +2168,19 @@ proc do_gitk {revs {is_submodule false}} {
2171
2168
} else {
2172
2169
global env
2173
2170
2171
+ if {[ info exists env(GIT_DIR)] } {
2172
+ set old_GIT_DIR $env(GIT_DIR)
2173
+ } else {
2174
+ set old_GIT_DIR {}
2175
+ }
2176
+
2174
2177
set pwd [ pwd ]
2175
2178
2176
2179
if {!$is_submodule } {
2177
2180
if {![ is_bare] } {
2178
2181
cd $_gitworktree
2179
2182
}
2183
+ set env(GIT_DIR) [ file normalize [gitdir] ]
2180
2184
} else {
2181
2185
cd $current_diff_path
2182
2186
if {$revs eq {--}} {
@@ -2197,18 +2201,15 @@ proc do_gitk {revs {is_submodule false}} {
2197
2201
}
2198
2202
set revs $old_sha1 ...$new_sha1
2199
2203
}
2200
- # GIT_DIR and GIT_WORK_TREE for the submodule are not the ones
2201
- # we've been using for the main repository, so unset them.
2202
- # TODO we could make life easier (start up faster?) for gitk
2203
- # by setting these to the appropriate values to allow gitk
2204
- # to skip the heuristics to find their proper value
2205
- unset env(GIT_DIR)
2206
- unset env(GIT_WORK_TREE)
2204
+ if {[ info exists env(GIT_DIR)] } {
2205
+ unset env(GIT_DIR)
2206
+ }
2207
2207
}
2208
2208
eval exec $cmd $revs " --" " --" &
2209
2209
2210
- set env(GIT_DIR) $_gitdir
2211
- set env(GIT_WORK_TREE) $_gitworktree
2210
+ if {$old_GIT_DIR ne {}} {
2211
+ set env(GIT_DIR) $old_GIT_DIR
2212
+ }
2212
2213
cd $pwd
2213
2214
2214
2215
ui_status $::starting_gitk_msg
@@ -2229,20 +2230,22 @@ proc do_git_gui {} {
2229
2230
error_popup [ mc " Couldn't find git gui in PATH" ]
2230
2231
} else {
2231
2232
global env
2232
- global _gitdir _gitworktree
2233
2233
2234
- # see note in do_gitk about unsetting these vars when
2235
- # running tools in a submodule
2236
- unset env(GIT_DIR)
2237
- unset env(GIT_WORK_TREE)
2234
+ if {[ info exists env(GIT_DIR)] } {
2235
+ set old_GIT_DIR $env(GIT_DIR)
2236
+ unset env(GIT_DIR)
2237
+ } else {
2238
+ set old_GIT_DIR {}
2239
+ }
2238
2240
2239
2241
set pwd [ pwd ]
2240
2242
cd $current_diff_path
2241
2243
2242
2244
eval exec $exe gui &
2243
2245
2244
- set env(GIT_DIR) $_gitdir
2245
- set env(GIT_WORK_TREE) $_gitworktree
2246
+ if {$old_GIT_DIR ne {}} {
2247
+ set env(GIT_DIR) $old_GIT_DIR
2248
+ }
2246
2249
cd $pwd
2247
2250
2248
2251
ui_status $::starting_gitk_msg
0 commit comments