posix-spawn 0.3.5 → 0.3.6

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.
@@ -3,4 +3,9 @@ require 'mkmf'
3
3
  # warnings save lives
4
4
  $CFLAGS << " -Wall "
5
5
 
6
- create_makefile('posix_spawn_ext')
6
+ if RUBY_PLATFORM =~ /(mswin|mingw|bccwin)/
7
+ File.open('Makefile','w'){|f| f.puts "default: \ninstall: " }
8
+ else
9
+ create_makefile('posix_spawn_ext')
10
+ end
11
+
@@ -69,14 +69,22 @@ posixspawn_obj_to_fd(VALUE obj)
69
69
 
70
70
  case T_FILE:
71
71
  /* IO object */
72
- fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
72
+ if (rb_respond_to(obj, rb_intern("posix_fileno"))) {
73
+ fd = FIX2INT(rb_funcall(obj, rb_intern("posix_fileno"), 0));
74
+ } else {
75
+ fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
76
+ }
73
77
  break;
74
78
 
75
79
  case T_OBJECT:
76
80
  /* some other object */
77
81
  if (rb_respond_to(obj, rb_intern("to_io"))) {
78
82
  obj = rb_funcall(obj, rb_intern("to_io"), 0);
79
- fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
83
+ if (rb_respond_to(obj, rb_intern("posix_fileno"))) {
84
+ fd = FIX2INT(rb_funcall(obj, rb_intern("posix_fileno"), 0));
85
+ } else {
86
+ fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
87
+ }
80
88
  }
81
89
  break;
82
90
  }
@@ -1,7 +1,30 @@
1
- require 'posix_spawn_ext'
1
+ unless RUBY_PLATFORM =~ /(mswin|mingw|bccwin)/
2
+ require 'posix_spawn_ext'
3
+ end
4
+
2
5
  require 'posix/spawn/version'
3
6
  require 'posix/spawn/child'
4
7
 
8
+ class IO
9
+ if defined? JRUBY_VERSION
10
+ require 'jruby'
11
+ def posix_fileno
12
+ case self
13
+ when STDIN, $stdin
14
+ 0
15
+ when STDOUT, $stdout
16
+ 1
17
+ when STDERR, $stderr
18
+ 2
19
+ else
20
+ JRuby.reference(self).getOpenFile.getMainStream.getDescriptor.getChannel.getFDVal
21
+ end
22
+ end
23
+ else
24
+ alias :posix_fileno :fileno
25
+ end
26
+ end
27
+
5
28
  module POSIX
6
29
  # The POSIX::Spawn module implements a compatible subset of Ruby 1.9's
7
30
  # Process::spawn and related methods using the IEEE Std 1003.1 posix_spawn(2)
@@ -151,6 +174,16 @@ module POSIX
151
174
  def pspawn(*args)
152
175
  env, argv, options = extract_process_spawn_arguments(*args)
153
176
  raise NotImplementedError unless respond_to?(:_pspawn)
177
+
178
+ if defined? JRUBY_VERSION
179
+ # On the JVM, changes made to the environment are not propagated down
180
+ # to C via get/setenv, so we have to fake it here.
181
+ unless options[:unsetenv_others] == true
182
+ env = ENV.merge(env)
183
+ options[:unsetenv_others] = true
184
+ end
185
+ end
186
+
154
187
  _pspawn(env, argv, options)
155
188
  end
156
189
 
@@ -1,5 +1,5 @@
1
1
  module POSIX
2
2
  module Spawn
3
- VERSION = '0.3.5'
3
+ VERSION = '0.3.6'
4
4
  end
5
5
  end
@@ -6,31 +6,31 @@ class BacktickTest < Test::Unit::TestCase
6
6
 
7
7
  def test_backtick_simple
8
8
  out = `exit`
9
- assert_equal out, ''
10
- assert_equal $?.exitstatus, 0
9
+ assert_equal '', out
10
+ assert_equal 0, $?.exitstatus
11
11
  end
12
12
 
13
13
  def test_backtick_output
14
14
  out = `echo 123`
15
- assert_equal out, "123\n"
16
- assert_equal $?.exitstatus, 0
15
+ assert_equal "123\n", out
16
+ assert_equal 0, $?.exitstatus, 0
17
17
  end
18
18
 
19
19
  def test_backtick_failure
20
20
  out = `nosuchcmd 2> /dev/null`
21
- assert_equal out, ''
22
- assert_equal $?.exitstatus, 127
21
+ assert_equal '', out
22
+ assert_equal 127, $?.exitstatus
23
23
  end
24
24
 
25
25
  def test_backtick_redirect
26
26
  out = `nosuchcmd 2>&1`
27
- assert_equal out, "/bin/sh: nosuchcmd: command not found\n"
28
- assert_equal $?.exitstatus, 127
27
+ assert_equal "/bin/sh: nosuchcmd: command not found\n", out
28
+ assert_equal 127, $?.exitstatus, 127
29
29
  end
30
30
 
31
31
  def test_backtick_huge
32
32
  out = `yes | head -50000`
33
- assert_equal out.size, 100000
34
- assert_equal $?.exitstatus, 0
33
+ assert_equal 100000, out.size
34
+ assert_equal 0, $?.exitstatus
35
35
  end
36
36
  end
@@ -75,9 +75,11 @@ class ChildTest < Test::Unit::TestCase
75
75
  end
76
76
 
77
77
  def test_timeout
78
+ start = Time.now
78
79
  assert_raise TimeoutExceeded do
79
80
  Child.new('sleep', '1', :timeout => 0.05)
80
81
  end
