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