[前][次][番号順一覧][スレッド一覧]

ruby-changes:69859

From: Hiroshi <ko1@a...>
Date: Mon, 22 Nov 2021 10:52:13 +0900 (JST)
Subject: [ruby-changes:69859] bfed3296ec (ruby_3_0): Bump io-wait version to 0.2.0

https://git.ruby-lang.org/ruby.git/commit/?id=bfed3296ec

From bfed3296ec81c2ca53e65dc3df5b0e8f1e6810ab Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
Date: Thu, 11 Nov 2021 18:12:18 +0900
Subject: Bump io-wait version to 0.2.0

---
 ext/io/wait/io-wait.gemspec           |  8 +++++---
 ext/io/wait/wait.c                    | 36 +++++++++++++++++------------------
 test/io/wait/test_io_wait_uncommon.rb | 33 ++++++++++++++++----------------
 3 files changed, 38 insertions(+), 39 deletions(-)

diff --git a/ext/io/wait/io-wait.gemspec b/ext/io/wait/io-wait.gemspec
index 1c6c2d57056..ec23699def2 100644
--- a/ext/io/wait/io-wait.gemspec
+++ b/ext/io/wait/io-wait.gemspec
@@ -1,6 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ext/io/wait/io-wait.gemspec#L1
+_VERSION = "0.2.0"
+
 Gem::Specification.new do |spec|
   spec.name          = "io-wait"
-  spec.version       = "0.1.0"
+  spec.version       = _VERSION
   spec.authors       = ["Nobu Nakada"]
   spec.email         = ["nobu@r..."]
 
@@ -8,7 +10,7 @@ Gem::Specification.new do |spec| https://github.com/ruby/ruby/blob/trunk/ext/io/wait/io-wait.gemspec#L10
   spec.description   = %q{Waits until IO is readable or writable without blocking.}
   spec.homepage      = "https://github.com/ruby/io-wait"
   spec.licenses      = ["Ruby", "BSD-2-Clause"]
-  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
+  spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
 
   spec.metadata["homepage_uri"] = spec.homepage
   spec.metadata["source_code_uri"] = spec.homepage
@@ -20,6 +22,6 @@ Gem::Specification.new do |spec| https://github.com/ruby/ruby/blob/trunk/ext/io/wait/io-wait.gemspec#L22
   end
   spec.extensions    = %w[ext/io/wait/extconf.rb]
   spec.bindir        = "exe"
-  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
+  spec.executables   = []
   spec.require_paths = ["lib"]
 end
