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