Project

General

Profile

Actions

Bug #19158

closed

Ruby 3.1.3 installs wrong gemspec for debug gem

Added by deivid (David Rodríguez) almost 2 years ago. Updated over 1 year ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [arm64-darwin22]
[ruby-core:111053]

Description

A pristine installation of Ruby 3.1.3 shows an installed debug-1.6.3.gemspec file that claims that debug-1.6.3 has no dependencies. This is incorrect, and causes issues for Bundler as reported at https://github.com/rubygems/rubygems/issues/6082.

An issue workaround is to manually reinstall the gem with gem install debug:1.6.3. That will reinstall the gem, including a correct gemspec file.

This is the file diff before and after reinstalling the gem

--- old.gemspec	2022-11-29 13:54:36
+++ /Users/deivid/.asdf/installs/ruby/3.1.3/lib/ruby/gems/3.1.0/specifications/debug-1.6.3.gemspec	2022-11-29 13:55:25
@@ -24,4 +24,16 @@
   s.summary = "Debugging functionality for Ruby".freeze
 
   s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version
+
+  if s.respond_to? :specification_version then
+    s.specification_version = 4
+  end
+
+  if s.respond_to? :add_runtime_dependency then
+    s.add_runtime_dependency(%q<irb>.freeze, [">= 1.3.6"])
+    s.add_runtime_dependency(%q<reline>.freeze, [">= 0.3.1"])
+  else
+    s.add_dependency(%q<irb>.freeze, [">= 1.3.6"])
+    s.add_dependency(%q<reline>.freeze, [">= 0.3.1"])
+  end
 end

In general, the files installed by ruby-core for bundled gems should be identical to the ones installed by explicit gem install.

This issue is also present in master and I'm guessing it was introduced by https://github.com/ruby/ruby/commit/a2c66f52f402cb58372e271226f3341065561e53 (backported at https://github.com/ruby/ruby/commit/2d26e45135af8b427d9ccc6d47082c21be8b9c74).


Related issues 1 (1 open0 closed)

Related to Ruby master - Feature #13620: Simplifying MRI's build system: always make installOpenActions
Actions #1

Updated by nagachika (Tomoyuki Chikanaga) almost 2 years ago

  • Backport changed from 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN to 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) almost 2 years ago

Hello,
Thank you for the report.
nobu told me that the current master branch doesn't have the issue.
I will looking for the relevant commits and backport them.

Updated by deivid (David Rodríguez) almost 2 years ago

Just to clarify, the current master branch of Bundler is indeed not affected by this issue, but that's just "luck". I'm adding a spec on our side to make sure it stays like that, but the ruby-core issue is still there and I suspect it could bite us in other ways.

Updated by deivid (David Rodríguez) almost 2 years ago

Hi again @nagachika (Tomoyuki Chikanaga).

I was double checking this, because I thought you probably meant "master branch of Ruby" and not "master branch of Bundler". I assumed the bug is present in both the master branch of Ruby and ruby_3_1 because the suspicious commit is present in both branches, but I tried to reproduce this issue in both branches and I couldn't. The installed gemspec (after configure, make, make install) seems correct on both.

So I'm not sure why this is happening with Ruby 3.1.3 tarball.

Actions #5

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to nagachika (Tomoyuki Chikanaga)

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

@deivid (David Rodríguez) @nagachika (Tomoyuki Chikanaga) did backport the installer toolchain like rbinstall.rb into ruby_3_1 branch for releasing Ruby 3.1.3. Maybe, this issue contained its time.

Updated by deivid (David Rodríguez) almost 2 years ago

People are still hitting issues here due to an incorrect gemspec for the debug gem being shipped with Ruby 3.2.1 so I guess this is not yet fixed. See https://github.com/ruby/debug/issues/898 or https://github.com/ruby/debug/issues/852.

Actions #8

Updated by Eregon (Benoit Daloze) almost 2 years ago

  • Related to Feature #13620: Simplifying MRI's build system: always make install added

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

  • Assignee changed from nagachika (Tomoyuki Chikanaga) to hsbt (Hiroshi SHIBATA)
  • Backport changed from 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: REQUIRED to 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: REQUIRED

I can reproduce this issue with current master branch.

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

This issue caused by https://git.ruby-lang.org/ruby.git/tree/tool/lib/bundled_gem.rb#n53.

    unless spec.extensions.empty?
      spec.dependencies.clear
      File.binwrite(File.join(dir, spec_dir, ".bundled.#{target}.gemspec"), spec.to_ruby)
    end

We removed dependencies of debug gem for testing from gemspec temporally. After that, We re-use this modified gemspec for installation.

I confirmed to keep dependencies of debug gem with the following patch.

diff --git tool/rbinstall.rb tool/rbinstall.rb
index 85d05eff251..97e1a47fbae 100755
--- tool/rbinstall.rb
+++ tool/rbinstall.rb
@@ -1027,9 +1027,12 @@ def install_default_gem(dir, srcdir, bindir)
     next if /^\s*(?:#|$)/ =~ name
     next unless /^(\S+)\s+(\S+).*/ =~ name
     gem_name = "#$1-#$2"
-    path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec"
+    # Try to find the gemspec file for C ext gems
+    # ex .bundle/gems/debug-1.7.1/debug-1.7.1.gemspec
+    # This gemspec keep the original dependencies
+    path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec"
     unless File.exist?(path)
-      path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec"
+      path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec"
       unless File.exist?(path)
          skipped[gem_name] = "gemspec not found"
          next
--

https://github.com/ruby/ruby/pull/7321

Updated by hsbt (Hiroshi SHIBATA) over 1 year ago

  • Backport changed from 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: REQUIRED, 3.2: REQUIRED to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: REQUIRED, 3.2: REQUIRED

I submitted pull-requests for Ruby 3.1 and 3.2.

In my investigation, this issue only happened in-place build with ruby package.

Actions #12

Updated by hsbt (Hiroshi SHIBATA) over 1 year ago

  • Status changed from Assigned to Closed

Updated by nagachika (Tomoyuki Chikanaga) over 1 year ago

  • Backport changed from 2.7: DONTNEED, 3.0: DONTNEED, 3.1: REQUIRED, 3.2: REQUIRED to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONE, 3.2: REQUIRED

Merged the pull request for ruby_3_1 https://github.com/ruby/ruby/pull/7355.

Actions #14

Updated by hsbt (Hiroshi SHIBATA) over 1 year ago

  • Backport changed from 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONE, 3.2: REQUIRED to 2.7: DONTNEED, 3.0: DONTNEED, 3.1: DONE, 3.2: DONE
Actions

Also available in: Atom PDF

Like3
Like0Like0Like0Like0Like0Like1Like0Like0Like0Like0Like0Like0Like0Like0