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)