specinfra 2.36.16 → 2.36.17

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31f0678bd739fd583fa966de880fbaa598e472dc
4
- data.tar.gz: 1320a5fa3d67768f37014a5543b19170b3fa5edb
3
+ metadata.gz: 2d39102e5d6b60f2c4e5aa254c95e9559c4ca2f5
4
+ data.tar.gz: 47387d1f254b6e5e7f96db0d2f3eaf360882c0b2
5
5
  SHA512:
6
- metadata.gz: 369339a197697ee26e44a5bba33329a88c95aa4889f9d7f818b510bf54ed14687314fbcf003d27f60475de5ecaf5b3277acc325fb14cd437706a12a5c1404860
7
- data.tar.gz: 4f74f36d6b8cb24e53d02a045f9fee4b411a9b91c15db355709ccd7b644a9f9318265b26e4fa09058a85dd51b383e8252d3c870f70ef822b3a2fa57d9668b992
6
+ metadata.gz: bef2820b4f8a57c88a882286a8a93e6ccf0c2e552bfe7f7aa723be3b3474a848f0b302670c3bf45ab462dc40f3a4e0b3f4adfb24985159512470fe0b9fb23050
7
+ data.tar.gz: 85444779c5f8356f8f8cc0b48e717a68c1aff79f63f60bb942ff8bdc4e9faa66fcd9f313aa342d0f9ea94ca46396f050cbe620237157dd5c39e526c2f60dd63d
@@ -1,6 +1,7 @@
1
1
  require 'singleton'
2
2
  require 'fileutils'
3
3
  require 'shellwords'
4
+ require 'sfl'
4
5
 
5
6
  module Specinfra
6
7
  module Backend
@@ -8,18 +9,16 @@ module Specinfra
8
9
  def run_command(cmd, opts={})
9
10
  cmd = build_command(cmd)
10
11
  cmd = add_pre_command(cmd)
11
- stdout = with_env do
12
- `#{cmd} 2>&1`
12
+ stdout, stderr, exit_status = with_env do
13
+ spawn_command(cmd)
13
14
  end
14
- # In ruby 1.9, it is possible to use Open3.capture3, but not in 1.8
15
- # stdout, stderr, status = Open3.capture3(cmd)
16
15
 
17
16
  if @example
18
17
  @example.metadata[:command] = cmd
19
18
  @example.metadata[:stdout] = stdout
20
19
  end
21
20
 
22
- CommandResult.new :stdout => stdout, :exit_status => $?.exitstatus
21
+ CommandResult.new :stdout => stdout, :stderr => stderr, :exit_status => exit_status
23
22
  end
24
23
 
25
24
  def send_file(from, to)
@@ -44,6 +43,61 @@ module Specinfra
44
43
  end
45
44
 
46
45
  private
46
+ def spawn_command(cmd)
47
+ stdout, stderr = '', ''
48
+
49
+ begin
50
+ quit_r, quit_w = IO.pipe
51
+ out_r, out_w = IO.pipe
52
+ err_r, err_w = IO.pipe
53
+
54
+ th = Thread.new do
55
+ begin
56
+ loop do
57
+ readable_ios, = IO.select([quit_r, out_r, err_r])
58
+
59
+ if readable_ios.include?(out_r)
60
+ stdout += out_r.read_nonblock(1000)
61
+ end
62
+
63
+ if readable_ios.include?(err_r)
64
+ stderr += err_r.read_nonblock(1000)
65
+ end
66
+
67
+ if readable_ios.include?(quit_r)
68
+ break
69
+ end
70
+ end
71
+ rescue EOFError
72
+ ensure
73
+ quit_r.close unless quit_r.closed?
74
+ out_r.close unless out_r.closed?
75
+ err_r.close unless err_r.closed?
76
+ end
77
+ end
78
+
79
+ th.abort_on_exception = true
80
+
81
+ pid = spawn(cmd, :out => out_w, :err => err_w)
82
+
83
+ out_w.close
84
+ err_w.close
85
+
86
+ pid, stats = Process.waitpid2(pid)
87
+
88
+ begin
89
+ quit_w.syswrite 1
90
+ rescue Errno::EPIPE
91
+ end
92
+
93
+ th.value # wait
94
+ ensure
95
+ quit_w.close unless quit_w.closed?
96
+ end
97
+
98
+ return stdout, stderr, stats.exitstatus
99
+ end
100
+
47
101
  def with_env
48
102
  keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE
49
103
  RUBYOPT GEM_HOME GEM_PATH GEM_CACHE]
@@ -1,3 +1,3 @@
1
1
  module Specinfra
2
- VERSION = "2.36.16"
2
+ VERSION = "2.36.17"
3
3
  end
data/specinfra.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "net-scp"
23
23
  spec.add_runtime_dependency "net-ssh"
24
24
  spec.add_runtime_dependency "net-telnet"
25
+ spec.add_runtime_dependency "sfl"
25
26
 
26
27
  spec.add_development_dependency "bundler", "~> 1.3"
27
28
  spec.add_development_dependency "rake", "~> 10.1.1"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specinfra
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.36.16
4
+ version: 2.36.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gosuke Miyashita
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sfl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement