open4 1.3.0 → 1.3.1
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 +15 -0
- data/lib/open4.rb +9 -4
- data/open4.gemspec +3 -2
- data/rakefile +20 -4
- data/test/popen4ext_test.rb +7 -0
- metadata +9 -9
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Mjg2OTllN2JkYWYxOTI3NzJkMTA5ZTA0MWEwMTdmOTU2M2U4Zjk0Nw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODllZjAxNTM3MzYwOGQwMTgyOGEzNTdmZGE3N2ZmMTU0ZTYxZWRlNg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NDc5MTFjNjFiNGNlNjQzZjMxYTY5NWNkNjRiMzgzNjQ4MjQ5NmFiYzdjYWQ0
|
10
|
+
NmRjMWFmMTQ1YTk5NjI4ZTJhOTJiNGI4MGVjNTkxMzU1YzYyMDgyNDVjMTIw
|
11
|
+
YjE3NGZlN2JjYjk1ZTNmZWIwYWU5NTdhMTU0NzdkYTc0MDIyNTY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ODAyYWRiNmIyZjY0ZTQ2NzBkYjZmYTFhMjY1MzY0ZTI3NTU5YTk4ODI1Zjhh
|
14
|
+
MDkzMzY0ZTlkNGZmNmUxOWQ1ZjA5OGMyYTgxYjVhNWQ3ZTg3Yzk3ODljZmQz
|
15
|
+
NzY2M2M2ZWM1NTY4NTVhYzc4ZmVhYzZiM2ViODg0Zjk4ZjdkNGE=
|
data/lib/open4.rb
CHANGED
@@ -4,8 +4,12 @@ require 'timeout'
|
|
4
4
|
require 'thread'
|
5
5
|
|
6
6
|
module Open4
|
7
|
-
VERSION = '1.3.
|
8
|
-
def
|
7
|
+
VERSION = '1.3.1'
|
8
|
+
def Open4.version() VERSION end
|
9
|
+
|
10
|
+
def Open4.description
|
11
|
+
'open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.'
|
12
|
+
end
|
9
13
|
|
10
14
|
class Error < ::StandardError; end
|
11
15
|
|
@@ -59,7 +63,7 @@ module Open4
|
|
59
63
|
if closefds
|
60
64
|
exlist = [0, 1, 2] | [pw,pr,pe,ps].map{|p| [p.first.fileno, p.last.fileno] }.flatten
|
61
65
|
ObjectSpace.each_object(IO){|io|
|
62
|
-
io.close if (not io.closed?) and (not exlist.include? io.fileno)
|
66
|
+
io.close if (not io.closed?) and (not exlist.include? io.fileno) rescue nil
|
63
67
|
}
|
64
68
|
end
|
65
69
|
|
@@ -308,6 +312,7 @@ module Open4
|
|
308
312
|
stderr_timeout = getopt[ %w( stderr_timeout ) ]
|
309
313
|
status = getopt[ %w( status ) ]
|
310
314
|
cwd = getopt[ %w( cwd dir ) ]
|
315
|
+
closefds = getopt[ %w( close_fds ) ]
|
311
316
|
|
312
317
|
exitstatus =
|
313
318
|
case exitstatus
|
@@ -328,7 +333,7 @@ module Open4
|
|
328
333
|
begin
|
329
334
|
chdir(cwd) do
|
330
335
|
Timeout::timeout(timeout) do
|
331
|
-
|
336
|
+
popen4ext(closefds, *argv) do |c, i, o, e|
|
332
337
|
started = true
|
333
338
|
|
334
339
|
%w( replace pid= << push update ).each do |msg|
|
data/open4.gemspec
CHANGED
@@ -3,10 +3,11 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "open4"
|
6
|
-
spec.version = "1.3.
|
6
|
+
spec.version = "1.3.1"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "open4"
|
9
|
-
spec.description = "
|
9
|
+
spec.description = "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily."
|
10
|
+
spec.license = "same as ruby's"
|
10
11
|
|
11
12
|
spec.files =
|
12
13
|
["LICENSE",
|
data/rakefile
CHANGED
@@ -3,14 +3,28 @@ This.author = "Ara T. Howard"
|
|
3
3
|
This.email = "ara.t.howard@gmail.com"
|
4
4
|
This.homepage = "https://github.com/ahoward/#{ This.lib }"
|
5
5
|
|
6
|
+
task :license do
|
7
|
+
open('LICENSE', 'w'){|fd| fd.puts "same as ruby's"}
|
8
|
+
end
|
6
9
|
|
7
10
|
task :default do
|
8
11
|
puts((Rake::Task.tasks.map{|task| task.name.gsub(/::/,':')} - ['default']).sort)
|
9
12
|
end
|
10
13
|
|
11
14
|
task :test do
|
15
|
+
run_tests!
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :test do
|
19
|
+
task(:unit){ run_tests!(:unit) }
|
20
|
+
task(:functional){ run_tests!(:functional) }
|
21
|
+
task(:integration){ run_tests!(:integration) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_tests!(which = nil)
|
25
|
+
which ||= '**'
|
12
26
|
test_dir = File.join(This.dir, "test")
|
13
|
-
test_glob ||= File.join(test_dir, "/**_test.rb")
|
27
|
+
test_glob ||= File.join(test_dir, "#{ which }/**_test.rb")
|
14
28
|
test_rbs = Dir.glob(test_glob).sort
|
15
29
|
|
16
30
|
div = ('=' * 119)
|
@@ -18,7 +32,7 @@ task :test do
|
|
18
32
|
|
19
33
|
test_rbs.each_with_index do |test_rb, index|
|
20
34
|
testno = index + 1
|
21
|
-
command = "#{ This.ruby } -
|
35
|
+
command = "#{ This.ruby } -w -I ./lib -I ./test/lib #{ test_rb }"
|
22
36
|
|
23
37
|
puts
|
24
38
|
say(div, :color => :cyan, :bold => true)
|
@@ -79,6 +93,7 @@ task :gemspec do
|
|
79
93
|
test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb")
|
80
94
|
summary = object.respond_to?(:summary) ? object.summary : "summary: #{ lib } kicks the ass"
|
81
95
|
description = object.respond_to?(:description) ? object.description : "description: #{ lib } kicks the ass"
|
96
|
+
license = object.respond_to?(:license) ? object.license : "same as ruby's"
|
82
97
|
|
83
98
|
if This.extensions.nil?
|
84
99
|
This.extensions = []
|
@@ -104,6 +119,7 @@ task :gemspec do
|
|
104
119
|
spec.platform = Gem::Platform::RUBY
|
105
120
|
spec.summary = #{ lib.inspect }
|
106
121
|
spec.description = #{ description.inspect }
|
122
|
+
spec.license = #{ license.inspect }
|
107
123
|
|
108
124
|
spec.files =\n#{ files.sort.pretty_inspect }
|
109
125
|
spec.executables = #{ executables.inspect }
|
@@ -164,8 +180,8 @@ task :readme do
|
|
164
180
|
end
|
165
181
|
|
166
182
|
template =
|
167
|
-
if test(?e, '
|
168
|
-
Template{ IO.read('
|
183
|
+
if test(?e, 'README.erb')
|
184
|
+
Template{ IO.read('README.erb') }
|
169
185
|
else
|
170
186
|
Template {
|
171
187
|
<<-__
|
data/test/popen4ext_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'test_case'
|
2
|
+
require 'socket'
|
2
3
|
|
3
4
|
module Open4
|
4
5
|
|
@@ -77,6 +78,12 @@ ruby -e "
|
|
77
78
|
assert_equal err_msg, err_actual
|
78
79
|
assert_equal 0, status.exitstatus
|
79
80
|
end
|
81
|
+
|
82
|
+
def test_close_ignores_errors
|
83
|
+
TCPSocket.new('localhost', 59367).close rescue nil
|
84
|
+
cid, _ = popen4ext true, %{ruby -e "exit"}
|
85
|
+
assert_equal 0, wait_status(cid)
|
86
|
+
end
|
80
87
|
end
|
81
88
|
|
82
89
|
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
5
|
-
prerelease:
|
4
|
+
version: 1.3.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ara T. Howard
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-15 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
|
-
description: ! '
|
13
|
+
description: ! 'open child process with handles on pid, stdin, stdout, and stderr:
|
14
|
+
manage child processes and their io handles easily.'
|
15
15
|
email: ara.t.howard@gmail.com
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
@@ -38,27 +38,27 @@ files:
|
|
38
38
|
- test/support/test_case.rb
|
39
39
|
- white_box/leak.rb
|
40
40
|
homepage: https://github.com/ahoward/open4
|
41
|
-
licenses:
|
41
|
+
licenses:
|
42
|
+
- same as ruby's
|
43
|
+
metadata: {}
|
42
44
|
post_install_message:
|
43
45
|
rdoc_options: []
|
44
46
|
require_paths:
|
45
47
|
- lib
|
46
48
|
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
49
|
requirements:
|
49
50
|
- - ! '>='
|
50
51
|
- !ruby/object:Gem::Version
|
51
52
|
version: '0'
|
52
53
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
54
|
requirements:
|
55
55
|
- - ! '>='
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
58
|
requirements: []
|
59
59
|
rubyforge_project: codeforpeople
|
60
|
-
rubygems_version:
|
60
|
+
rubygems_version: 2.0.3
|
61
61
|
signing_key:
|
62
|
-
specification_version:
|
62
|
+
specification_version: 4
|
63
63
|
summary: open4
|
64
64
|
test_files: []
|