rubygems-update 3.6.5 → 3.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/bundler/CHANGELOG.md +27 -0
  4. data/bundler/lib/bundler/build_metadata.rb +2 -2
  5. data/bundler/lib/bundler/checksum.rb +1 -1
  6. data/bundler/lib/bundler/cli/doctor.rb +14 -14
  7. data/bundler/lib/bundler/cli/inject.rb +2 -2
  8. data/bundler/lib/bundler/cli/lock.rb +2 -1
  9. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -1
  10. data/bundler/lib/bundler/definition.rb +58 -47
  11. data/bundler/lib/bundler/errors.rb +18 -0
  12. data/bundler/lib/bundler/injector.rb +9 -9
  13. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  14. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  15. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  16. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  17. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  18. data/bundler/lib/bundler/man/bundle-config.1 +6 -6
  19. data/bundler/lib/bundler/man/bundle-config.1.ronn +9 -4
  20. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  21. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  22. data/bundler/lib/bundler/man/bundle-env.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-exec.1 +3 -3
  24. data/bundler/lib/bundler/man/bundle-exec.1.ronn +2 -2
  25. data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle.1 +1 -1
  47. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  48. data/bundler/lib/bundler/plugin/index.rb +1 -1
  49. data/bundler/lib/bundler/resolver/candidate.rb +11 -8
  50. data/bundler/lib/bundler/shared_helpers.rb +4 -0
  51. data/bundler/lib/bundler/source/git/git_proxy.rb +6 -0
  52. data/bundler/lib/bundler/source/git.rb +5 -1
  53. data/bundler/lib/bundler/source/rubygems/remote.rb +11 -3
  54. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +7 -3
  55. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +12 -11
  56. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +6 -6
  57. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  58. data/bundler/lib/bundler/version.rb +1 -1
  59. data/lib/rubygems/local_remote_options.rb +2 -2
  60. data/lib/rubygems/rdoc.rb +8 -4
  61. data/lib/rubygems/vendor/uri/lib/uri/common.rb +7 -3
  62. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +12 -11
  63. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +6 -6
  64. data/lib/rubygems/vendor/uri/lib/uri/version.rb +1 -1
  65. data/lib/rubygems.rb +1 -1
  66. data/rubygems-update.gemspec +1 -1
  67. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d1ec8a0b30ce414d0ea85439f4759b5142e0d75936af1cb6942f99487de49da
4
- data.tar.gz: b9298777fcbf694f471da4b1ca6e2a533e21d50358b601cf6b040ee5c0ffb828
3
+ metadata.gz: c9521350c1a716eef57fc59c91a1d81ff8f6806cc2cf1c909c75888aa18a486a
4
+ data.tar.gz: 3f62199690949d037610115ea815ae128996298b663fe4417bb5848e71d7a96d
5
5
  SHA512:
