justrun 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/justrun.rb +34 -5
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d05de7ed05646f8d9f0d48d01fa813f2eed91f90
|
4
|
+
data.tar.gz: a5c0fc3dba2c3f5d5f376add56935f5542f0d452
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ac33ff8029a8781beeb087242bc9fbea2c904a8433720e7da85d52cc3f7ecc772d38d8f2c75bdd36cb68e5c4a51dedf5056aef3894ecc1e4a274ed27230198a
|
7
|
+
data.tar.gz: 806ace9c477e2a83cfa35dfb6a39a39b31b7afa2a274547e1368813cc326b867d7e7760f718cfead837294da126cc44e4a38f8b8b38dbdcacd74cf0d8f6f3158
|
data/lib/justrun.rb
CHANGED
@@ -3,12 +3,29 @@ require 'open3'
|
|
3
3
|
#TODO: Run multiple commands at the same time
|
4
4
|
|
5
5
|
class JustRun
|
6
|
-
def self.command(command, block_size: 4096*4, init: ->(writer) {}, env: ENV, &block)
|
6
|
+
def self.command(command, block_size: 4096*4, buffer_output: false, init: ->(writer) {}, env: ENV, &block)
|
7
7
|
ret_code = -1
|
8
|
+
|
9
|
+
buffers = {
|
10
|
+
stdout: [],
|
11
|
+
stderr: [],
|
12
|
+
all: []
|
13
|
+
}
|
14
|
+
|
8
15
|
Open3.popen3 env, command do |stdin, stdout, stderr, wait_thr|
|
9
16
|
writer = JustRun::Writer.new stdin
|
10
17
|
init.call writer
|
11
18
|
|
19
|
+
line_handler = -> line, name {
|
20
|
+
if buffer_output
|
21
|
+
buffers[name].push line
|
22
|
+
buffers[:all].push line
|
23
|
+
end
|
24
|
+
if block
|
25
|
+
block.call line, name, writer
|
26
|
+
end
|
27
|
+
}
|
28
|
+
|
12
29
|
fileno_lines = {}
|
13
30
|
begin
|
14
31
|
files = [stdout, stderr]
|
@@ -25,6 +42,7 @@ class JustRun
|
|
25
42
|
fileno_lines[fileno] ||= []
|
26
43
|
lines = fileno_lines[fileno]
|
27
44
|
name = fileno2name[fileno]
|
45
|
+
|
28
46
|
begin
|
29
47
|
data = f.read_nonblock block_size
|
30
48
|
lines_new = data.lines
|
@@ -33,7 +51,8 @@ class JustRun
|
|
33
51
|
end
|
34
52
|
lines.push(*lines_new)
|
35
53
|
while lines[0] =~ /\n\r?/
|
36
|
-
|
54
|
+
line = lines.shift.chomp
|
55
|
+
line_handler.call line, name
|
37
56
|
end
|
38
57
|
rescue EOFError => e
|
39
58
|
# expected
|
@@ -48,7 +67,7 @@ class JustRun
|
|
48
67
|
fileno_lines.each do |fileno, lines|
|
49
68
|
name = fileno2name[fileno]
|
50
69
|
if lines.length > 0
|
51
|
-
|
70
|
+
line_handler.call lines.shift.chomp, name
|
52
71
|
end
|
53
72
|
end
|
54
73
|
rescue IOError => e
|
@@ -56,7 +75,17 @@ class JustRun
|
|
56
75
|
end
|
57
76
|
ret_code = wait_thr.value
|
58
77
|
end
|
59
|
-
|
78
|
+
|
79
|
+
if buffer_output
|
80
|
+
{
|
81
|
+
code: ret_code.exitstatus,
|
82
|
+
stderr: buffers[:stderr],
|
83
|
+
stdout: buffers[:stdout],
|
84
|
+
all: buffers[:all]
|
85
|
+
}
|
86
|
+
else
|
87
|
+
ret_code.exitstatus
|
88
|
+
end
|
60
89
|
end
|
61
90
|
|
62
91
|
private
|
@@ -75,7 +104,7 @@ class JustRun
|
|
75
104
|
end
|
76
105
|
|
77
106
|
def write str
|
78
|
-
@buffer << str
|
107
|
+
@buffer << str
|
79
108
|
process
|
80
109
|
end
|
81
110
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: justrun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damian Kaczmarek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -82,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|
84
84
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.4.
|
85
|
+
rubygems_version: 2.4.5
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: Run command and get live line by line callbacks
|