@@ -16,6 +16,11 @@ def initialize
16
16
@existing = existing_display?
17
17
@enabled = false
18
18
@pid = nil
19
+
20
+ @xv_pipe_out_wr = nil
21
+ @xv_pipe_err_wr = nil
22
+ @xv_pipe_out = nil
23
+ @xv_pipe_err = nil
19
24
end
20
25
21
26
# attempt to determine if the machine is running a graphical display (i.e. not Travis)
@@ -71,6 +76,8 @@ def enable
71
76
end
72
77
73
78
return unless @pid.nil? # TODO: disable first?
79
+ @xv_pipe_out.close unless @xv_pipe_out.nil?
80
+ @xv_pipe_err.close unless @xv_pipe_err.nil?
74
81
75
82
# open Xvfb
76
83
xvfb_cmd = [
@@ -81,8 +88,11 @@ def enable
81
88
"-screen", "0",
82
89
"1280x1024x16",
83
90
]
84
- puts "pipeline_start for Xvfb"
85
- pipe = IO.popen(xvfb_cmd)
91
+ puts "Xvfb launching"
92
+
93
+ @xv_pipe_out, @xv_pipe_out_wr = IO.pipe
94
+ @xv_pipe_err, @xv_pipe_err_wr = IO.pipe
95
+ pipe = IO.popen(xvfb_cmd, stdout: @xv_pipe_out_wr, err: @xv_pipe_err_wr)
86
96
@pid = pipe.pid
87
97
@enabled = xvfb_launched?(DESIRED_DISPLAY, @pid, 30)
88
98
end
@@ -109,6 +119,9 @@ def disable
109
119
Process.wait @pid
110
120
@enabled = false
111
121
@pid = nil
122
+
123
+ @xv_pipe_out_wr.close
124
+ @xv_pipe_err_wr.close
112
125
end
113
126
end
114
127
@@ -133,14 +146,11 @@ def run(*args, **kwargs)
133
146
env_vars.merge!(args[0]) if has_env
134
147
actual_args = has_env ? args[1..-1] : args # need to shift over if we extracted args
135
148
full_cmd = env_vars.empty? ? actual_args : [env_vars] + actual_args
136
-
137
- puts "Running #{env_vars} $ #{actual_args.join(' ')}"
138
- puts "Full_cmd is #{full_cmd}"
139
- puts "kwargs is #{kwargs}"
149
+ shell_vars = env_vars.map { |k, v| "#{k}=#{v}" }.join(" ")
150
+ puts " $ #{shell_vars} #{actual_args.join(' ')}"
140
151
ret = system(*full_cmd, **kwargs)
141
- puts "system call to #{actual_args[0]} has completed"
152
+ puts "#{actual_args[0]} has completed"
142
153
end
143
- puts "with_display has completed"
144
154
ret
145
155
end
146
156
0 commit comments