summaryrefslogtreecommitdiff
path: root/lib/rubygems.rb
AgeCommit message (Collapse)Author
2022-04-12Merge RubyGems-3.2.33Hiroshi SHIBATA
2021-11-24Merge RubyGems-3.2.32 and Bundler-2.2.32Hiroshi SHIBATA
2021-11-22Merge RubyGems 3.2.31 and Bundler 2.2.31Hiroshi SHIBATA
2021-11-22Merge RubyGems 3.2.30 and Bundler 2.2.30Hiroshi SHIBATA
2021-11-22Merge RubyGems 3.2.29 and Bundler 2.2.29Hiroshi SHIBATA
2021-11-22Merge RubyGems 3.2.28 and Bundler 2.2.28Hiroshi SHIBATA
2021-11-22Merge RubyGems 3.2.27 and Bundler 2.2.27Hiroshi SHIBATA
2021-08-19Merge RubyGems 3.2.26 and Bundler 2.2.26Hiroshi SHIBATA
2021-08-19Merge RubyGems 3.2.25 and Bundler 2.2.25Hiroshi SHIBATA
2021-08-19Merge RubyGems 3.2.24 and Bundler 2.2.24Hiroshi SHIBATA
2021-08-19Merge RubyGems 3.2.23 and Bundler 2.2.23Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.22 and Bundler-2.2.22Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.21 and Bundler-2.2.21Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.20 and Bundler-2.2.20Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.19 and Bundler-2.2.19Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.18 and Bundler-2.2.18Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.17 and Bundler-2.2.17Hiroshi SHIBATA
2021-07-07Merge RubyGems-3.2.16 and Bundler-2.2.16Hiroshi SHIBATA
2021-03-24Merge RubyGems-3.2.15 and Bundler-2.2.15 (#4311)Hiroshi SHIBATA
2021-03-11Merge RubyGems-3.2.14 and Bundler-2.2.14Hiroshi SHIBATA
2021-03-11Merge RubyGems-3.2.13 and Bundler-2.2.13Hiroshi SHIBATA
2021-03-11Merge RubyGems-3.2.12 and Bundler-2.2.12Hiroshi SHIBATA
2021-03-11Merge RubyGems-3.2.11 and Bundler-2.2.11Hiroshi SHIBATA
2021-03-11Merge RubyGems-3.2.10 and Bundler-2.2.10Hiroshi SHIBATA
2021-02-09Merge RubyGems 3.2.9 and Bundler 2.2.9 (#4158)Hiroshi SHIBATA
2021-02-02Merge RubyGems-3.1.7Hiroshi SHIBATA
2021-01-21Merge RubyGems 3.2.6 and Bundler 2.2.6 (#4103)Hiroshi SHIBATA
2021-01-14Merge RubyGems-3.2.5Hiroshi SHIBATA
2021-01-14Merge RubyGems-3.2.4Hiroshi SHIBATA
2020-12-23Merge RubyGems 3.2.3 and Bundler 2.2.3Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3982
2020-12-18Merge RubyGems 3.2.2 and Bundler 2.2.2Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3930
2020-12-15Prepare to release rubygems-3.2.1 and bundler-2.2.1Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3901
2020-12-08Merge prepare version of RubyGems 3.2.0Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3864
2020-10-15Merge rubygems-3.2.0.rc.2Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3660
2020-09-23Revert "Manually merged from https://github.com/rubygems/rubygems/pull/2636"Hiroshi SHIBATA
31a6eaabc165d8a222e176f2c809d90622d88ec2 is obsoleted with https://github.com/rubygems/rubygems/pull/3820
2020-09-23Manually merged from https://github.com/rubygems/rubygems/pull/2636Hiroshi 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. https://github.com/rubygems/rubygems/commit/8a19e7401c Notes: Merged: https://github.com/ruby/ruby/pull/3379
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. https://github.com/rubygems/rubygems/commit/c60ce88d49 Notes: Merged: https://github.com/ruby/ruby/pull/3379
2020-07-31Bump version to 3.2.0.rc.1Hiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/3379
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'` https://github.com/rubygems/rubygems/commit/43ceae7ac0 Notes: Merged: https://github.com/ruby/ruby/pull/3379
2020-07-31Enforce no empty lines around class body in rubygemsDavid Rodríguez
To normalize the code style with `bundler`. Notes: Merged: https://github.com/ruby/ruby/pull/3379
2020-06-15Add Gem.disable_system_update_message to disable gem update --system if needed.Josef Šimánek
Notes: Merged: https://github.com/ruby/ruby/pull/3229
2020-06-15Remove modelines for consistencyDavid Rodríguez
No other files in the repo include this. Notes: Merged: https://github.com/ruby/ruby/pull/3229
2020-06-15Use space inside block braces everywhereDavid Rodríguez
To make rubygems code style consistent with bundler. Notes: Merged: https://github.com/ruby/ruby/pull/3229
2020-06-05[rubygems/rubygems] Respect files loaded from default gems before rubygemsDavid Rodríguez
https://github.com/rubygems/rubygems/commit/f3da3c1190 Notes: Merged: https://github.com/ruby/ruby/pull/3184
2020-06-05[rubygems/rubygems] Refactor `Gem.load_path_insert_index`David Rodríguez
https://github.com/rubygems/rubygems/commit/ae95885dff Notes: Merged: https://github.com/ruby/ruby/pull/3184
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. https://github.com/rubygems/rubygems/commit/00d98eb8a3 Notes: Merged: https://github.com/ruby/ruby/pull/3184
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. https://github.com/rubygems/rubygems/commit/1ccf0912a1 Notes: Merged: https://github.com/ruby/ruby/pull/3184
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 https://github.com/ruby/ruby/pull/2380 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: https://github.com/rubygems/rubygems/blob/ea3e6f194df500b028b52b3b64decbd3df1d5ab0/lib/rubygems/core_ext/kernel_require.rb#L77-L85 * In order to do that, `rubygems` registers a map of default gems and their files when it is first required: https://github.com/rubygems/rubygems/blob/ea3e6f194df500b028b52b3b64decbd3df1d5ab0/lib/rubygems.rb#L1247-L1276 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. https://github.com/rubygems/rubygems/commit/94df740c2b Notes: Merged: https://github.com/ruby/ruby/pull/3092
2020-05-08[rubygems/rubygems] Extract logic to a local variable for later reuseDavid Rodríguez
https://github.com/rubygems/rubygems/commit/dc715888d4 Notes: Merged: https://github.com/ruby/ruby/pull/3092