rubysh 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rubysh/runner.rb +3 -3
- data/lib/rubysh/subprocess/parallel_io.rb +8 -0
- data/lib/rubysh/version.rb +1 -1
- data/test/functional/lib/on_output.rb +31 -0
- metadata +4 -4
data/lib/rubysh/runner.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Rubysh
|
2
2
|
class Runner
|
3
|
-
attr_accessor :command, :targets
|
3
|
+
attr_accessor :command, :targets, :parallel_io
|
4
4
|
|
5
5
|
def initialize(command)
|
6
6
|
@runner_state = :initialized
|
@@ -288,11 +288,11 @@ module Rubysh
|
|
288
288
|
if on_write = command.opts[:on_write]
|
289
289
|
@parallel_io.on_write(on_write)
|
290
290
|
else
|
291
|
-
@parallel_io.on_write do |target_name,
|
291
|
+
@parallel_io.on_write do |target_name, data, remaining|
|
292
292
|
if data == Subprocess::ParallelIO::EOF
|
293
293
|
Rubysh.log.debug("EOF reached on #{target_name.inspect}")
|
294
294
|
else
|
295
|
-
Rubysh.log.debug("Just wrote #{
|
295
|
+
Rubysh.log.debug("Just wrote #{data.inspect} on #{target_name.inspect}")
|
296
296
|
end
|
297
297
|
end
|
298
298
|
end
|
@@ -15,6 +15,14 @@ class Rubysh::Subprocess
|
|
15
15
|
@writer_buffers = {}
|
16
16
|
end
|
17
17
|
|
18
|
+
def register_reader(reader, name)
|
19
|
+
@readers[reader] = name
|
20
|
+
end
|
21
|
+
|
22
|
+
def register_writer(writer, name)
|
23
|
+
@writers[writer] = name
|
24
|
+
end
|
25
|
+
|
18
26
|
def on_read(method=nil, &blk)
|
19
27
|
raise "Can't provide both method and block" if method && blk
|
20
28
|
@on_read = method || blk
|
data/lib/rubysh/version.rb
CHANGED
@@ -30,5 +30,36 @@ module RubyshTest::Functional
|
|
30
30
|
assert_raises(Rubysh::Error::BaseError) {runner.read}
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
describe 'when registering a reader post-hoc' do
|
35
|
+
it 'successfully uses both the existing and new reader' do
|
36
|
+
buffers = {}
|
37
|
+
runner = Rubysh('sh', '-c', '
|
38
|
+
echo stdout1
|
39
|
+
read _
|
40
|
+
echo stdout2
|
41
|
+
',
|
42
|
+
Rubysh.>, Rubysh.<,
|
43
|
+
:on_read => Proc.new do |name, bytes|
|
44
|
+
(buffers[name] ||= '') << bytes
|
45
|
+
end
|
46
|
+
).run_async
|
47
|
+
reader, writer = IO.pipe
|
48
|
+
runner.parallel_io.register_reader(reader, :pipe)
|
49
|
+
|
50
|
+
# run_once may be triggered by sigchld
|
51
|
+
runner.parallel_io.run_once until buffers.length > 0
|
52
|
+
assert_equal(nil, buffers[:pipe])
|
53
|
+
assert_equal("stdout1\n", buffers[:stdout])
|
54
|
+
buffers.clear
|
55
|
+
|
56
|
+
runner.write("stdin\n")
|
57
|
+
writer.write('pipe')
|
58
|
+
|
59
|
+
runner.parallel_io.run_once until buffers[:stdout]
|
60
|
+
assert_equal('pipe', buffers[:pipe])
|
61
|
+
assert_equal("stdout2\n", buffers[:stdout])
|
62
|
+
end
|
63
|
+
end
|
33
64
|
end
|
34
65
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
segments:
|
145
145
|
- 0
|
146
|
-
hash: -
|
146
|
+
hash: -1239245545634239752
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
segments:
|
154
154
|
- 0
|
155
|
-
hash: -
|
155
|
+
hash: -1239245545634239752
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
158
|
rubygems_version: 1.8.23
|