return $result
}
-proc _open_stdout_stderr {cmd} {
- _trace_exec $cmd
+proc safe_open_command {cmd {redir {}}} {
+ _trace_exec [concat $cmd $redir]
if {[catch {
- set fd [open [concat [list | ] $cmd] r]
+ set fd [open [concat [list | ] $cmd $redir] r]
} err]} {
error $err
}
set cmdp [_git_cmd [lindex $cmd 0]]
set cmd [lrange $cmd 1 end]
- return [_open_stdout_stderr [concat $cmdp $cmd]]
+ return [safe_open_command [concat $cmdp $cmd]]
}
proc git_read_nice {cmd} {
set cmdp [_git_cmd [lindex $cmd 0]]
set cmd [lrange $cmd 1 end]
- return [_open_stdout_stderr [concat $opt $cmdp $cmd]]
+ return [safe_open_command [concat $opt $cmdp $cmd]]
}
proc git_write {cmd} {
}
method exec {cmd {after {}}} {
- lappend cmd 2>@1
if {[lindex $cmd 0] eq {git}} {
+ lappend cmd 2>@1
set fd_f [git_read [lrange $cmd 1 end]]
} else {
- set fd_f [_open_stdout_stderr $cmd]
+ set fd_f [safe_open_command $cmd [list 2>@1]]
}
fconfigure $fd_f -blocking 0 -translation binary
fileevent $fd_f readable [cb _read $fd_f $after]
# Force redirection to avoid interpreting output on stderr
# as an error, and launch the tool
- lappend cmdline {2>@1}
+ set redir [list {2>@1}]
- if {[catch { set mtool_fd [_open_stdout_stderr $cmdline] } err]} {
+ if {[catch { set mtool_fd [safe_open_command $cmdline $redir] } err]} {
delete_temp_files $mtool_tmpfiles
error_popup [mc "Could not start the merge tool:\n\n%s" $err]
return
set cmdline [list sh -c {echo | ssh-keygen -q -t rsa -f ~/.ssh/id_rsa 2>&1}]
- if {[catch { set sshkey_fd [_open_stdout_stderr $cmdline] } err]} {
+ if {[catch { set sshkey_fd [safe_open_command $cmdline] } err]} {
error_popup [mc "Could not start ssh-keygen:\n\n%s" $err]
return
}
}
proc tools_run_silent {cmd after} {
- lappend cmd 2>@1
- set fd [_open_stdout_stderr $cmd]
+ set fd [safe_open_command $cmd [list 2>@1]]
fconfigure $fd -blocking 0 -translation binary
fileevent $fd readable [list tools_consume_input $fd $after]