Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't fully require rubygems from rubygems/package to prevent some circular require warnings when using Bundler #7612

Merged
merged 1 commit into from Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 12 additions & 0 deletions bundler/spec/runtime/setup_spec.rb
Expand Up @@ -767,6 +767,18 @@ def clean_load_path(lp)
expect(err).to be_empty
end

it "can require rubygems without warnings, when using a local cache", rubygems: ">= 3.5.10" do
install_gemfile <<-G
source "#{file_uri_for(gem_repo1)}"
gem "rack"
G

bundle "package"
bundle %(exec ruby -w -e "require 'rubygems'")

expect(err).to be_empty
end

context "when the user has `MANPATH` set", :man do
before { ENV["MANPATH"] = "/foo#{File::PATH_SEPARATOR}" }

Expand Down
156 changes: 79 additions & 77 deletions lib/rubygems/deprecate.rb
Expand Up @@ -69,99 +69,101 @@
# end
# end

module Gem::Deprecate
simi marked this conversation as resolved.
Show resolved Hide resolved
def self.skip # :nodoc:
@skip ||= false
end
module Gem
module Deprecate
def self.skip # :nodoc:
@skip ||= false
end

def self.skip=(v) # :nodoc:
@skip = v
end
def self.skip=(v) # :nodoc:
@skip = v
end

##
# Temporarily turn off warnings. Intended for tests only.
##
# Temporarily turn off warnings. Intended for tests only.

def skip_during
original = Gem::Deprecate.skip
Gem::Deprecate.skip = true
yield
ensure
Gem::Deprecate.skip = original
end
def skip_during
original = Gem::Deprecate.skip
Gem::Deprecate.skip = true
yield
ensure
Gem::Deprecate.skip = original
end

def self.next_rubygems_major_version # :nodoc:
Gem::Version.new(Gem.rubygems_version.segments.first).bump
end
def self.next_rubygems_major_version # :nodoc:
Gem::Version.new(Gem.rubygems_version.segments.first).bump
end

##
# Simple deprecation method that deprecates +name+ by wrapping it up
# in a dummy method. It warns on each call to the dummy method
# telling the user of +repl+ (unless +repl+ is :none) and the
# year/month that it is planned to go away.
##
# Simple deprecation method that deprecates +name+ by wrapping it up
# in a dummy method. It warns on each call to the dummy method
# telling the user of +repl+ (unless +repl+ is :none) and the
# year/month that it is planned to go away.

def deprecate(name, repl, year, month)
class_eval do
old = "_deprecated_#{name}"
alias_method old, name
define_method name do |*args, &block|
klass = is_a? Module
target = klass ? "#{self}." : "#{self.class}#"
msg = [
"NOTE: #{target}#{name} is deprecated",
repl == :none ? " with no replacement" : "; use #{repl} instead",
format(". It will be removed on or after %4d-%02d.", year, month),
"\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
]
warn "#{msg.join}." unless Gem::Deprecate.skip
send old, *args, &block
def deprecate(name, repl, year, month)
class_eval do
old = "_deprecated_#{name}"
alias_method old, name
define_method name do |*args, &block|
klass = is_a? Module
target = klass ? "#{self}." : "#{self.class}#"
msg = [
"NOTE: #{target}#{name} is deprecated",
repl == :none ? " with no replacement" : "; use #{repl} instead",
format(". It will be removed on or after %4d-%02d.", year, month),
"\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
]
warn "#{msg.join}." unless Gem::Deprecate.skip
send old, *args, &block
end
ruby2_keywords name if respond_to?(:ruby2_keywords, true)
end
ruby2_keywords name if respond_to?(:ruby2_keywords, true)
end
end

##
# Simple deprecation method that deprecates +name+ by wrapping it up
# in a dummy method. It warns on each call to the dummy method
# telling the user of +repl+ (unless +repl+ is :none) and the
# Rubygems version that it is planned to go away.
##
# Simple deprecation method that deprecates +name+ by wrapping it up
# in a dummy method. It warns on each call to the dummy method
# telling the user of +repl+ (unless +repl+ is :none) and the
# Rubygems version that it is planned to go away.

def rubygems_deprecate(name, replacement=:none)
class_eval do
old = "_deprecated_#{name}"
alias_method old, name
define_method name do |*args, &block|
klass = is_a? Module
target = klass ? "#{self}." : "#{self.class}#"
msg = [
"NOTE: #{target}#{name} is deprecated",
replacement == :none ? " with no replacement" : "; use #{replacement} instead",
". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}",
"\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
]
warn "#{msg.join}." unless Gem::Deprecate.skip
send old, *args, &block
def rubygems_deprecate(name, replacement=:none)
class_eval do
old = "_deprecated_#{name}"
alias_method old, name
define_method name do |*args, &block|
klass = is_a? Module
target = klass ? "#{self}." : "#{self.class}#"
msg = [
"NOTE: #{target}#{name} is deprecated",
replacement == :none ? " with no replacement" : "; use #{replacement} instead",
". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}",
"\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
]
warn "#{msg.join}." unless Gem::Deprecate.skip
send old, *args, &block
end
ruby2_keywords name if respond_to?(:ruby2_keywords, true)
end
ruby2_keywords name if respond_to?(:ruby2_keywords, true)
end
end

# Deprecation method to deprecate Rubygems commands
def rubygems_deprecate_command(version = Gem::Deprecate.next_rubygems_major_version)
class_eval do
define_method "deprecated?" do
true
end
# Deprecation method to deprecate Rubygems commands
def rubygems_deprecate_command(version = Gem::Deprecate.next_rubygems_major_version)
class_eval do
define_method "deprecated?" do
true
end

define_method "deprecation_warning" do
msg = [
"#{command} command is deprecated",
". It will be removed in Rubygems #{version}.\n",
]
define_method "deprecation_warning" do
msg = [
"#{command} command is deprecated",
". It will be removed in Rubygems #{version}.\n",
]

alert_warning msg.join.to_s unless Gem::Deprecate.skip
alert_warning msg.join.to_s unless Gem::Deprecate.skip
end
end
end
end

module_function :rubygems_deprecate, :rubygems_deprecate_command, :skip_during
module_function :rubygems_deprecate, :rubygems_deprecate_command, :skip_during
end
end
1 change: 0 additions & 1 deletion lib/rubygems/package.rb
Expand Up @@ -7,7 +7,6 @@

# rubocop:enable Style/AsciiComments

require_relative "../rubygems"
require_relative "security"
require_relative "user_interaction"

Expand Down