Skip to content

Commit 7a1d2bd

Browse files
committed
Merge branch 'master' of https://github.com/j6t/gitk
* 'master' of https://github.com/j6t/gitk: gitk: add Tamil translation gitk: limit PATH search to bare executable names gitk: _search_exe is no longer needed gitk: override $PATH search only on Windows gitk: adjust indentation to match the style used in this script
2 parents c6a2071 + 3fdbf18 commit 7a1d2bd

File tree

3 files changed

+1553
-126
lines changed

3 files changed

+1553
-126
lines changed

gitk-git/gitk

Lines changed: 95 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -13,133 +13,102 @@ package require Tk
1313
##
1414
## Enabling platform-specific code paths
1515

16-
proc is_MacOSX {} {
17-
if {[tk windowingsystem] eq {aqua}} {
18-
return 1
19-
}
20-
return 0
21-
}
22-
2316
proc is_Windows {} {
24-
if {$::tcl_platform(platform) eq {windows}} {
25-
return 1
26-
}
27-
return 0
28-
}
29-
30-
set _iscygwin {}
31-
proc is_Cygwin {} {
32-
global _iscygwin
33-
if {$_iscygwin eq {}} {
34-
if {[string match "CYGWIN_*" $::tcl_platform(os)]} {
35-
set _iscygwin 1
36-
} else {
37-
set _iscygwin 0
38-
}
39-
}
40-
return $_iscygwin
17+
if {$::tcl_platform(platform) eq {windows}} {
18+
return 1
19+
}
20+
return 0
4121
}
4222

4323
######################################################################
4424
##
4525
## PATH lookup
4626