82
+ assert (Time.now-start) <= 0.2
81
83
  end
82
84
 
83
85
  def test_timeout_with_child_hierarchy
@@ -10,8 +10,8 @@ class PopenTest < Test::Unit::TestCase
10
10
  i.close
11
11
  ::Process.wait(pid)
12
12
 
13
- assert_equal o.read, "hello world"
14
- assert_equal $?.exitstatus, 0
13
+ assert_equal "hello world", o.read
14
+ assert_equal 0, $?.exitstatus
15
15
  ensure
16
16
  [i, o, e].each{ |io| io.close rescue nil }
17
17
  end
@@ -68,7 +68,7 @@ module SpawnImplementationTests
68
68
 
69
69
  def test_sanity_of_checking_clone_with_sh
70
70
  rd, wr = IO.pipe
71
- pid = _spawn("exec 2>/dev/null 100<&#{rd.to_i} || exit 1", rd => rd)
71
+ pid = _spawn("exec 2>/dev/null 100<&#{rd.posix_fileno} || exit 1", rd => rd)
72
72
  assert_process_exit_status pid, 0
73
73
  ensure
74
74
  [rd, wr].each { |fd| fd.close rescue nil }
@@ -94,7 +94,7 @@ module SpawnImplementationTests
94
94
 
95
95
  def test_spawn_close_option_with_fd_number
96
96
  rd, wr = IO.pipe
97
- pid = _spawn("exec 2>/dev/null 100<&#{rd.to_i} || exit 1", rd.to_i => :close)
97
+ pid = _spawn("exec 2>/dev/null 100<&#{rd.posix_fileno} || exit 1", rd.posix_fileno => :close)
98
98
  assert_process_exit_status pid, 1
99
99
 
100
100
  assert !rd.closed?
@@ -105,7 +105,7 @@ module SpawnImplementationTests
105
105
 
106
106
  def test_spawn_close_option_with_io_object
107
107
  rd, wr = IO.pipe
108
- pid = _spawn("exec 2>/dev/null 100<&#{rd.to_i} || exit 1", rd => :close)
108
+ pid = _spawn("exec 2>/dev/null 100<&#{rd.posix_fileno} || exit 1", rd => :close)
109
109
  assert_process_exit_status pid, 1
110
110
 
111
111
  assert !rd.closed?
@@ -123,7 +123,7 @@ module SpawnImplementationTests
123
123
 
124
124
  def test_spawn_closing_multiple_fds_with_array_keys
125
125
  rd, wr = IO.pipe
126
- pid = _spawn("exec 2>/dev/null 101>&#{wr.to_i} || exit 1", [rd, wr, :out] => :close)
126
+ pid = _spawn("exec 2>/dev/null 101>&#{wr.posix_fileno} || exit 1", [rd, wr, :out] => :close)
127
127
  assert_process_exit_status pid, 1
128
128
  ensure
129
129
  [rd, wr].each { |fd| fd.close rescue nil }
@@ -145,7 +145,7 @@ module SpawnImplementationTests
145
145
 
146
146
  def test_spawn_redirect_fds_with_fd_numbers
147
147
  rd, wr = IO.pipe
148
- pid = _spawn("echo", "hello world", 1 => wr.fileno, rd.fileno => :close)
148
+ pid = _spawn("echo", "hello world", 1 => wr.posix_fileno, rd.posix_fileno => :close)
149
149
  wr.close
150
150
  output = rd.read
151
151
  assert_process_exit_ok pid
@@ -181,7 +181,7 @@ module SpawnImplementationTests
181
181
  # have to pass it explicitly as fd => fd.
182
182
  def test_explicitly_passing_an_fd_as_open
183
183
  rd, wr = IO.pipe
184
- pid = _spawn("exec 101>&#{wr.to_i} || exit 1", wr => wr)
184
+ pid = _spawn("exec 101>&#{wr.posix_fileno} || exit 1", wr => wr)
185
185
  assert_process_exit_ok pid
186
186
  ensure
187
187
  [rd, wr].each { |fd| fd.close rescue nil }
@@ -6,24 +6,24 @@ class SystemTest < Test::Unit::TestCase
6
6
 
7
7
  def test_system
8
8
  ret = system("true")
9
- assert_equal ret, true
10
- assert_equal $?.exitstatus, 0
9
+ assert_equal true, ret
10
+ assert_equal 0, $?.exitstatus
11
11
  end
12
12
 
13
13
  def test_system_nonzero
14
14
  ret = system("false")
15
- assert_equal ret, false
16
- assert_equal $?.exitstatus, 1
15
+ assert_equal false, ret
16
+ assert_equal 1, $?.exitstatus
17
17
  end
18
18
 
19
19
  def test_system_nonzero_via_sh
20
20
  ret = system("exit 1")
21
- assert_equal ret, false
22
- assert_equal $?.exitstatus, 1
21
+ assert_equal false, ret
22
+ assert_equal 1, $?.exitstatus
23
23
  end
24
24
 
25
25
  def test_system_failure
26
26
  ret = system("nosuch")
27
- assert_equal ret, false
27
+ assert_equal false, ret
28
28
  end
29
29
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posix-spawn
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 5
10
- version: 0.3.5
9
+ - 6
10
+ version: 0.3.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Tomayko
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-03-25 00:00:00 -07:00
19
+ date: 2011-04-19 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  requirements: []
98
98
 
99
99
  rubyforge_project:
100
- rubygems_version: 1.5.2
100
+ rubygems_version: 1.4.2
101
101
  signing_key:
102
102
  specification_version: 3
103
103
  summary: posix_spawnp(2) for ruby