On Sun, Oct 9, 2022 at 6:43 AM Mamoru TASAKA <mtas...@fedoraproject.org> wrote:
>
> Hello, subversion developers:
>
> Now Fedora 38 is preparing for upcoming ruby 3.2 (which is expected to be 
> released
> on 2022/Dec), and current subversion fails for test suite for ruby like:
>
> ===============================================================================
> Error: test_adm_ensure(SvnWcTest): NoMethodError: undefined method `exists?' 
> for File:Class
> /builddir/build/BUILD/subversion-1.14.2/subversion/bindings/swig/ruby/test/test_wc.rb:345:in
>  `test_adm_ensure'
>       342:
>       343:   def test_adm_ensure
>       344:     adm_dir = Dir.glob(File.join(@wc_path, "{.,_}svn")).first
>    => 345:     assert(File.exists?(adm_dir))
>       346:     FileUtils.rm_rf(adm_dir)
>       347:     assert(!File.exists?(adm_dir))
>       348:     Svn::Wc.ensure_adm(@wc_path, @fs.uuid, @repos_uri, @repos_uri, 
> 0)
> /builddir/build/BUILD/subversion-1.14.2/subversion/bindings/swig/ruby/test/test-unit-ext/priority.rb:115:in
>  `run'
> ===============================================================================
>
> Error: test_delete(SvnWcTest): NoMethodError: undefined method `exists?' for 
> File:Class
> Error: test_switch_editor(SvnWcTest): NoMethodError: undefined method 
> `exists?' for File:Class
> Error: test_update_editor(SvnWcTest): NoMethodError: undefined method 
> `exists?' for File:Class
> Error: test_update_editor_options(SvnWcTest): NoMethodError: undefined method 
> `exists?' for File:Class
>
> Ruby 3.2 now completely removes "File.exists?" which were already obsoleted 
> on ruby 2.1.
> Just replacing with "File.exist?" should fix these errors.
>
> https://github.com/ruby/ruby/blob/6378825df5c7abc7ef45f257057ffd21dc9e63b5/NEWS.md?plain=1#L248
> https://bugs.ruby-lang.org/issues/17391
> https://docs.ruby-lang.org/en/3.1/File.html#method-c-exist-3F
>
> The targets which need fixing are:
> ===============================================================================
> ./subversion/bindings/swig/ruby/test/test_wc.rb:345:    
> assert(File.exists?(adm_dir))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:347:    
> assert(!File.exists?(adm_dir))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:349:    
> assert(File.exists?(adm_dir))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:477:      
> assert(File.exists?(path))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:481:      
> assert(!File.exists?(path))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:485:      
> assert(File.exists?(path))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:489:      
> assert(File.exists?(path))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:811:        
> assert(File.exists?(path2))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:813:        
> assert(!File.exists?(path2))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:851:        
> assert(File.exists?(path2))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:853:        
> assert(!File.exists?(path2))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:949:        
> assert(File.exists?(path1))
> ./subversion/bindings/swig/ruby/test/test_wc.rb:951:        
> assert(File.exists?(File.join(@wc_path, file2)))
> ./subversion/bindings/swig/ruby/test/windows_util.rb:118:            
> File.read(gen_make_opts).lines.to_a if File.exists?(gen_make_opts)
> ./subversion/bindings/swig/ruby/svn/util.rb:23:    if 
> File.exists?(svn_ext_path)
> ===============================================================================
>
> Regards,
> Mamoru TASAKA <mtas...@fedoraproject.org>


Thank you for the report.

Committed in r1904472.

And nominated for backport to 1.14.x in r1904473.

I'm also attaching it as a patch. Please could you verify it fixes the
issue for you and let us know?

The swig-rb checks pass on trunk and 1.14.2 with this patch applied.
I tested with Ruby 2.4.

Based on configure.ac, it looks like we support Ruby 1.8.x and up
(except between 1.9 and 1.9.3). `File.exist?' is implemented as far
back as Ruby 1.8.0 (and `File.exists?` is marked "temporary" in a
source comment in Ruby 1.8.0 [1]), so it looks like this patch
shouldn't affect our support for older Ruby versions. (Ruby 2.6 and
older are marked as "outdated" [2]).

[1] https://github.com/ruby/ruby/blob/v1_8_0/file.c#L2855

[2] https://docs.ruby-lang.org/en/

Cheers,
Nathan
Index: subversion/bindings/swig/ruby/svn/util.rb
===================================================================
--- subversion/bindings/swig/ruby/svn/util.rb   (revision 1904471)
+++ subversion/bindings/swig/ruby/svn/util.rb   (working copy)
@@ -20,7 +20,7 @@
 if /cygwin|mingw|mswin32|bccwin32/.match(RUBY_PLATFORM)
   $LOAD_PATH.each do |load_path|
     svn_ext_path = File.join(load_path, "svn", "ext")
