1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 03:16:13 +02:00

Merge gitk changes into js/gitk-fixes-from-gfw

* .tmp-gitk:
  gitk: escape file paths before piping to git log
  gitk: prevent overly long command lines
This commit is contained in:
Junio C Hamano 2023-05-08 09:16:57 -07:00
commit 99e70f3077

View File

@ -353,6 +353,16 @@ proc parseviewrevs {view revs} {
return $ret return $ret
} }
# Escapes a list of filter paths to be passed to git log via stdin. Note that
# paths must not be quoted.
proc escape_filter_paths {paths} {
set escaped [list]
foreach path $paths {
lappend escaped [string map {\\ \\\\ "\ " "\\\ "} $path]
}
return $escaped
}
# Start off a git log process and arrange to read its output # Start off a git log process and arrange to read its output
proc start_rev_list {view} { proc start_rev_list {view} {
global startmsecs commitidx viewcomplete curview global startmsecs commitidx viewcomplete curview
@ -405,14 +415,17 @@ proc start_rev_list {view} {
if {$revs eq {}} { if {$revs eq {}} {
return 0 return 0
} }
set args [concat $vflags($view) $revs] set args $vflags($view)
} else { } else {
set revs {}
set args $vorigargs($view) set args $vorigargs($view)
} }
if {[catch { if {[catch {
set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \ set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
--parents --boundary $args "--" $files] r] --parents --boundary $args --stdin \
"<<[join [concat $revs "--" \
[escape_filter_paths $files]] "\\n"]"] r]
} err]} { } err]} {
error_popup "[mc "Error executing git log:"] $err" error_popup "[mc "Error executing git log:"] $err"
return 0 return 0
@ -554,13 +567,20 @@ proc updatecommits {} {
set revs $newrevs set revs $newrevs
set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]] set vposids($view) [lsort -unique [concat $oldpos $vposids($view)]]
} }
set args [concat $vflags($view) $revs --not $oldpos] set args $vflags($view)
foreach r $oldpos {
lappend revs "^$r"
}
} else { } else {
set revs {}
set args $vorigargs($view) set args $vorigargs($view)
} }
if {[catch { if {[catch {
set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \ set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \
--parents --boundary $args "--" $vfilelimit($view)] r] --parents --boundary $args --stdin \
"<<[join [concat $revs "--" \
[escape_filter_paths \
$vfilelimit($view)]] "\\n"]"] r]
} err]} { } err]} {
error_popup "[mc "Error executing git log:"] $err" error_popup "[mc "Error executing git log:"] $err"
return return
@ -10231,10 +10251,16 @@ proc getallcommits {} {
foreach id $seeds { foreach id $seeds {
lappend ids "^$id" lappend ids "^$id"
} }
lappend ids "--"
} }
} }
if {$ids ne {}} { if {$ids ne {}} {
set fd [open [concat $cmd $ids] r] if {$ids eq "--all"} {
set cmd [concat $cmd "--all"]
} else {
set cmd [concat $cmd --stdin "<<[join $ids "\\n"]"]
}
set fd [open $cmd r]
fconfigure $fd -blocking 0 fconfigure $fd -blocking 0
incr allcommits incr allcommits
nowbusy allcommits nowbusy allcommits