@@ -13,133 +13,102 @@ package require Tk
13
13
# #
14
14
# # Enabling platform-specific code paths
15
15
16
- proc is_MacOSX {} {
17
- if {[tk windowingsystem] eq {aqua}} {
18
- return 1
19
- }
20
- return 0
21
- }
22
-
23
16
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
41
21
}
42
22
43
23
# #####################################################################
44
24
# #
45
25
# # PATH lookup
46
26
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
+ }
143
112
}
144
113
145
114
# End of safe PATH lookup stuff
@@ -491,11 +460,11 @@ proc parseviewrevs {view revs} {
491
460
# Escapes a list of filter paths to be passed to git log via stdin. Note that
492
461
# paths must not be quoted.
493
462
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
499
468
}
500
469
501
470
# Start off a git log process and arrange to read its output
@@ -4632,7 +4601,7 @@ proc addviewmenu {n} {
4632
4601
.bar.view add radiobutton -label $viewname($n) \
4633
4602
-command [ list showview $n ] -variable selectedview -value $n
4634
4603
#$viewhlmenu add radiobutton -label $viewname($n) \
4635
- # -command [ list addvhighlight $n ] -variable selectedhlview
4604
+ # -command [ list addvhighlight $n ] -variable selectedhlview
4636
4605
}
4637
4606
4638
4607
proc showview {n} {
0 commit comments