-    if File.exists?(svn_ext_path)
+    if File.exist?(svn_ext_path)
       svn_ext_path_win = File.expand_path(svn_ext_path)
       svn_ext_path_win = svn_ext_path.gsub(File::SEPARATOR, 
File::ALT_SEPARATOR)
       unless ENV["PATH"].split(";").find {|path| path == svn_ext_path_win}
Index: subversion/bindings/swig/ruby/test/test_wc.rb
===================================================================
--- subversion/bindings/swig/ruby/test/test_wc.rb       (revision 1904471)
+++ subversion/bindings/swig/ruby/test/test_wc.rb       (working copy)
@@ -342,11 +342,11 @@
 
   def test_adm_ensure
     adm_dir = Dir.glob(File.join(@wc_path, "{.,_}svn")).first
-    assert(File.exists?(adm_dir))
+    assert(File.exist?(adm_dir))
     FileUtils.rm_rf(adm_dir)
-    assert(!File.exists?(adm_dir))
+    assert(!File.exist?(adm_dir))
     Svn::Wc.ensure_adm(@wc_path, @fs.uuid, @repos_uri, @repos_uri, 0)
-    assert(File.exists?(adm_dir))
+    assert(File.exist?(adm_dir))
   end
 
   def test_merge
@@ -474,19 +474,19 @@
       ctx.add(path)
       ctx.ci(@wc_path).revision
 
-      assert(File.exists?(path))
+      assert(File.exist?(path))
       Svn::Wc::AdmAccess.open(nil, @wc_path, true, 5) do |access|
         access.delete(path)
       end
-      assert(!File.exists?(path))
+      assert(!File.exist?(path))
 
       ctx.revert(path)
 
-      assert(File.exists?(path))
+      assert(File.exist?(path))
       Svn::Wc::AdmAccess.open(nil, @wc_path, true, 5) do |access|
         access.delete(path, nil, nil, true)
       end
-      assert(File.exists?(path))
+      assert(File.exist?(path))
     end
   end
 
@@ -808,9 +808,9 @@
         ctx.add(path2)
         rev2 = ctx.commit(@wc_path).revision
 
-        assert(File.exists?(path2))
+        assert(File.exist?(path2))
         assert_equal(0, ctx.up(@wc_path, 0))
-        assert(!File.exists?(path2))
+        assert(!File.exist?(path2))
         Svn::Wc::AdmAccess.open(nil, @wc_path) do |access|
           editor = access.update_editor('', 0)
           assert_equal(0, editor.target_revision)
@@ -848,9 +848,9 @@
         ctx.add(path2)
         rev2 = ctx.commit(@wc_path).revision
 
-        assert(File.exists?(path2))
+        assert(File.exist?(path2))
         assert_equal(0, ctx.up(@wc_path, 0))
-        assert(!File.exists?(path2))
+        assert(!File.exist?(path2))
         notification_count = 0
         Svn::Wc::AdmAccess.open(nil, @wc_path) do |access|
           notify_func = Proc.new {|n| notification_count += 1}
@@ -946,9 +946,9 @@
         ctx.add(dir2_path)
         rev2 = ctx.commit(@wc_path).revision
 
-        assert(File.exists?(path1))
+        assert(File.exist?(path1))
         assert_equal(rev2, ctx.switch(@wc_path, dir2_uri))
-        assert(File.exists?(File.join(@wc_path, file2)))
+        assert(File.exist?(File.join(@wc_path, file2)))
         Svn::Wc::AdmAccess.open_anchor(@wc_path) do |access, dir_access, 
target|
           editor = dir_access.switch_editor('', dir1_uri, rev2)
           assert_equal(rev2, editor.target_revision)
Index: subversion/bindings/swig/ruby/test/windows_util.rb
===================================================================
--- subversion/bindings/swig/ruby/test/windows_util.rb  (revision 1904471)
+++ subversion/bindings/swig/ruby/test/windows_util.rb  (working copy)
@@ -115,7 +115,7 @@
           lines = []
           gen_make_opts = File.join(@@top_dir, "gen-make.opts")
           lines =
-            File.read(gen_make_opts).lines.to_a if File.exists?(gen_make_opts)
+            File.read(gen_make_opts).lines.to_a if File.exist?(gen_make_opts)
           config = Hash.new do |hash, key|
             if /^--with-(.*)$/ =~ key
               hash[key] = File.join(@@top_dir, $1)

Reply via email to