We are going to treat command arguments and redirections differently to
avoid passing arguments that look like redirections to the command
accidentally. To do so, it will be necessary to know which arguments
are intentional redirections. Rewrite direct call sites of git_read
to pass intentional redirections as a second (optional) argument.
git_read defers to safe_open_command, but we cannot make it safe, yet,
because one of the callers of git_read is proc git, which does not yet
know which of its arguments are redirections. This is the topic of the
next commit.
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
return $fd
}
-proc git_read {cmd} {
+proc git_read {cmd {redir {}}} {
set cmdp [_git_cmd [lindex $cmd 0]]
set cmd [lrange $cmd 1 end]
- return [safe_open_command [concat $cmdp $cmd]]
+ return [safe_open_command [concat $cmdp $cmd] $redir]
}
proc git_read_nice {cmd} {
}
proc githook_read {hook_name args} {
- git_read [concat [list hook run --ignore-missing $hook_name --] $args 2>@1]
+ git_read [concat [list hook run --ignore-missing $hook_name --] $args] [list 2>@1]
}
proc kill_file_process {fd} {
--exclude-per-directory=.gitignore \
$HEAD \
$new_hash \
- 2>@1 \
- ]]
+ ] \
+ [list 2>@1]]
fconfigure $fd -blocking 0 -translation binary
fileevent $fd readable [cb _readtree_wait $fd $status_bar_operation]
}
-v \
HEAD \
HEAD \
- 2>@1 \
- ]]
+ ] \
+ [list 2>@1]]
fconfigure $fd -blocking 0 -translation binary
fileevent $fd readable [cb _readtree_wait $fd]
}
method exec {cmd {after {}}} {
if {[lindex $cmd 0] eq {git}} {
- lappend cmd 2>@1
- set fd_f [git_read [lrange $cmd 1 end]]
+ set fd_f [git_read [lrange $cmd 1 end] [list 2>@1]]
} else {
set fd_f [safe_open_command $cmd [list 2>@1]]
}
}
if {[ask_popup $op_question] eq {yes}} {
- set fd [git_read [list read-tree --reset -u -v HEAD 2>@1]]
+ set fd [git_read [list read-tree --reset -u -v HEAD] [list 2>@1]]
fconfigure $fd -blocking 0 -translation binary
set status_bar_operation [$::main_status \
start \