47-
set _search_path {}
48-
proc _which {what args} {
49-
global env _search_exe _search_path
50-
51-
if {$_search_path eq {}} {
52-
if {[is_Cygwin] && [regexp {^(/|\.:)} $env(PATH)]} {
53-
set _search_path [split [exec cygpath \
54-
--windows \
55-
--path \
56-
--absolute \
57-
$env(PATH)] {;}]
58-
set _search_exe .exe
59-
} elseif {[is_Windows]} {
60-
set gitguidir [file dirname [info script]]
61-
regsub -all ";" $gitguidir "\\;" gitguidir
62-
set env(PATH) "$gitguidir;$env(PATH)"
63-
set _search_path [split $env(PATH) {;}]
64-
# Skip empty `PATH` elements
65-
set _search_path [lsearch -all -inline -not -exact \
66-
$_search_path ""]
67-
set _search_exe .exe
68-
} else {
69-
set _search_path [split $env(PATH) :]
70-
set _search_exe {}
71-
}
72-
}
73-
74-
if {[is_Windows] && [lsearch -exact $args -script] >= 0} {
75-
set suffix {}
76-
} else {
77-
set suffix $_search_exe
78-
}
79-
80-
foreach p $_search_path {
81-
set p [file join $p $what$suffix]
82-
if {[file exists $p]} {
83-
return [file normalize $p]
84-
}
85-
}
86-
return {}
87-
}
88-
89-
proc sanitize_command_line {command_line from_index} {
90-
set i $from_index
91-
while {$i < [llength $command_line]} {
92-
set cmd [lindex $command_line $i]
93-
if {[file pathtype $cmd] ne "absolute"} {
94-
set fullpath [_which $cmd]
95-
if {$fullpath eq ""} {
96-
throw {NOT-FOUND} "$cmd not found in PATH"
97-
}
98-
lset command_line $i $fullpath
99-
}
100-
101-
# handle piped commands, e.g. `exec A | B`
102-
for {incr i} {$i < [llength $command_line]} {incr i} {
103-
if {[lindex $command_line $i] eq "|"} {
104-
incr i
105-
break
106-
}
107-
}
108-
}
109-
return $command_line
110-
}
111-
112-
# Override `exec` to avoid unsafe PATH lookup
113-
114-
rename exec real_exec
115-
116-
proc exec {args} {
117-
# skip options
118-
for {set i 0} {$i < [llength $args]} {incr i} {
119-
set arg [lindex $args $i]
120-
if {$arg eq "--"} {
121-
incr i
122-
break
123-
}
124-
if {[string range $arg 0 0] ne "-"} {
125-
break
126-
}
127-
}
128-
set args [sanitize_command_line $args $i]
129-
uplevel 1 real_exec $args
130-
}
131-
132-
# Override `open` to avoid unsafe PATH lookup
133-
134-
rename open real_open
135-
136-
proc open {args} {
137-
set arg0 [lindex $args 0]
138-
if {[string range $arg0 0 0] eq "|"} {
139-
set command_line [string trim [string range $arg0 1 end]]
140-
lset args 0 "| [sanitize_command_line $command_line 0]"
141-
}
142-
uplevel 1 real_open $args
27+
if {[is_Windows]} {
28+
set _search_path {}
29+
proc _which {what args} {
30+
global env _search_path
31+
32+
if {$_search_path eq {}} {
33+
set gitguidir [file dirname [info script]]
34+
regsub -all ";" $gitguidir "\\;" gitguidir
35+
set env(PATH) "$gitguidir;$env(PATH)"
36+
set _search_path [split $env(PATH) {;}]
37+
# Skip empty `PATH` elements
38+
set _search_path [lsearch -all -inline -not -exact \
39+
$_search_path ""]
40+
}
41+
42+
if {[lsearch -exact $args -script] >= 0} {
43+
set suffix {}
44+
} else {
45+
set suffix .exe
46+
}
47+
48+
foreach p $_search_path {
49+
set p [file join $p $what$suffix]
50+
if {[file exists $p]} {
51+
return [file normalize $p]
52+
}
53+
}
54+
return {}
55+
}
56+
57+
proc sanitize_command_line {command_line from_index} {
58+
set i $from_index
59+
while {$i < [llength $command_line]} {
60+
set cmd [lindex $command_line $i]
61+
if {[llength [file split $cmd]] < 2} {
62+
set fullpath [_which $cmd]
63+
if {$fullpath eq ""} {
64+
throw {NOT-FOUND} "$cmd not found in PATH"
65+
}
66+
lset command_line $i $fullpath
67+
}
68+
69+
# handle piped commands, e.g. `exec A | B`
70+
for {incr i} {$i < [llength $command_line]} {incr i} {
71+
if {[lindex $command_line $i] eq "|"} {
72+
incr i
73+
break
74+
}
75+
}
76+
}
77+
return $command_line
78+
}
79+
80+
# Override `exec` to avoid unsafe PATH lookup
81+
82+
rename exec real_exec
83+
84+
proc exec {args} {
85+
# skip options
86+
for {set i 0} {$i < [llength $args]} {incr i} {
87+
set arg [lindex $args $i]
88+
if {$arg eq "--"} {
89+
incr i
90+
break
91+
}
92+
if {[string range $arg 0 0] ne "-"} {
93+
break
94+
}
95+
}
96+
set args [sanitize_command_line $args $i]
97+
uplevel 1 real_exec $args
98+
}
99+
100+
# Override `open` to avoid unsafe PATH lookup
101+
102+
rename open real_open
103+
104+
proc open {args} {
105+
set arg0 [lindex $args 0]
106+
if {[string range $arg0 0 0] eq "|"} {
107+
set command_line [string trim [string range $arg0 1 end]]
108+
lset args 0 "| [sanitize_command_line $command_line 0]"
109+
}
110+
uplevel 1 real_open $args
111+
}
143112
}
144113
145114
# End of safe PATH lookup stuff
@@ -491,11 +460,11 @@ proc parseviewrevs {view revs} {
491460
# Escapes a list of filter paths to be passed to git log via stdin. Note that
492461
# paths must not be quoted.
493462
proc escape_filter_paths {paths} {
494-
set escaped [list]
495-
foreach path $paths {
496-
lappend escaped [string map {\\ \\\\ "\ " "\\\ "} $path]
497-
}
498-
return $escaped
463+
set escaped [list]
464+
foreach path $paths {
465+
lappend escaped [string map {\\ \\\\ "\ " "\\\ "} $path]
466+
}
467+
return $escaped
499468
}
500469
501470
# Start off a git log process and arrange to read its output
@@ -4632,7 +4601,7 @@ proc addviewmenu {n} {
46324601
.bar.view add radiobutton -label $viewname($n) \
46334602
-command [list showview $n] -variable selectedview -value $n
46344603
#$viewhlmenu add radiobutton -label $viewname($n) \
4635-
# -command [list addvhighlight $n] -variable selectedhlview
4604+
# -command [list addvhighlight $n] -variable selectedhlview
46364605
}
46374606
46384607
proc showview {n} {

gitk-git/po/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import('i18n').gettext('gitk',
1212
'pt_pt',
1313
'ru',
1414
'sv',
15+
'ta',
1516
'vi',
1617
'zh_cn',
1718
],

0 commit comments

Comments
 (0)