Age | Commit message (Collapse) | Author |
|
Copying the URL is painful here because the URL is embedded within a paragraph of text. I presume we don't want to automatically open the browser.
Instead, move the URL to its own line so that "triple click" will automatically select the whole thing.
https://github.com/rubygems/rubygems/commit/21532a69ae
|
|
https://github.com/rubygems/rubygems/commit/62e1bf2d37
Notes:
Merged: https://github.com/ruby/ruby/pull/13177
|
|
https://github.com/rubygems/rubygems/commit/2af1646776
|
|
Co-authored-by: Nobuyoshi Nakada <[email protected]>
|
|
|
|
Because get_push_scope is a method call, Ruby will allocate an array
for *args even though it is not necessary to do so. Using a local
variable avoids the allocation.
Found by the performance warning in Ruby feature 21274.
https://github.com/rubygems/rubygems/commit/0473c0cf32
|
|
mutable dependencies array
That restores support for compact index dummy implementations that only lists
versions, without checksums or dependencies.
This format is undocumented, so we may want to get rid of it in the
future. However, some of our tests rely on it, and some implementations
did use it (gems.mutant.dev at least). And the way the code was written
suggest that support was intentional.
So for now, we should restore it.
https://github.com/rubygems/rubygems/commit/0427d8c983
|
|
https://github.com/rubygems/rubygems/commit/792117980b
|
|
https://github.com/rubygems/rubygems/commit/4bbf02493e
|
|
This decouples `gem exec` behavior (and tests) from the sort order of
the gemspec.
https://github.com/rubygems/rubygems/commit/911cd29159
|
|
When `gem exec foo` is run, and "foo" is a gem that has multiple
executables, none of them named "foo", raise an error explaining the
situation and telling user to be more specific.
Currently the first command in the executables array is run, but this
may come as surprising sometimes, so better raise an error.
https://github.com/rubygems/rubygems/commit/acda5d8f6e
Notes:
Merged: https://github.com/ruby/ruby/pull/12968
|
|
Previously, the comparison code would loop through segments up to the
longest of the two versions being compared. However, this is inefficient
because once one version has more segments than the other we can do a
lot less work.
This commit optimizes the differing segment length case by specializing
the logic once the iteration has passed the shorter of the two segment
lengths. At this point we only need to continue looking at the longer
version's segment, and we know that any String encountered means the
version is less than (pre), and any non-zero Integer means the version
is greater than.
Benchmark:
```
{
first: [Gem::Version.new("1.2.3"), Gem::Version.new("2.2.3")],
second: [Gem::Version.new("1.2.3"), Gem::Version.new("1.3.3")],
third: [Gem::Version.new("1.2.3"), Gem::Version.new("1.2.4")],
length: [Gem::Version.new("1.2.3"), Gem::Version.new("1.2.3.4")],
left_s_second: [Gem::Version.new("1.a.3"), Gem::Version.new("1.2.3")],
left_s_third: [Gem::Version.new("1.2.a"), Gem::Version.new("1.2.3")],
right_s_second: [Gem::Version.new("1.2.3"), Gem::Version.new("1.a.3")],
right_s_third: [Gem::Version.new("1.2.3"), Gem::Version.new("1.2.a")],
left_s_length: [Gem::Version.new("8.0.1.pre"), Gem::Version.new("8.0.1")],
right_s_length: [Gem::Version.new("8.0.1"), Gem::Version.new("8.0.1.pre")],
both_s: [Gem::Version.new("8.0.2.pre1"), Gem::Version.new("8.0.2.pre2")],
}.each do |name, v|
puts "== #{name} =="
raise name unless v[0].fast_comp(v[1]) == (v[0] <=> v[1])
Benchmark.ips do |x|
x.report("fast") { v[0].fast_comp(v[1]) }
x.report("original") { v[0] <=> v[1] }
x.compare!(order: :baseline)
end
end
== first ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 208.555k i/100ms
original 199.789k i/100ms
Calculating -------------------------------------
fast 2.075M (± 6.0%) i/s (481.93 ns/i) - 10.428M in 5.055818s
original 2.045M (± 3.9%) i/s (488.94 ns/i) - 10.389M in 5.090034s
Comparison:
fast: 2075002.8 i/s
original: 2045227.4 i/s - same-ish: difference falls within error
== second ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 192.395k i/100ms
original 183.000k i/100ms
Calculating -------------------------------------
fast 1.892M (± 3.8%) i/s (528.62 ns/i) - 9.620M in 5.094104s
original 1.824M (± 3.5%) i/s (548.11 ns/i) - 9.150M in 5.023163s
Comparison:
fast: 1891722.2 i/s
original: 1824435.3 i/s - same-ish: difference falls within error
== third ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 172.788k i/100ms
original 162.934k i/100ms
Calculating -------------------------------------
fast 1.719M (± 9.0%) i/s (581.72 ns/i) - 8.467M in 5.025861s
original 1.638M (± 3.6%) i/s (610.36 ns/i) - 8.310M in 5.080344s
Comparison:
fast: 1719042.9 i/s
original: 1638389.6 i/s - same-ish: difference falls within error
== length ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 191.741k i/100ms
original 155.952k i/100ms
Calculating -------------------------------------
fast 1.920M (± 3.9%) i/s (520.74 ns/i) - 9.587M in 5.002328s
original 1.576M (± 6.2%) i/s (634.42 ns/i) - 7.954M in 5.072507s
Comparison:
fast: 1920362.1 i/s
original: 1576240.9 i/s - 1.22x slower
== left_s_second ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 176.441k i/100ms
original 164.879k i/100ms
Calculating -------------------------------------
fast 1.609M (± 7.3%) i/s (621.51 ns/i) - 8.116M in 5.083414s
original 1.620M (± 8.3%) i/s (617.43 ns/i) - 8.079M in 5.028525s
Comparison:
fast: 1608994.8 i/s
original: 1619606.5 i/s - same-ish: difference falls within error
== left_s_third ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 160.562k i/100ms
original 152.799k i/100ms
Calculating -------------------------------------
fast 1.591M (± 3.6%) i/s (628.40 ns/i) - 8.028M in 5.052029s
original 1.528M (± 3.6%) i/s (654.31 ns/i) - 7.640M in 5.007526s
Comparison:
fast: 1591334.1 i/s
original: 1528320.6 i/s - same-ish: difference falls within error
== right_s_second ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 135.938k i/100ms
original 132.907k i/100ms
Calculating -------------------------------------
fast 1.367M (± 1.2%) i/s (731.77 ns/i) - 6.933M in 5.074030s
original 1.320M (± 2.4%) i/s (757.35 ns/i) - 6.645M in 5.036155s
Comparison:
fast: 1366548.7 i/s
original: 1320386.4 i/s - same-ish: difference falls within error
== right_s_third ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 129.971k i/100ms
original 123.802k i/100ms
Calculating -------------------------------------
fast 1.273M (± 4.1%) i/s (785.25 ns/i) - 6.369M in 5.011805s
original 1.215M (± 1.8%) i/s (823.04 ns/i) - 6.190M in 5.096330s
Comparison:
fast: 1273487.0 i/s
original: 1215002.9 i/s - same-ish: difference falls within error
== left_s_length ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 211.093k i/100ms
original 155.784k i/100ms
Calculating -------------------------------------
fast 2.120M (± 1.9%) i/s (471.63 ns/i) - 10.766M in 5.079336s
original 1.565M (± 6.7%) i/s (638.87 ns/i) - 7.789M in 5.007522s
Comparison:
fast: 2120296.1 i/s
original: 1565258.0 i/s - 1.35x slower
== right_s_length ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 213.977k i/100ms
original 142.990k i/100ms
Calculating -------------------------------------
fast 2.154M (± 1.3%) i/s (464.15 ns/i) - 10.913M in 5.066124s
original 1.446M (± 1.8%) i/s (691.75 ns/i) - 7.292M in 5.046172s
Comparison:
fast: 2154455.3 i/s
original: 1445607.9 i/s - 1.49x slower
== both_s ==
ruby 3.4.2 (2025-02-15 revision https://github.com/rubygems/rubygems/commit/d2930f8e7a) +PRISM [arm64-darwin23]
Warming up --------------------------------------
fast 154.903k i/100ms
original 131.011k i/100ms
Calculating -------------------------------------
fast 1.515M (± 4.0%) i/s (659.97 ns/i) - 7.590M in 5.019890s
original 1.280M (± 5.3%) i/s (781.28 ns/i) - 6.420M in 5.035387s
Comparison:
fast: 1515223.3 i/s
original: 1279957.8 i/s - 1.18x slower
```
https://github.com/rubygems/rubygems/commit/7195e77152
|
|
https://github.com/rubygems/rubygems/commit/369f9b9311
Notes:
Merged: https://github.com/ruby/ruby/pull/12890
|
|
https://github.com/rubygems/rubygems/commit/176dc7421c
Notes:
Merged: https://github.com/ruby/ruby/pull/12840
|
|
https://github.com/rubygems/rubygems/commit/677e17aa2e
|
|
feature now
https://github.com/rubygems/rubygems/commit/b29f8d6a37
|
|
https://github.com/rubygems/rubygems/commit/c65b8644e6
Co-authored-by: Samuel Giddins <[email protected]>
|
|
dependency
If you force uninstall a dependency but leave other gems depending on
it, those gems will fail to be activated.
In that case, RubyGems prints a rather complicated error:
```
$ rails --version
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1413:in 'block in Gem::Specification#activate_dependencies': Could not find 'activesupport' (= 8.0.1) among 478 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' at: /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0/specifications/railties-8.0.1.gemspec, execute `gem env` for more information
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Array#each'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Gem::Specification#activate_dependencies'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1381:in 'Gem::Specification#activate'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/dependency.rb:303:in 'Gem::Dependency#to_specs': Could not find 'activesupport' (= 8.0.1) - did find: [activesupport-7.1.3,activesupport-7.0.8.7] (Gem::MissingSpecVersionError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' , execute `gem env` for more information
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1411:in 'block in Gem::Specification#activate_dependencies'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Array#each'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1399:in 'Gem::Specification#activate_dependencies'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1381:in 'Gem::Specification#activate'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
```
With this commit, the error becomes a bit simpler to parse:
```
$ rails --version
/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1421:in 'block in Gem::Specification#activate_dependencies': Could not find 'activesupport' (= 8.0.1) among 478 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=/Users/deivid/.local/share/gem/ruby/3.4.0:/Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0' at: /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/gems/3.4.0/specifications/railties-8.0.1.gemspec, execute `gem env` for more information
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1407:in 'Array#each'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1407:in 'Gem::Specification#activate_dependencies'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems/specification.rb:1389:in 'Gem::Specification#activate'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:283:in 'block in Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Thread::Mutex#synchronize'
from /Users/deivid/.asdf/installs/ruby/3.4.1/lib/ruby/site_ruby/3.4.0/rubygems.rb:282:in 'Gem.activate_bin_path'
from /Users/deivid/.asdf/installs/ruby/3.4.1/bin/rails:25:in '<main>'
```
And also, we reduce exception based control flow in our code.
https://github.com/rubygems/rubygems/commit/7e48c49f2d
|
|
|
|
https://github.com/rubygems/rubygems/commit/12f3e78c95
|
|
There are 3 possible locations:
- $HOME/.gem/credentials
- $XDG_DATA_HOME/gem/credentials
- $HOME/.local/share/gem/credentials
https://github.com/rubygems/rubygems/commit/c51756b96e
|
|
https://github.com/rubygems/rubygems/commit/42aaaff15c
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/12444
|
|
|
|
|
|
|
|
https://github.com/rubygems/rubygems/commit/7585825c57
|
|
|
|
|
|
|
|
`Gem::Specification.reset` on benign cases
If `Gem::Specification.reset` is used, but there are still unresolved
dependencies, RubyGems prints a warning. There are though, certain cases
where the situation will not cause any issues.
One such case is when the unresolved dependency does not restrict any
versions (>= 0) and there's a default gem matching it.
In this situation, it doesn't matter if Gem paths change, because
default gems are still activatable, so the dependency will be properly
activated if ever needed.
https://github.com/rubygems/rubygems/commit/e5f8a3068e
|
|
https://github.com/rubygems/rubygems/commit/7c634ecd72
|
|
Removes usage of these classes as ACE gadgets
See https://nastystereo.com/security/ruby-3.4-deserialization.html
Signed-off-by: Samuel Giddins <[email protected]>
https://github.com/rubygems/rubygems/commit/89ad04db86
|
|
https://github.com/rubygems/rubygems/commit/722d4c6926
|
|
ruby-{name}, recommend those.
https://github.com/rubygems/rubygems/commit/d7d33172c1
|
|
https://github.com/rubygems/rubygems/commit/0c3a65871a
|
|
https://github.com/rubygems/rubygems/commit/d8d68cc00e
|
|
That's indeed the ideal behavior but it's a mess to maintain because the
version of RubyGems shipped with each patchlevel of Ruby changes. We
could try looking at the `VERSION` constant in `
RbConfig::CONFIG["rubylibdir"` but for now I calling what's in there now
as good enough.
https://github.com/rubygems/rubygems/commit/40ccf2b093
|
|
We already do this check in `setup.rb` itself, which is run earlier.
https://github.com/rubygems/rubygems/commit/160cc3f1c5
|
|
https://github.com/rubygems/rubygems/commit/31fadaf2d2
|
|
output
The $0 value is used in many CLI libraries to determine the name of the
application, when displaying help and error messages.
Without setting this value, it defaults to `gem` which can be confusing.
Before:
```
$ gem exec kamal help
Commands:
gem accessory # Manage accessories (db/redis/search)
gem app # Manage application
gem audit # Show audit log from servers
gem build # Build application image
gem config # Show combined config (including secrets!)
gem deploy # Deploy app to servers
gem details # Show details about all containers
gem docs [SECTION] # Show Kamal configuration documentation
gem help [COMMAND] # Describe available commands or one specific command
gem init # Create config stub in config/deploy.yml and secrets stub in .kamal
gem lock # Manage the deploy lock
gem proxy # Manage kamal-proxy
gem prune # Prune old application images and containers
gem redeploy # Deploy app to servers without bootstrapping servers, starting kamal-proxy, pruning, and registry login
gem registry # Login and -out of the image registry
gem remove # Remove kamal-proxy, app, accessories, and registry session from servers
gem rollback [VERSION] # Rollback app to VERSION
gem secrets # Helpers for extracting secrets
gem server # Bootstrap servers with curl and Docker
gem setup # Setup all accessories, push the env, and deploy app to servers
gem upgrade # Upgrade from Kamal 1.x to 2.0
gem version # Show Kamal version
```
After:
```
$ gem exec kamal help
Commands:
kamal accessory # Manage accessories (db/redis/search)
kamal app # Manage application
kamal audit # Show audit log from servers
kamal build # Build application image
kamal config # Show combined config (including secrets!)
kamal deploy # Deploy app to servers
kamal details # Show details about all containers
kamal docs [SECTION] # Show Kamal configuration documentation
kamal help [COMMAND] # Describe available commands or one specific command
kamal init # Create config stub in config/deploy.yml and secrets stub in .kamal
kamal lock # Manage the deploy lock
kamal proxy # Manage kamal-proxy
kamal prune # Prune old application images and containers
kamal redeploy # Deploy app to servers without bootstrapping servers, starting kamal-proxy, pruning, and registry login
kamal registry # Login and -out of the image registry
kamal remove # Remove kamal-proxy, app, accessories, and registry session from servers
kamal rollback [VERSION] # Rollback app to VERSION
kamal secrets # Helpers for extracting secrets
kamal server # Bootstrap servers with curl and Docker
kamal setup # Setup all accessories, push the env, and deploy app to servers
kamal upgrade # Upgrade from Kamal 1.x to 2.0
kamal version # Show Kamal version
```
https://github.com/rubygems/rubygems/commit/4fd060b96d
|
|
Signed-off-by: Samuel Giddins <[email protected]>
https://github.com/rubygems/rubygems/commit/a5412d9a0e
|
|
URI::RFC2396_PARSER.escape explicitly
https://github.com/rubygems/rubygems/commit/64f026c9d4
|
|
|
|
|
|
|
|
|
|
|
|
https://github.com/rubygems/rubygems/commit/5a094cbfab
|
|
|