On Sun, Oct 9, 2022 at 6:43 AM Mamoru TASAKA <[email protected]> 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 <[email protected]>
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)