posix-spawn 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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