path: root/lib/rubygems.rb
AgeCommit message (Collapse)Author
2021-07-07Sync RubyGems and Bundler with upstreamHiroshi SHIBATA
Notes: Merged:
2021-05-11Sync bundler & rubygemsDavid Rodríguez
Notes: Merged:
2021-04-15Merge the master branch of RubyGemsHiroshi SHIBATA
Notes: Merged:
2021-03-08Sync latest development version of bundler & rubygemsDavid Rodríguez
Notes: Merged:
2021-01-04Track RubyGems master( branch at ↵Hiroshi SHIBATA
55634a8af18a52df86c4275d70fa1179118bcc20 Notes: Merged:
2020-12-23Merge RubyGems 3.2.3 and Bundler 2.2.3Hiroshi SHIBATA
Notes: Merged:
2020-12-18Merge RubyGems 3.2.2 and Bundler 2.2.2Hiroshi SHIBATA
Notes: Merged:
2020-12-15Prepare to release rubygems-3.2.1 and bundler-2.2.1Hiroshi SHIBATA
Notes: Merged:
2020-12-08Merge prepare version of RubyGems 3.2.0Hiroshi SHIBATA
Notes: Merged:
2020-10-15Merge rubygems-3.2.0.rc.2Hiroshi SHIBATA
Notes: Merged:
2020-09-23Revert "Manually merged from"Hiroshi SHIBATA
31a6eaabc165d8a222e176f2c809d90622d88ec2 is obsoleted with
2020-09-23Manually merged from SHIBATA
Enable Style/EmptyLinesAroundClassBody rubocop cop.
2020-07-31[rubygems/rubygems] Remove unnecessary guard clauseDavid Rodríguez
Since 1ccf0912a161d20e0c4a7b139fd76e8739a411ba, this method no longer uses `Kernel.gem`, so this guard clause is now unnecessary. Notes: Merged:
2020-07-31[rubygems/rubygems] Optimize Gem.already_loaded?Jean Boussier
Profiling a simple `ruby -e '1'` I see: ``` ================================== Mode: wall(10) Samples: 3414 (55.10% miss rate) GC: 856 (25.07%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 689 (20.2%) 669 (19.6%) Gem.already_loaded? 462 (13.5%) 462 (13.5%) (marking) 393 (11.5%) 393 (11.5%) (sweeping) 815 (23.9%) 365 (10.7%) Gem::Specification.load 1050 (30.8%) 156 (4.6%) Gem.register_default_spec 100 (2.9%) 84 (2.5%) Gem::Specification#files 64 (1.9%) 64 (1.9%) Gem::BasicSpecification#internal_init 136 (4.0%) 59 (1.7%) <top (required)> 2312 (67.7%) 58 (1.7%) <top (required)> 57 (1.7%) 57 (1.7%) RbConfig.expand 81 (2.4%) 55 (1.6%) Gem::Requirement.parse 191 (5.6%) 51 (1.5%) <top (required)> 128 (3.7%) 47 (1.4%) Gem::Requirement#initialize 41 (1.2%) 41 (1.2%) Gem.suffix_regexp 229 (6.7%) 35 (1.0%) <module:Gem> 260 (7.6%) 34 (1.0%) Kernel#require ``` So clearly `Gem.already_loaded?` is a major hotspot. After this optimization, it's down to: ``` ================================== Mode: wall(10) Samples: 2653 (58.21% miss rate) GC: 718 (27.06%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 416 (15.7%) 416 (15.7%) (marking) 715 (27.0%) 312 (11.8%) Gem::Specification.load 299 (11.3%) 299 (11.3%) (sweeping) 279 (10.5%) 279 (10.5%) Gem.already_loaded? 564 (21.3%) 106 (4.0%) Gem.register_default_spec 95 (3.6%) 80 (3.0%) Gem::Specification#files 72 (2.7%) 72 (2.7%) Gem::BasicSpecification#internal_init 129 (4.9%) 58 (2.2%) <top (required)> 53 (2.0%) 53 (2.0%) RbConfig.expand 1697 (64.0%) 52 (2.0%) <top (required)> 68 (2.6%) 49 (1.8%) Gem::Requirement.parse 183 (6.9%) 48 (1.8%) <top (required)> 112 (4.2%) 44 (1.7%) Gem::Requirement#initialize 220 (8.3%) 33 (1.2%) <module:Gem> 250 (9.4%) 32 (1.2%) Kernel#require ``` The idea is that the vast majority of the time `already_loaded?` won't match anything. So by first looking for candidate paths that `end_with?` the file we look for, we save `default_gem_load_paths.size` iterations and string concatenations. Notes: Merged:
2020-07-31Bump version to 3.2.0.rc.1Hiroshi SHIBATA
Notes: Merged:
2020-07-31[rubygems/rubygems] remove explicit require(s) for auto-loaded constant(s)Karol Bucek
the Gem module's auto-loads will handle loading these as needed, this started as a redundancy found in *rubygems.rb* which had: `autoload :Specification, 'rubygems/specification'` as well as `require 'rubygems/specification'` Notes: Merged:
2020-07-31Enforce no empty lines around class body in rubygemsDavid Rodríguez
To normalize the code style with `bundler`. Notes: Merged:
2020-06-15Add Gem.disable_system_update_message to disable gem update --system if needed.Josef Šimánek
Notes: Merged:
2020-06-15Remove modelines for consistencyDavid Rodríguez
No other files in the repo include this. Notes: Merged:
2020-06-15Use space inside block braces everywhereDavid Rodríguez
To make rubygems code style consistent with bundler. Notes: Merged:
2020-06-05[rubygems/rubygems] Respect files loaded from default gems before rubygemsDavid Rodríguez Notes: Merged:
2020-06-05[rubygems/rubygems] Refactor `Gem.load_path_insert_index`David Rodríguez Notes: Merged:
2020-06-05[rubygems/rubygems] Fix performance regression in `require`David Rodríguez
Our check for `-I` paths should not go through all activated gems. Notes: Merged:
2020-06-05[rubygems/rubygems] Remove explicit `psych` activationDavid Rodríguez
We don't need to explictly activate `psych` since `require` will take care of that automatically. We don't need to care about a minimum version either since the oldest ruby we support at the moment ships with a `psych` version higher than 2.0.0. Notes: Merged:
2020-05-08[rubygems/rubygems] Fix incorrect bundler version being requiredDavid Rodríguez
In ruby 2.7.0, there's a slight change in bundler's default gemspec file where the executable folder of the bundler gem is `libexec` instead of `exe`. I made that change in to try to simplify the integration of the `bundler` gem with upstream, minimizing the number of changes that need to be made to the gemspec to adapt to the structure of ruby-core. That worked ok, expected for this issue. The new name of the folder including the executable files uncovered a bug in rubygems, which is the following: * In order to be able to use newer versions of default gems, `rubygems` ships with a customized `require` that has knowledge about which files belong to which default gem. If one of these files is required, `rubygems` will detect that and activate its gem mechanism to choose the newest version of the corresponding default gem present in the system (unless a different version has already been activated). It's this part of the custom require: * In order to do that, `rubygems` registers a map of default gems and their files when it is first required: As explained in the method's header, two types of default gem specifications are supported. One of the formats is the style used by some ruby-core gemspec files, where paths inside the `spec.files` array don't include the `spec.require_paths` part. So in this "old style", if a gem ships with a `lib/bundler.rb` file, it will be registered in this array as `spec.files = ["bundler.rb"]`, not as `spec.files = ["lib/bundler.rb"]`. The `Gem.register_default_spec` method "detects" this style by making sure that none of the files in the `spec.files` array start with any of the `spec.require_paths`. * Since in ruby 2.7 the default specification file of the `bundler` gem includes a `libexec/bundle` file, this check would no longer work correctly, because even though the specification file is still "old style", it has one registered file which starts with "lib", one of the "require paths" of the gem. * This means that the gem is incorrectly detected as "new style", but since none of the paths start with "lib/", no files are actually registered, so the gem is not being considered a default gem, and thus the default version is always used with no possibility of being "upgraded". The fix of the problem is simple: check that no files start with `lib/` (or any other require paths), instead of with "lib" which doesn't exclude other potential "non requirable folder" starting with lib, like in the `bundler` case. Notes: Merged:
2020-05-08[rubygems/rubygems] Extract logic to a local variable for later reuseDavid Rodríguez Notes: Merged:
2020-05-08Normalize heredoc case in rubygems code baseDavid Rodríguez
Notes: Merged:
2020-05-08[rubygems/rubygems] Autoload name_tuple.rb before useOlle Jonsson
- Resolver asked Molinillo to resolve-then-activate, which led to using Gem::NameTuple before any require had been passed Co-authored-by: David Rodríguez <> Notes: Merged:
2020-05-08[rubygems/rubygems] Update minitest version in `Gem.install` docsDavid Rodríguez Notes: Merged:
2020-04-23Support XDG_* (#2174)Hiroshi SHIBATA
* Support XDG_CONFIG_HOME for gemrc. * Support XDG_DATA_HOME for .gem * Added test for XDG_DATA_HOME * Do not reuse environmental variable. * Unify .rdoc path to RDoc.home. * Support XDG_DATA_HOME for .rdoc * Ignore exists? * Extracted config_home path * Use XDG_CONFIG_HOME for default credential path * Fixed inconsistency location. * Fixed the broken tests. * Support XDG_CONFIG_HOME for irbrc * Introduce Gem.cache_home as XDG_CACHE_HOME * Use Gem.cache_home instead of Gem.config_home for the credential file of RubyGems. * Initialized the old configurations * Fixed test failure related the configuration initialization * restore XDG_DATA_HOME * Fixed the broken examples of bundler with XDG_* * Do not modify environmental variable on test file * Use XDG_DATA_HOME insted of XDG_CACHE_HOME for credential file * stub out Gem.data_home * Move dir accessor to defaults.rb file * Use XDG_DATA_HOME for signed gem features * Use XDG_DATA_HOME for spec cache * Do not rely on Gem.user_home * Gem.user_home is always exists. Don't need to use FileUitls.mkdir_p * Bump support version to RubyGems 3.2.0+ * Removed the needless fallback configuration * Fixed the inconsistency methods that are find_config_file and config_file * Use Gem.configuration.credentials_path instead of hard-coded path * gem_path is always provided * Removed the duplicated code of find_home * Also removed the duplicated code of user_home * use Gem::UNTAINT instead of untaint for surpressing the warnings * Use * Restore XDG_DATA_HOME * Use File.write Notes: Merged-By: hsbt <>
2020-03-30[rubygems/rubygems] Enable Style/PercentLiteralDelimiters cop in rubygemsDavid Rodríguez
So it matches the style used by bundler.
2020-03-24Sync rubygems with current master (#2889)David Rodríguez
Notes: Merged-By: hsbt <>
2020-02-01Merge the current master branch of rubygems/rubygems.Hiroshi SHIBATA
Just started to develop RubyGems 3.2.0.
2019-12-20Merge RubyGems 3.1.2Hiroshi SHIBATA
2019-12-16Merge RubyGems 3.1.1 and update the NEWS entry for RubyGemsHiroshi SHIBATA
2019-12-15Prepare to release rubygems-3.1.0Hiroshi SHIBATA
2019-12-13Prepare to release RubyGems 3.1.0 final version.Hiroshi SHIBATA
2019-11-13Merge released version of RubyGems 3.1.0.pre3Hiroshi SHIBATA
2019-11-12lib/rubygems.rb: Suppress "Resolving dependencies..."Yusuke Endoh
And suppress "Leaked file descriptor" again.
2019-11-11Merge RubyGems 3.1.0.pre3Hiroshi SHIBATA
* Fix gem pristine not accounting for user installed gems. Pull request #2914 by Luis Sagastume. * Refactor keyword argument test for Ruby 2.7. Pull request #2947 by SHIBATA Hiroshi. * Fix errors at frozen Gem::Version. Pull request #2949 by Nobuyoshi Nakada. * Remove taint usage on Ruby 2.7+. Pull request #2951 by Jeremy Evans. * Check Manifest.txt is up to date. Pull request #2953 by David Rodríguez. * Clarify symlink conditionals in tests. Pull request #2962 by David Rodríguez. * Update command line parsing to work under ps. Pull request #2966 by David Rodríguez. * Properly test `Gem::Specifications.stub_for`. Pull request #2970 by David Rodríguez. * Fix Gem::LOADED_SPECS_MUTEX handling for recursive locking. Pull request #2985 by MSP-Greg. Notes: Merged:
2019-10-15[rubygems/rubygems] Bump version to 3.1.0.pre2Hiroshi SHIBATA
2019-09-26[rubygems/rubygems] Set SOURCE_DATE_EPOCH env var if not provided.Ellen Marie Dash
Fixes #2290. 1. `` returns SOURCE_DATE_EPOCH when defined, 2. this commit makes RubyGems set it _persistently_ when not provided. This combination means that you can build a gem, check the build time, and use that value to generate a new build -- and then verify they're the same.
2019-08-30Fix keyword argument separation issues in libJeremy Evans
Mostly requires adding ** in either calls or method definitions. Notes: Merged:
2019-08-17[rubygems/rubygems] Don't unregister default specificationsDavid Rodríguez
I think this should be more efficient?
2019-08-17[rubygems/rubygems] Fix removing unresolved default spec files from mapDavid Rodríguez
2019-08-17[rubygems/rubygems] Little refactorDavid Rodríguez
There's already a method called `suffix_pattern`, that's different from this local variable. So, move the local variable to a `suffix_regexp` that clearly differenciates from `suffix_pattern`.
2019-08-05[rubygems/rubygems] Use the standard RUBY_ENGINE_VERSION instead of ↵Benoit Daloze
JRUBY_VERSION * RUBY_ENGINE and RUBY_ENGINE_VERSION are defined on every modern Ruby. * There is no such constant as TRUFFLERUBY_VERSION or RBX_VERSION.
2019-08-05[rubygems/rubygems] Remove FIXME commentbronzdoc
2019-07-31[rubygems/rubygems] Remove missleading comment, no reason to move ↵bronzdoc
to Gem::Util
2019-06-06Revert "Stop `circular require` warning"Kazuhiro NISHIYAMA
This reverts commit c2a9c350249588677cf68b506539093504927eac. It cannot stop `circular require` warning.