git-gui: set GIT_DIR and GIT_WORK_TREE after setup
Rather than juggling with the env var GIT_DIR around the invocation of gitk, set it and GIT_WORK_TREE after finishing setup, ensuring that any external tool works with the setup we're running with. This also allows us to remove a couple of conditionals when running gitk or git gui in a submodule, as we know that the variables are present and have to be unset and reset before and after the invocation. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>maint
							parent
							
								
									3748b03d92
								
							
						
					
					
						commit
						a9fa11fe5b
					
				
							
								
								
									
										43
									
								
								git-gui.sh
								
								
								
								
							
							
						
						
									
										43
									
								
								git-gui.sh
								
								
								
								
							|  | @ -1171,6 +1171,9 @@ if {[lindex $_reponame end] eq {.git}} { | |||
| 	set _reponame [lindex $_reponame end] | ||||
| } | ||||
|  | ||||
| set env(GIT_DIR) $_gitdir | ||||
| set env(GIT_WORK_TREE) $_gitworktree | ||||
|  | ||||
| ###################################################################### | ||||
| ## | ||||
| ## global init | ||||
|  | @ -1979,7 +1982,7 @@ set starting_gitk_msg [mc "Starting gitk... please wait..."] | |||
|  | ||||
| proc do_gitk {revs {is_submodule false}} { | ||||
| 	global current_diff_path file_states current_diff_side ui_index | ||||
| 	global _gitworktree | ||||
| 	global _gitdir _gitworktree | ||||
|  | ||||
| 	# -- Always start gitk through whatever we were loaded with.  This | ||||
| 	#    lets us bypass using shell process on Windows systems. | ||||
|  | @ -1991,19 +1994,12 @@ proc do_gitk {revs {is_submodule false}} { | |||
| 	} else { | ||||
| 		global env | ||||
|  | ||||
| 		if {[info exists env(GIT_DIR)]} { | ||||
| 			set old_GIT_DIR $env(GIT_DIR) | ||||
| 		} else { | ||||
| 			set old_GIT_DIR {} | ||||
| 		} | ||||
|  | ||||
| 		set pwd [pwd] | ||||
|  | ||||
| 		if {!$is_submodule} { | ||||
| 			if {![is_bare]} { | ||||
| 				cd $_gitworktree | ||||
| 			} | ||||
| 			set env(GIT_DIR) [file normalize [gitdir]] | ||||
| 		} else { | ||||
| 			cd $current_diff_path | ||||
| 			if {$revs eq {--}} { | ||||
|  | @ -2024,15 +2020,18 @@ proc do_gitk {revs {is_submodule false}} { | |||
| 				} | ||||
| 				set revs $old_sha1...$new_sha1 | ||||
| 			} | ||||
| 			if {[info exists env(GIT_DIR)]} { | ||||
| 				unset env(GIT_DIR) | ||||
| 			} | ||||
| 			# GIT_DIR and GIT_WORK_TREE for the submodule are not the ones | ||||
| 			# we've been using for the main repository, so unset them. | ||||
| 			# TODO we could make life easier (start up faster?) for gitk | ||||
| 			# by setting these to the appropriate values to allow gitk | ||||
| 			# to skip the heuristics to find their proper value | ||||
| 			unset env(GIT_DIR) | ||||
| 			unset env(GIT_WORK_TREE) | ||||
| 		} | ||||
| 		eval exec $cmd $revs "--" "--" & | ||||
|  | ||||
| 		if {$old_GIT_DIR ne {}} { | ||||
| 			set env(GIT_DIR) $old_GIT_DIR | ||||
| 		} | ||||
| 		set env(GIT_DIR) $_gitdir | ||||
| 		set env(GIT_WORK_TREE) $_gitworktree | ||||
| 		cd $pwd | ||||
|  | ||||
| 		ui_status $::starting_gitk_msg | ||||
|  | @ -2053,22 +2052,20 @@ proc do_git_gui {} { | |||
| 		error_popup [mc "Couldn't find git gui in PATH"] | ||||
| 	} else { | ||||
| 		global env | ||||
| 		global _gitdir _gitworktree | ||||
|  | ||||
| 		if {[info exists env(GIT_DIR)]} { | ||||
| 			set old_GIT_DIR $env(GIT_DIR) | ||||
| 			unset env(GIT_DIR) | ||||
| 		} else { | ||||
| 			set old_GIT_DIR {} | ||||
| 		} | ||||
| 		# see note in do_gitk about unsetting these vars when | ||||
| 		# running tools in a submodule | ||||
| 		unset env(GIT_DIR) | ||||
| 		unset env(GIT_WORK_TREE) | ||||
|  | ||||
| 		set pwd [pwd] | ||||
| 		cd $current_diff_path | ||||
|  | ||||
| 		eval exec $exe gui & | ||||
|  | ||||
| 		if {$old_GIT_DIR ne {}} { | ||||
| 			set env(GIT_DIR) $old_GIT_DIR | ||||
| 		} | ||||
| 		set env(GIT_DIR) $_gitdir | ||||
| 		set env(GIT_WORK_TREE) $_gitworktree | ||||
| 		cd $pwd | ||||
|  | ||||
| 		ui_status $::starting_gitk_msg | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Giuseppe Bilotta
						Giuseppe Bilotta