6
- metadata.gz: 47499f9c05064f71bd1fa0819a47bce356b3495923cc8920a56677667a64811ec44e328079b549a8b53d1b6a8a9bed3a28ee6c82f0f959754a2405b8fce196b4
7
- data.tar.gz: 4190fea70cdfdf8e212c7c7fe6c5e71a6228b1235bb5d9f229bfae52a514f43331df82232bef5085d11907cc14ee522f40e9af60b4c3b54ae4ee81dc021127f1
6
+ metadata.gz: 6500bc219b6e8629740b729e793fbef6c3e7d2745b14562bb09e8d4bb327bb17de8f255e2a9635c48989c409b560a177cfd1062e77af1a07a7f4501426d71005
7
+ data.tar.gz: 5ec01505dfa015e3f4d0ad051d0755d674baa431ac11f128f8d8fefcfb836ab8817794ca1b6f9aa7ce94b1e4dc6dc8421487cef788485a22016cd5dc144e68e1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # 3.6.6 / 2025-03-13
2
+
3
+ ## Enhancements:
4
+
5
+ * Update vendored uri to 1.0.3. Pull request
6
+ [#8534](https://github.com/rubygems/rubygems/pull/8534) by hsbt
7
+ * Installs bundler 2.6.6 as a default gem.
8
+
9
+ ## Bug fixes:
10
+
11
+ * Fix `gem rdoc` not working with newer versions of rdoc when not
12
+ installed as default gems. Pull request
13
+ [#8549](https://github.com/rubygems/rubygems/pull/8549) by
14
+ deivid-rodriguez
15
+
1
16
  # 3.6.5 / 2025-02-20
2
17
 
3
18
  ## Enhancements:
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,30 @@
1
+ # 2.6.6 (March 13, 2025)
2
+
3
+ ## Enhancements:
4
+
5
+ - Fix `ENAMETOOLONG` error when creating compact index cache [#5578](https://github.com/rubygems/rubygems/pull/5578)
6
+ - Use shorthand hash syntax for bundle add [#8547](https://github.com/rubygems/rubygems/pull/8547)
7
+ - Update vendored uri to 1.0.3 [#8534](https://github.com/rubygems/rubygems/pull/8534)
8
+ - Retry gracefully on blank partial response in compact index [#8524](https://github.com/rubygems/rubygems/pull/8524)
9
+ - Give a better error when trying to write the lock file on a read-only filesystem [#5920](https://github.com/rubygems/rubygems/pull/5920)
10
+ - Improve log messages when lockfile platforms are added [#8523](https://github.com/rubygems/rubygems/pull/8523)
11
+ - Allow noop `bundle install` to work on read-only or protected folders [#8519](https://github.com/rubygems/rubygems/pull/8519)
12
+
13
+ ## Bug fixes:
14
+
15
+ - Detect partial gem installs from a git source so that they are reinstalled on a successive run [#8539](https://github.com/rubygems/rubygems/pull/8539)
16
+ - Modify `bundle doctor` to not report issue when files aren't writable [#8520](https://github.com/rubygems/rubygems/pull/8520)
17
+
18
+ ## Performance:
19
+
20
+ - Optimize resolution by removing an array allocation from `Candidate#<=>` [#8559](https://github.com/rubygems/rubygems/pull/8559)
21
+
22
+ ## Documentation:
23
+
24
+ - Update docs for with/without consistency [#8555](https://github.com/rubygems/rubygems/pull/8555)
25
+ - Recommend non-deprecated methods in `bundle exec` documentation [#8537](https://github.com/rubygems/rubygems/pull/8537)
26
+ - Hint about default group when using `only` configuration option [#8536](https://github.com/rubygems/rubygems/pull/8536)
27
+
1
28
  # 2.6.5 (February 20, 2025)
2
29
 
3
30
  ## Enhancements:
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2025-02-20".freeze
8
- @git_commit_sha = "cffd973142d".freeze
7
+ @built_at = "2025-03-13".freeze
8
+ @git_commit_sha = "25cf0763954".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -126,7 +126,7 @@ module Bundler
126
126
  end
127
127
 
128
128
  def removable?
129
- type == :lock || type == :gem
129
+ [:lock, :gem].include?(type)
130
130
  end
131
131
 
132
132
  def ==(other)
@@ -99,7 +99,7 @@ module Bundler
99
99
  end
100
100
  end.sort.each {|m| message += m }
101
101
  raise ProductionError, message
102
- elsif !permissions_valid
102
+ elsif permissions_valid
103
103
  Bundler.ui.info "No issues found with the installed bundle"
104
104
  end
105
105
  end
@@ -108,21 +108,21 @@ module Bundler
108
108
 
109
109
  def check_home_permissions
110
110
  require "find"
111
- files_not_readable_or_writable = []
112
- files_not_rw_and_owned_by_different_user = []
113
- files_not_owned_by_current_user_but_still_rw = []
111
+ files_not_readable = []
112
+ files_not_readable_and_owned_by_different_user = []
113
+ files_not_owned_by_current_user_but_still_readable = []
114
114
  broken_symlinks = []
115
115
  Find.find(Bundler.bundle_path.to_s).each do |f|
116
116
  if !File.exist?(f)
117
117
  broken_symlinks << f
118
- elsif !File.writable?(f) || !File.readable?(f)
118
+ elsif !File.readable?(f)
119
119
  if File.stat(f).uid != Process.uid
120
- files_not_rw_and_owned_by_different_user << f
120
+ files_not_readable_and_owned_by_different_user << f
121
121
  else
122
- files_not_readable_or_writable << f
122
+ files_not_readable << f
123
123
  end
124
124
  elsif File.stat(f).uid != Process.uid
125
- files_not_owned_by_current_user_but_still_rw << f
125
+ files_not_owned_by_current_user_but_still_readable << f
126
126
  end
127
127
  end
128
128
 
@@ -134,23 +134,23 @@ module Bundler
134
134
  ok = false
135
135
  end
136
136
 
137
- if files_not_owned_by_current_user_but_still_rw.any?
137
+ if files_not_owned_by_current_user_but_still_readable.any?
138
138
  Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
139
- "user, but are still readable/writable. These files are:\n - #{files_not_owned_by_current_user_but_still_rw.join("\n - ")}"
139
+ "user, but are still readable. These files are:\n - #{files_not_owned_by_current_user_but_still_readable.join("\n - ")}"
140
140
 
141
141
  ok = false
142
142
  end
143
143
 
144
- if files_not_rw_and_owned_by_different_user.any?
144
+ if files_not_readable_and_owned_by_different_user.any?
145
145
  Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
146
- "user, and are not readable/writable. These files are:\n - #{files_not_rw_and_owned_by_different_user.join("\n - ")}"
146
+ "user, and are not readable. These files are:\n - #{files_not_readable_and_owned_by_different_user.join("\n - ")}"
147
147
 
148
148
  ok = false
149
149
  end
150
150
 
151
- if files_not_readable_or_writable.any?
151
+ if files_not_readable.any?
152
152
  Bundler.ui.warn "Files exist in the Bundler home that are not " \
153
- "readable/writable by the current user. These files are:\n - #{files_not_readable_or_writable.join("\n - ")}"
153
+ "readable by the current user. These files are:\n - #{files_not_readable.join("\n - ")}"
154
154
 
155
155
  ok = false
156
156
  end
@@ -35,8 +35,8 @@ module Bundler
35
35
  Bundler.ui.confirm(added.map do |d|
36
36
  name = "'#{d.name}'"
37
37
  requirement = ", '#{d.requirement}'"
38
- group = ", :group => #{d.groups.inspect}" if d.groups != Array(:default)
39
- source = ", :source => '#{d.source}'" unless d.source.nil?
38
+ group = ", group: #{d.groups.inspect}" if d.groups != Array(:default)
39
+ source = ", source: '#{d.source}'" unless d.source.nil?
40
40
  %(gem #{name}#{requirement}#{group}#{source})
41
41
  end.join("\n"))
42
42
  else
@@ -44,7 +44,8 @@ module Bundler
44
44
 
45
45
  Bundler::CLI::Common.configure_gem_version_promoter(definition, options) if options[:update]
46
46
 
47
- options["remove-platform"].each do |platform|
47
+ options["remove-platform"].each do |platform_string|
48
+ platform = Gem::Platform.new(platform_string)
48
49
  definition.remove_platform(platform)
49
50
  end
50
51
 
@@ -37,7 +37,8 @@ module Bundler
37
37
  file.digests = parse_digests(response)
38
38
  # server may ignore Range and return the full response
39
39
  if response.is_a?(Gem::Net::HTTPPartialContent)
40
- break false unless file.append(response.body.byteslice(1..-1))
40
+ tail = response.body.byteslice(1..-1)
41
+ break false unless tail && file.append(tail)
41
42
  else
42
43
  file.write(response.body)
43
44
  end
@@ -94,7 +94,7 @@ module Bundler
94
94
 
95
95
  @locked_ruby_version = nil
96
96
  @new_platforms = []
97
- @removed_platform = nil
97
+ @removed_platforms = []
98
98
 
99
99
  if lockfile_exists?
100
100
  @lockfile_contents = Bundler.read_file(lockfile)
@@ -330,7 +330,7 @@ module Bundler
330
330
  SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
331
331
  else
332
332
  Bundler.ui.debug "Found no changes, using resolution from the lockfile"
333
- if @removed_platform || @locked_gems.may_include_redundant_platform_specific_gems?
333
+ if @removed_platforms.any? || @locked_gems.may_include_redundant_platform_specific_gems?
334
334
  SpecSet.new(filter_specs(@locked_specs, @dependencies))
335
335
  else
336
336
  @locked_specs
@@ -412,41 +412,8 @@ module Bundler
412
412
 
413
413
  raise ProductionError, "Frozen mode is set, but there's no lockfile" unless lockfile_exists?
414
414
 
415
- added = []
416
- deleted = []
417
- changed = []
418
-
419
- new_platforms = @platforms - @locked_platforms
420
- deleted_platforms = @locked_platforms - @platforms
421
- added.concat new_platforms.map {|p| "* platform: #{p}" }
422
- deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
423
-
424
- added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
425
- deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
426
-
427
- both_sources = Hash.new {|h, k| h[k] = [] }
428
- current_dependencies.each {|d| both_sources[d.name][0] = d }
429
- current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
430
-
431
- both_sources.each do |name, (dep, lock_dep)|
432
- next if dep.nil? || lock_dep.nil?
433
-
434
- gemfile_source = dep.source || default_source
435
- lock_source = lock_dep.source || default_source
436
- next if lock_source.include?(gemfile_source)
437
-
438
- gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
439
- lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
440
- changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
441
- end
442
-
443
- reason = resolve_needed? ? change_reason : "some dependencies were deleted from your gemfile"
444
- msg = String.new
445
- msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because frozen mode is set"
446
- msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
447
- msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
448
- msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
449
- msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_gemfile_path} to version control.\n" unless unlocking?
415
+ msg = lockfile_changes_summary("frozen mode is set")
416
+ return unless msg
450
417
 
451
418
  unless explicit_flag
452
419
  suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
@@ -456,7 +423,7 @@ module Bundler
456
423
  "freeze by running `#{suggested_command}`." if suggested_command
457
424
  end
458
425
 
459
- raise ProductionError, msg if added.any? || deleted.any? || changed.any? || resolve_needed?
426
+ raise ProductionError, msg
460
427
  end
461
428
 
462
429
  def validate_runtime!
@@ -511,10 +478,10 @@ module Bundler
511
478
  end
512
479
 
513
480
  def remove_platform(platform)
514
- removed_platform = @platforms.delete(Gem::Platform.new(platform))
515
- @removed_platform ||= removed_platform
516
- return if removed_platform
517
- raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
481
+ raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}" unless @platforms.include?(platform)
482
+
483
+ @removed_platforms << platform
484
+ @platforms.delete(platform)
518
485
  end
519
486
 
520
487
  def nothing_changed?
@@ -541,6 +508,46 @@ module Bundler
541
508
 
542
509
  private
543
510
 
511
+ def lockfile_changes_summary(update_refused_reason)
512
+ added = []
513
+ deleted = []
514
+ changed = []
515
+
516
+ added.concat @new_platforms.map {|p| "* platform: #{p}" }
517
+ deleted.concat @removed_platforms.map {|p| "* platform: #{p}" }
518
+
519
+ added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
520
+ deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
521
+
522
+ both_sources = Hash.new {|h, k| h[k] = [] }
523
+ current_dependencies.each {|d| both_sources[d.name][0] = d }
524
+ current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
525
+
526
+ both_sources.each do |name, (dep, lock_dep)|
527
+ next if dep.nil? || lock_dep.nil?
528
+
529
+ gemfile_source = dep.source || default_source
530
+ lock_source = lock_dep.source || default_source
531
+ next if lock_source.include?(gemfile_source)
532
+
533
+ gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
534
+ lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
535
+ changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
536
+ end
537
+
538
+ return unless added.any? || deleted.any? || changed.any? || resolve_needed?
539
+
540
+ reason = resolve_needed? ? change_reason : "some dependencies were deleted from your gemfile"
541
+
542
+ msg = String.new
543
+ msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because #{update_refused_reason}"
544
+ msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
545
+ msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
546
+ msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
547
+ msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_gemfile_path} to version control.\n" unless unlocking?
548
+ msg
549
+ end
550
+
544
551
  def install_needed?
545
552
  resolve_needed? || missing_specs?
546
553
  end
@@ -601,8 +608,12 @@ module Bundler
601
608
  return
602
609
  end
603
610
 
604
- SharedHelpers.filesystem_access(file) do |p|
605
- File.open(p, "wb") {|f| f.puts(contents) }
611
+ begin
612
+ SharedHelpers.filesystem_access(file) do |p|
613
+ File.open(p, "wb") {|f| f.puts(contents) }
614
+ end
615
+ rescue ReadOnlyFileSystemError
616
+ raise ProductionError, lockfile_changes_summary("file system is read-only")
606
617
  end
607
618
  end
608
619
 
@@ -625,7 +636,8 @@ module Bundler
625
636
  @resolution_packages ||= begin
626
637
  last_resolve = converge_locked_specs
627
638
  remove_invalid_platforms!
628
- packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @unlocking_all || @gems_to_unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local, new_platforms: @new_platforms)
639
+ new_resolution_platforms = @current_platform_missing ? @new_platforms + [local_platform] : @new_platforms
640
+ packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @unlocking_all || @gems_to_unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local, new_platforms: new_resolution_platforms)
629
641
  packages = additional_base_requirements_to_prevent_downgrades(packages)
630
642
  packages = additional_base_requirements_to_force_updates(packages)
631
643
  packages
@@ -768,7 +780,6 @@ module Bundler
768
780
  @most_specific_non_local_locked_platform = find_most_specific_locked_platform
769
781
  return if @most_specific_non_local_locked_platform
770
782
 
771
- @new_platforms << local_platform
772
783
  @platforms << local_platform
773
784
  true
774
785
  end
@@ -799,7 +810,7 @@ module Bundler
799
810
  [@source_changes, "the list of sources changed"],
800
811
  [@dependency_changes, "the dependencies in your gemfile changed"],
801
812
  [@current_platform_missing, "your lockfile does not include the current platform"],
802
- [@new_platforms.any?, "you added a new platform to your gemfile"],
813
+ [@new_platforms.any?, "you are adding a new platform to your lockfile"],
803
814
  [@path_changes, "the gemspecs for path gems changed"],
804
815
  [@local_changes, "the gemspecs for git local gems changed"],
805
816
  [@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
@@ -193,6 +193,24 @@ module Bundler
193
193
  status_code(31)
194
194
  end
195
195
 
196
+ class ReadOnlyFileSystemError < PermissionError
197
+ def message
198
+ "There was an error while trying to #{action} `#{@path}`. " \
199
+ "File system is read-only."
200
+ end
201
+
202
+ status_code(42)
203
+ end
204
+
205
+ class OperationNotPermittedError < PermissionError
206
+ def message
207
+ "There was an error while trying to #{action} `#{@path}`. " \
208
+ "Underlying OS system call raised an EPERM error."
209
+ end
210
+
211
+ status_code(43)
212
+ end
213
+
196
214
  class GenericSystemCallError < BundlerError
197
215
  attr_reader :underlying_error
198
216
 
@@ -108,17 +108,17 @@ module Bundler
108
108
  end
109
109
 
110
110
  if d.groups != Array(:default)
111
- group = d.groups.size == 1 ? ", :group => #{d.groups.first.inspect}" : ", :groups => #{d.groups.inspect}"
111
+ group = d.groups.size == 1 ? ", group: #{d.groups.first.inspect}" : ", groups: #{d.groups.inspect}"
112
112
  end
113
113
 
114
- source = ", :source => \"#{d.source}\"" unless d.source.nil?
115
- path = ", :path => \"#{d.path}\"" unless d.path.nil?
116
- git = ", :git => \"#{d.git}\"" unless d.git.nil?
117
- github = ", :github => \"#{d.github}\"" unless d.github.nil?
118
- branch = ", :branch => \"#{d.branch}\"" unless d.branch.nil?
119
- ref = ", :ref => \"#{d.ref}\"" unless d.ref.nil?
120
- glob = ", :glob => \"#{d.glob}\"" unless d.glob.nil?
121
- require_path = ", :require => #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?
114
+ source = ", source: \"#{d.source}\"" unless d.source.nil?
115
+ path = ", path: \"#{d.path}\"" unless d.path.nil?
116
+ git = ", git: \"#{d.git}\"" unless d.git.nil?
117
+ github = ", github: \"#{d.github}\"" unless d.github.nil?
118
+ branch = ", branch: \"#{d.branch}\"" unless d.branch.nil?
119
+ ref = ", ref: \"#{d.ref}\"" unless d.ref.nil?
120
+ glob = ", glob: \"#{d.glob}\"" unless d.glob.nil?
121
+ require_path = ", require: #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?
122
122
 
123
123
  %(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{glob}#{require_path})
124
124
  end.join("\n")
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-ADD" "1" "January 2025" ""
3
+ .TH "BUNDLE\-ADD" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-BINSTUBS" "1" "January 2025" ""
3
+ .TH "BUNDLE\-BINSTUBS" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CACHE" "1" "January 2025" ""
3
+ .TH "BUNDLE\-CACHE" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CHECK" "1" "January 2025" ""
3
+ .TH "BUNDLE\-CHECK" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CLEAN" "1" "January 2025" ""
3
+ .TH "BUNDLE\-CLEAN" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CONFIG" "1" "January 2025" ""
3
+ .TH "BUNDLE\-CONFIG" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-config\fR \- Set bundler configuration options
6
6
  .SH "SYNOPSIS"
@@ -56,16 +56,16 @@ Creates a directory (defaults to \fB~/bin\fR) and place any executables from the
56
56
  In deployment mode, Bundler will 'roll\-out' the bundle for \fBproduction\fR use\. Please check carefully if you want to have this option enabled in \fBdevelopment\fR or \fBtest\fR environments\.
57
57
  .TP
58
58
  \fBonly\fR
59
- A space\-separated list of groups to install only gems of the specified groups\.
59
+ A space\-separated list of groups to install only gems of the specified groups\. Please check carefully if you want to install also gems without a group, cause they get put inside \fBdefault\fR group\. For example \fBonly test:default\fR will install all gems specified in test group and without one\.
60
60
  .TP
61
61
  \fBpath\fR
62
62
  The location to install the specified gems to\. This defaults to Rubygems' setting\. Bundler shares this location with Rubygems, \fBgem install \|\.\|\.\|\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \|\.\|\.\|\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
63
63
  .TP
64
64
  \fBwithout\fR
65
- A space\-separated list of groups referencing gems to skip during installation\.
65
+ A space\-separated or \fB:\fR\-separated list of groups referencing gems to skip during installation\.
66
66
  .TP
67
67
  \fBwith\fR
68
- A space\-separated list of \fBoptional\fR groups referencing gems to include during installation\.
68
+ A space\-separated or \fB:\fR\-separated list of \fBoptional\fR groups referencing gems to include during installation\.
69
69
  .SH "BUILD OPTIONS"
70
70
  You can use \fBbundle config\fR to give Bundler the flags to pass to the gem installer every time bundler tries to install a particular gem\.
71
71
  .P
@@ -197,9 +197,9 @@ The following is a list of all configuration keys and their purpose\. You can le
197
197
  .IP "\(bu" 4
198
198
  \fBversion\fR (\fBBUNDLE_VERSION\fR): The version of Bundler to use when running under Bundler environment\. Defaults to \fBlockfile\fR\. You can also specify \fBsystem\fR or \fBx\.y\.z\fR\. \fBlockfile\fR will use the Bundler version specified in the \fBGemfile\.lock\fR, \fBsystem\fR will use the system version of Bundler, and \fBx\.y\.z\fR will use the specified version of Bundler\.
199
199
  .IP "\(bu" 4
200
- \fBwith\fR (\fBBUNDLE_WITH\fR): A \fB:\fR\-separated list of groups whose gems bundler should install\.
200
+ \fBwith\fR (\fBBUNDLE_WITH\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should install\.
201
201
  .IP "\(bu" 4
202
- \fBwithout\fR (\fBBUNDLE_WITHOUT\fR): A \fB:\fR\-separated list of groups whose gems bundler should not install\.
202
+ \fBwithout\fR (\fBBUNDLE_WITHOUT\fR): A space\-separated or \fB:\fR\-separated list of groups whose gems bundler should not install\.
203
203
  .IP "" 0
204
204
  .SH "LOCAL GIT REPOS"
205
205
  Bundler also allows you to work against a git repository locally instead of using the remote version\. This can be achieved by setting up a local override:
@@ -79,6 +79,9 @@ The options that can be configured are:
79
79
 
80
80
  * `only`:
81
81
  A space-separated list of groups to install only gems of the specified groups.
82
+ Please check carefully if you want to install also gems without a group, cause
83
+ they get put inside `default` group. For example `only test:default` will install
84
+ all gems specified in test group and without one.
82
85
 
83
86
  * `path`:
84
87
  The location to install the specified gems to. This defaults to Rubygems'
@@ -88,10 +91,12 @@ The options that can be configured are:
88
91
  installed to other locations will not get listed.
89
92
 
90
93
  * `without`:
91
- A space-separated list of groups referencing gems to skip during installation.
94
+ A space-separated or `:`-separated list of groups referencing gems to skip during
95
+ installation.
92
96
 
93
97
  * `with`:
94
- A space-separated list of **optional** groups referencing gems to include during installation.
98
+ A space-separated or `:`-separated list of **optional** groups referencing gems to
99
+ include during installation.
95
100
 
96
101
  ## BUILD OPTIONS
97
102
 
@@ -280,9 +285,9 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
280
285
  `system` will use the system version of Bundler, and `x.y.z` will use
281
286
  the specified version of Bundler.
282
287
  * `with` (`BUNDLE_WITH`):
283
- A `:`-separated list of groups whose gems bundler should install.
288
+ A space-separated or `:`-separated list of groups whose gems bundler should install.
284
289
  * `without` (`BUNDLE_WITHOUT`):
285
- A `:`-separated list of groups whose gems bundler should not install.
290
+ A space-separated or `:`-separated list of groups whose gems bundler should not install.
286
291
 
287
292
  ## LOCAL GIT REPOS
288
293
 
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-CONSOLE" "1" "January 2025" ""
3
+ .TH "BUNDLE\-CONSOLE" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-console\fR \- Open an IRB session with the bundle pre\-loaded
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-DOCTOR" "1" "January 2025" ""
3
+ .TH "BUNDLE\-DOCTOR" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-doctor\fR \- Checks the bundle for common problems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-ENV" "1" "January 2025" ""
3
+ .TH "BUNDLE\-ENV" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-env\fR \- Print information about the environment Bundler is running under
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-EXEC" "1" "January 2025" ""
3
+ .TH "BUNDLE\-EXEC" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
6
6
  .SH "SYNOPSIS"
@@ -74,8 +74,8 @@ end
74
74
  Bundler provides convenience helpers that wrap \fBsystem\fR and \fBexec\fR, and they can be used like this:
75
75
  .IP "" 4
76
76
  .nf
77
- Bundler\.clean_system('brew install wget')
78
- Bundler\.clean_exec('brew install wget')
77
+ Bundler\.unbundled_system('brew install wget')
78
+ Bundler\.unbundled_exec('brew install wget')
79
79
  .fi
80
80
  .IP "" 0
81
81
  .SH "RUBYGEMS PLUGINS"
@@ -108,8 +108,8 @@ need to use `with_unbundled_env`.
108
108
  Bundler provides convenience helpers that wrap `system` and `exec`, and they
109
109
  can be used like this:
110
110
 
111
- Bundler.clean_system('brew install wget')
112
- Bundler.clean_exec('brew install wget')
111
+ Bundler.unbundled_system('brew install wget')
112
+ Bundler.unbundled_exec('brew install wget')
113
113
 
114
114
 
115
115
  ## RUBYGEMS PLUGINS
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-FUND" "1" "January 2025" ""
3
+ .TH "BUNDLE\-FUND" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-fund\fR \- Lists information about gems seeking funding assistance
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-GEM" "1" "January 2025" ""
3
+ .TH "BUNDLE\-GEM" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-HELP" "1" "January 2025" ""
3
+ .TH "BUNDLE\-HELP" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-help\fR \- Displays detailed help for each subcommand
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with Ronn-NG/v0.10.1
2
2
  .\" http://github.com/apjanke/ronn-ng/tree/0.10.1
3
- .TH "BUNDLE\-INFO" "1" "January 2025" ""
3
+ .TH "BUNDLE\-INFO" "1" "March 2025" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-info\fR \- Show information for the given gem in your bundle
6
6
  .SH "SYNOPSIS"