@@ -75,6 +75,52 @@ proc is_Cygwin {} {
7575 return $_iscygwin
7676}
7777
78+ # #####################################################################
79+ # #
80+ # # PATH lookup
81+
82+ set _search_path {}
83+ proc _which {what args} {
84+ global env _search_exe _search_path
85+
86+ if {$_search_path eq {}} {
87+ if {[is_Cygwin] && [regexp {^(/|\.:)} $env(PATH) ]} {
88+ set _search_path [split [exec cygpath \
89+ --windows \
90+ --path \
91+ --absolute \
92+ $env(PATH) ] {;}]
93+ set _search_exe .exe
94+ } elseif {[is_Windows]} {
95+ set gitguidir [file dirname [info script]]
96+ regsub -all ";" $gitguidir "\\ ;" gitguidir
97+ set env(PATH) " $gitguidir ;$env(PATH) "
98+ set _search_path [ split $env(PATH) {;}]
99+ # Skip empty `PATH` elements
100+ set _search_path [ lsearch -all -inline -not -exact \
101+ $_search_path " " ]
102+ set _search_exe .exe
103+ } else {
104+ set _search_path [ split $env(PATH) :]
105+ set _search_exe {}
106+ }
107+ }
108+
109+ if {[ is_Windows] && [ lsearch -exact $args -script] >= 0} {
110+ set suffix {}
111+ } else {
112+ set suffix $_search_exe
113+ }
114+
115+ foreach p $_search_path {
116+ set p [ file join $p $what$suffix ]
117+ if {[ file exists $p ] } {
118+ return [ file normalize $p ]
119+ }
120+ }
121+ return {}
122+ }
123+
78124######################################################################
79125##
80126## locate our library
@@ -194,7 +240,6 @@ set _isbare {}
194240set _gitexec {}
195241set _githtmldir {}
196242set _reponame {}
197- set _search_path {}
198243set _shellpath {@@SHELL_PATH@@}
199244
200245set _trace [ lsearch -exact $argv --trace]
@@ -444,47 +489,6 @@ proc _git_cmd {name} {
444489 return $v
445490}
446491
447- proc _which {what args} {
448- global env _search_exe _search_path
449-
450- if {$_search_path eq {}} {
451- if {[is_Cygwin] && [regexp {^(/|\.:)} $env(PATH) ]} {
452- set _search_path [split [exec cygpath \
453- --windows \
454- --path \
455- --absolute \
456- $env(PATH) ] {;}]
457- set _search_exe .exe
458- } elseif {[is_Windows]} {
459- set gitguidir [file dirname [info script]]
460- regsub -all ";" $gitguidir "\\ ;" gitguidir
461- set env(PATH) " $gitguidir ;$env(PATH) "
462- set _search_path [ split $env(PATH) {;}]
463- # Skip empty `PATH` elements
464- set _search_path [ lsearch -all -inline -not -exact \
465- $_search_path " " ]
466- set _search_exe .exe
467- } else {
468- set _search_path [ split $env(PATH) :]
469- set _search_exe {}
470- }
471- }
472-
473- if {[ is_Windows] && [ lsearch -exact $args -script] >= 0} {
474- set suffix {}
475- } else {
476- set suffix $_search_exe
477- }
478-
479- foreach p $_search_path {
480- set p [ file join $p $what$suffix ]
481- if {[ file exists $p ] } {
482- return [ file normalize $p ]
483- }
484- }
485- return {}
486- }
487-
488492# Test a file for a hashbang to identify executable scripts on Windows.
489493proc is_shellscript {filename } {
490494 if {![file exists $filename ]} {return 0}
0 commit comments