diff --git a/ext/io/wait/wait.c b/ext/io/wait/wait.c
index c5de8967cd1..512e4f6a80d 100644
--- a/ext/io/wait/wait.c
+++ b/ext/io/wait/wait.c
@@ -211,7 +211,7 @@ wait_mode_sym(VALUE mode) https://github.com/ruby/ruby/blob/trunk/ext/io/wait/wait.c#L211
 /*
  * call-seq:
  *   io.wait(events, timeout) -> event mask or false.
- *   io.wait(timeout = nil, mode = :read) -> event mask or false (deprecated)
+ *   io.wait(timeout = nil, mode = :read) -> event mask or false.
  *
  * Waits until the IO becomes ready for the specified events and returns the
  * subset of events that become ready, or +false+ when times out.
@@ -222,34 +222,32 @@ wait_mode_sym(VALUE mode) https://github.com/ruby/ruby/blob/trunk/ext/io/wait/wait.c#L222
  * Returns +true+ immediately when buffered data is available.
  *
  * Optional parameter +mode+ is one of +:read+, +:write+, or
- * +:read_write+ (deprecated).
+ * +:read_write+.
  */
 
 static VALUE
 io_wait(int argc, VALUE *argv, VALUE io)
 {
-    VALUE timeout = Qnil;
+    VALUE timeout = Qundef;
     rb_io_event_t events = 0;
 
-    if (argc < 2 || (argc >= 2 && RB_SYMBOL_P(argv[1]))) {
-	if (argc > 0) {
-	    timeout = argv[0];
-	}
-
-	for (int i = 1; i < argc; i += 1) {
-	    events |= wait_mode_sym(argv[i]);
+    if (argc != 2 || (RB_SYMBOL_P(argv[0]) || RB_SYMBOL_P(argv[1]))) {
+	for (int i = 0; i < argc; i += 1) {
+	    if (RB_SYMBOL_P(argv[i])) {
+		events |= wait_mode_sym(argv[i]);
+	    }
+	    else if (timeout == Qundef) {
+		rb_time_interval(timeout = argv[i]);
+	    }
+	    else {
+		rb_raise(rb_eArgError, "timeout given more than once");
+	    }
 	}
+	if (timeout == Qundef) timeout = Qnil;
     }
-    else if (argc == 2) {
+    else /* argc == 2 */ {
 	events = RB_NUM2UINT(argv[0]);
-
-	if (argv[1] != Qnil) {
-	    timeout = argv[1];
-	}
-    }
-    else {
-	// TODO error
-	return Qnil;
+	timeout = argv[1];
     }
 
     if (events == 0) {
diff --git a/test/io/wait/test_io_wait_uncommon.rb b/test/io/wait/test_io_wait_uncommon.rb
index 28b4a0f8c40..b6f1c29bcd9 100644
--- a/test/io/wait/test_io_wait_uncommon.rb
+++ b/test/io/wait/test_io_wait_uncommon.rb
@@ -6,15 +6,10 @@ require 'io/wait' https://github.com/ruby/ruby/blob/trunk/test/io/wait/test_io_wait_uncommon.rb#L6
 # We may optimize IO#wait_*able for non-Linux kernels in the future
 class TestIOWaitUncommon < Test::Unit::TestCase
   def test_tty_wait
-    begin
-      tty = File.open('/dev/tty', 'w+')
-    rescue Errno::ENOENT, Errno::ENXIO => e
-      skip "/dev/tty: #{e.message} (#{e.class})"
+    check_dev('/dev/tty', mode: 'w+') do |tty|
+      assert_include [ nil, tty ], tty.wait_readable(0)
+      assert_equal tty, tty.wait_writable(1), 'portability test'
     end
-    assert_include [ nil, tty ], tty.wait_readable(0)
-    assert_equal tty, tty.wait_writable(1), 'portability test'
-  ensure
-    tty&.close
   end
 
   def test_fifo_wait
@@ -44,36 +39,40 @@ class TestIOWaitUncommon < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/io/wait/test_io_wait_uncommon.rb#L39
 
   # used to find portability problems because some ppoll implementations
   # are incomplete and do not work for certain "file" types
-  def check_dev(dev, m = :wait_readable)
+  def check_dev(dev, m = :wait_readable, mode: m == :wait_readable ? 'r' : 'w', &block)
     begin
-      fp = File.open("/dev/#{dev}", m == :wait_readable ? 'r' : 'w')
+      fp = File.open(dev, mode)
+    rescue Errno::ENOENT
+      return # Ignore silently
     rescue SystemCallError => e
       skip "#{dev} could not be opened #{e.message} (#{e.class})"
     end
-    assert_same fp, fp.__send__(m)
+    if block
+      yield fp
+    else
+      assert_same fp, fp.__send__(m)
+    end
   ensure
     fp&.close
   end
 
   def test_wait_readable_urandom
-    check_dev 'urandom'
+    check_dev('/dev/urandom')
   end
 
   def test_wait_readable_random
-    File.open('/dev/random') do |fp|
+    check_dev('/dev/random') do |fp|
       assert_nothing_raised do
         fp.wait_readable(0)
       end
     end
-  rescue SystemCallError => e
-    skip "/dev/random could not be opened #{e.message} (#{e.class})"
   end
 
   def test_wait_readable_zero
-    check_dev 'zero'
+    check_dev('/dev/zero')
   end
 
   def test_wait_writable_null
-    check_dev 'null', :wait_writable
+    check_dev(IO::NULL, :wait_writable)
   end
 end
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]