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