aboutsummaryrefslogtreecommitdiffstats
path: root/git-gui.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-gui.sh')
-rwxr-xr-xgit-gui.sh20
1 files changed, 16 insertions, 4 deletions
diff --git a/git-gui.sh b/git-gui.sh
index 570c236f57..9ccd888930 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -88,10 +88,22 @@ proc _which {what args} {
set gitguidir [file dirname [info script]]
regsub -all ";" $gitguidir "\\;" gitguidir
set env(PATH) "$gitguidir;$env(PATH)"
- set _search_path [split $env(PATH) {;}]
- # Skip empty `PATH` elements
- set _search_path [lsearch -all -inline -not -exact \
- $_search_path ""]
+
+ set _path_seen [dict create]
+ foreach p [split $env(PATH) {;}] {
+ # Keep only absolute paths, getting rid of ., empty, etc.
+ if {[file pathtype $p] ne {absolute}} {
+ continue
+ }
+ # Keep only the first occurence of any duplicates.
+ set norm_p [file normalize $p]
+ if {[dict exists $_path_seen $norm_p]} {
+ continue
+ }
+ dict set _path_seen $norm_p 1
+ lappend _search_path $norm_p
+ }
+ unset _path_seen
set _search_exe .exe
} else {
set _search_path [split $env(PATH) :]