subprocess 1.0.0 → 1.1.0
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/README.md +2 -0
- data/lib/subprocess.rb +25 -19
- data/lib/subprocess/version.rb +1 -1
- metadata +4 -9
data/README.md
CHANGED
data/lib/subprocess.rb
CHANGED
@@ -98,7 +98,6 @@ module Subprocess
|
|
98
98
|
# @return [String] Text interpretation
|
99
99
|
#
|
100
100
|
def self.status_to_s(status, convert_high_exit=true)
|
101
|
-
|
102
101
|
# use an array just in case we somehow get a status with all the bits set
|
103
102
|
parts = []
|
104
103
|
if status.exited?
|
@@ -109,17 +108,15 @@ module Subprocess
|
|
109
108
|
sig_num = status.exitstatus - 128
|
110
109
|
|
111
110
|
# sigh, why is ruby so silly
|
112
|
-
|
111
|
+
if Signal.respond_to?(:signame)
|
113
112
|
# ruby 2.0 way
|
114
113
|
sig_name = Signal.signame(sig_num)
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
sig_name = Signal.list.index(sig_num)
|
122
|
-
end
|
114
|
+
elsif Signal.list.respond_to?(:key)
|
115
|
+
# ruby 1.9 way
|
116
|
+
sig_name = Signal.list.key(sig_num)
|
117
|
+
else
|
118
|
+
# ruby 1.8 way
|
119
|
+
sig_name = Signal.list.index(sig_num)
|
123
120
|
end
|
124
121
|
|
125
122
|
if sig_name
|
@@ -198,7 +195,8 @@ module Subprocess
|
|
198
195
|
# Create a new process.
|
199
196
|
#
|
200
197
|
# @param [Array<String>] cmd The command to run and its arguments (in the
|
201
|
-
# style of an `argv` array).
|
198
|
+
# style of an `argv` array). Unlike Python's subprocess module, `cmd`
|
199
|
+
# cannnot be a String.
|
202
200
|
#
|
203
201
|
# @option opts [IO, Fixnum, String, Subprocess::PIPE, nil] :stdin The `IO`,
|
204
202
|
# file descriptor number, or file name to use for the process's standard
|
@@ -236,6 +234,8 @@ module Subprocess
|
|
236
234
|
# in conjunction with {Subprocess::check_call}.
|
237
235
|
# @yieldparam process [Process] The process that was just spawned.
|
238
236
|
def initialize(cmd, opts={}, &blk)
|
237
|
+
raise ArgumentError, "cmd must be an Array" unless Array === cmd
|
238
|
+
|
239
239
|
@command = cmd
|
240
240
|
|
241
241
|
# Figure out what file descriptors we should pass on to the child (and
|
@@ -369,6 +369,9 @@ module Subprocess
|
|
369
369
|
begin
|
370
370
|
e = Marshal.load(control_r)
|
371
371
|
e = "Unknown Failure" unless e.is_a?(Exception) || e.is_a?(String)
|
372
|
+
# Because we're throwing an exception and not returning a
|
373
|
+
# Process, we need to make sure the child gets reaped
|
374
|
+
wait
|
372
375
|
raise e
|
373
376
|
rescue EOFError # Nothing to read? Great!
|
374
377
|
ensure
|
@@ -509,18 +512,21 @@ module Subprocess
|
|
509
512
|
end
|
510
513
|
|
511
514
|
private
|
512
|
-
# Return a pair of values (child,
|
513
|
-
# descriptor should appear to the child and
|
514
|
-
# non-nil in the case of a pipe (in fact, we just return a
|
515
|
-
# one, since ruby will unpack nils from missing list items).
|
515
|
+
# Return a pair of values (child, mine), which are how the given file
|
516
|
+
# descriptor should appear to the child and to this process, respectively.
|
517
|
+
# "mine" is only non-nil in the case of a pipe (in fact, we just return a
|
518
|
+
# list of length one, since ruby will unpack nils from missing list items).
|
519
|
+
#
|
520
|
+
# If you pass either an IO or an Integer (i.e., a raw file descriptor), a
|
521
|
+
# private copy of it will be made using `#dup`.
|
516
522
|
def parse_fd(fd, mode)
|
517
|
-
|
523
|
+
fds = case fd
|
518
524
|
when PIPE
|
519
525
|
IO.pipe
|
520
526
|
when IO
|
521
|
-
[fd]
|
527
|
+
[fd.dup]
|
522
528
|
when Integer
|
523
|
-
[IO.new(fd, mode)]
|
529
|
+
[IO.new(fd, mode).dup]
|
524
530
|
when String
|
525
531
|
[File.open(fd, mode)]
|
526
532
|
when nil
|
@@ -529,7 +535,7 @@ module Subprocess
|
|
529
535
|
raise ArgumentError
|
530
536
|
end
|
531
537
|
|
532
|
-
mode == 'r' ?
|
538
|
+
mode == 'r' ? fds : fds.reverse
|
533
539
|
end
|
534
540
|
|
535
541
|
def mark_fd_cloexec(fd)
|
data/lib/subprocess/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subprocess
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date:
|
16
|
+
date: 2014-04-30 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: minitest
|
@@ -74,8 +74,8 @@ executables: []
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- lib/subprocess.rb
|
78
77
|
- lib/subprocess/version.rb
|
78
|
+
- lib/subprocess.rb
|
79
79
|
- README.md
|
80
80
|
homepage: https://github.com/stripe/subprocess
|
81
81
|
licenses:
|
@@ -90,18 +90,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- - ! '>='
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
hash: 84211792966870882
|
96
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
94
|
none: false
|
98
95
|
requirements:
|
99
96
|
- - ! '>='
|
100
97
|
- !ruby/object:Gem::Version
|
101
98
|
version: '0'
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
hash: 84211792966870882
|
105
99
|
requirements: []
|
106
100
|
rubyforge_project:
|
107
101
|
rubygems_version: 1.8.23
|
@@ -109,3 +103,4 @@ signing_key:
|
|
109
103
|
specification_version: 3
|
110
104
|
summary: A port of Python's subprocess module to Ruby
|
111
105
|
test_files: []
|
106
|
+
has_rdoc:
|