specinfra 2.36.14 → 2.36.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2467e9be8b88a4faf8257f0afda679b6c7b274a
4
- data.tar.gz: b1b5df6a2fb8d040176c01d68ae786f6f39703bb
3
+ metadata.gz: 52825f59df9dc1d9c3221a068fd18605b16bc598
4
+ data.tar.gz: 6147f9e0d9d8b7fffebb60207a01666c2c695929
5
5
  SHA512:
6
- metadata.gz: 371815c3dcc18fff43746b085ec784be737315d3adb92939dcb4e2b9deb7bc9eadc6884a1dd7515875c0fdef473f0e1e8080c00afdaefde0922f0cc62c860d08
7
- data.tar.gz: a3073673d2aee5ddd5b5ce5c491ccf0158daa10a60f0e87f79fac7f392e065bbdf496a38b9d7e1896b3180311bd93bcc6c439d2b7e427937054d6e50191f6888
6
+ metadata.gz: 70428f446ddfdd373775273b763964614a9acb3b2cf93edafd3af7a1027f1f4497e80e7dcabe19c0d3b0e7442ce6fd7b5ffcab95b9ccdefa52b9f18ec38158c1
7
+ data.tar.gz: b92aa57e6661bf6bb332fc3527be3d70af8207e324026093f103397e23401d49890a1d14b6e7005de9517c4c76ca3f80692f64ab268fe0b091d9c2215b1180c1
@@ -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,59 @@ 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
+ ensure
93
+ quit_w.close unless quit_w.closed?
94
+ end
95
+
96
+ return stdout, stderr, stats.exitstatus
97
+ end
98
+
47
99
  def with_env
48
100
  keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE
49
101
  RUBYOPT GEM_HOME GEM_PATH GEM_CACHE]
@@ -1,3 +1,3 @@
1
1
  module Specinfra
2
- VERSION = "2.36.14"
2
+ VERSION = "2.36.15"
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specinfra
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.36.14
4
+ version: 2.36.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gosuke Miyashita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-scp
@@ -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