bundler 2.6.5 → 2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/checksum.rb +1 -1
- data/lib/bundler/cli/doctor.rb +14 -14
- data/lib/bundler/cli/inject.rb +2 -2
- data/lib/bundler/cli/lock.rb +2 -1
- data/lib/bundler/compact_index_client/updater.rb +2 -1
- data/lib/bundler/definition.rb +58 -47
- data/lib/bundler/errors.rb +18 -0
- data/lib/bundler/injector.rb +9 -9
- data/lib/bundler/man/bundle-add.1 +1 -1
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +1 -1
- data/lib/bundler/man/bundle-check.1 +1 -1
- data/lib/bundler/man/bundle-clean.1 +1 -1
- data/lib/bundler/man/bundle-config.1 +6 -6
- data/lib/bundler/man/bundle-config.1.ronn +9 -4
- data/lib/bundler/man/bundle-console.1 +1 -1
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-env.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +3 -3
- data/lib/bundler/man/bundle-exec.1.ronn +2 -2
- data/lib/bundler/man/bundle-fund.1 +1 -1
- data/lib/bundler/man/bundle-gem.1 +1 -1
- data/lib/bundler/man/bundle-help.1 +1 -1
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-inject.1 +1 -1
- data/lib/bundler/man/bundle-install.1 +1 -1
- data/lib/bundler/man/bundle-issue.1 +1 -1
- data/lib/bundler/man/bundle-licenses.1 +1 -1
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +1 -1
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +1 -1
- data/lib/bundler/man/bundle-platform.1 +1 -1
- data/lib/bundler/man/bundle-plugin.1 +1 -1
- data/lib/bundler/man/bundle-pristine.1 +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-show.1 +1 -1
- data/lib/bundler/man/bundle-update.1 +1 -1
- data/lib/bundler/man/bundle-version.1 +1 -1
- data/lib/bundler/man/bundle-viz.1 +1 -1
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +1 -1
- data/lib/bundler/plugin/index.rb +1 -1
- data/lib/bundler/resolver/candidate.rb +11 -8
- data/lib/bundler/shared_helpers.rb +4 -0
- data/lib/bundler/source/git/git_proxy.rb +6 -0
- data/lib/bundler/source/git.rb +5 -1
- data/lib/bundler/source/rubygems/remote.rb +11 -3
- data/lib/bundler/vendor/uri/lib/uri/common.rb +7 -3
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +12 -11
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +6 -6
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04be45da6f2c0f4d36af4bbed990919e3fafcba6d1ae0f29adff18b814bbd343
|
4
|
+
data.tar.gz: 4b2dc4d27575de59e07cfe3cbb397248c60288b0da5a3f857ef5f2ad738b46b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1f8470b8caa25f59bdef6c9a62b938292b6e8dc2a1799c93971f931e774aee8c766dc503007900dbd8e743a6396dad8803ea92f6d47261fb82748d46705d865
|
7
|
+
data.tar.gz: 50c0f2dabb906fe79566eea2024f1c346469026ae57936cc1c0c4d4bbaeab0321e0261c82128ad2c36985f998dbc0db21f1311c4bef2fb097ecd24d641136450
|
data/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-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2025-03-13".freeze
|
8
|
+
@git_commit_sha = "25cf0763954".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
data/lib/bundler/checksum.rb
CHANGED
data/lib/bundler/cli/doctor.rb
CHANGED
@@ -99,7 +99,7 @@ module Bundler
|
|
99
99
|
end
|
100
100
|
end.sort.each {|m| message += m }
|
101
101
|
raise ProductionError, message
|
102
|
-
elsif
|
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
|
-
|
112
|
-
|
113
|
-
|
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.
|
118
|
+
elsif !File.readable?(f)
|
119
119
|
if File.stat(f).uid != Process.uid
|
120
|
-
|
120
|
+
files_not_readable_and_owned_by_different_user << f
|
121
121
|
else
|
122
|
-
|
122
|
+
files_not_readable << f
|
123
123
|
end
|
124
124
|
elsif File.stat(f).uid != Process.uid
|
125
|
-
|
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
|
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
|
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
|
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
|
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
|
151
|
+
if files_not_readable.any?
|
152
152
|
Bundler.ui.warn "Files exist in the Bundler home that are not " \
|
153
|
-
"readable
|
153
|
+
"readable by the current user. These files are:\n - #{files_not_readable.join("\n - ")}"
|
154
154
|
|
155
155
|
ok = false
|
156
156
|
end
|
data/lib/bundler/cli/inject.rb
CHANGED
@@ -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 = ", :
|
39
|
-
source = ", :
|
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
|
data/lib/bundler/cli/lock.rb
CHANGED
@@ -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 |
|
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
|
-
|
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
|
data/lib/bundler/definition.rb
CHANGED
@@ -94,7 +94,7 @@ module Bundler
|
|
94
94
|
|
95
95
|
@locked_ruby_version = nil
|
96
96
|
@new_platforms = []
|
97
|
-
@
|
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 @
|
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
|
-
|
416
|
-
|
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
|
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
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
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
|
-
|
605
|
-
|
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
|
-
|
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
|
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}\""],
|
data/lib/bundler/errors.rb
CHANGED
@@ -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
|
|
data/lib/bundler/injector.rb
CHANGED
@@ -108,17 +108,17 @@ module Bundler
|
|
108
108
|
end
|
109
109
|
|
110
110
|
if d.groups != Array(:default)
|
111
|
-
group = d.groups.size == 1 ? ", :
|
111
|
+
group = d.groups.size == 1 ? ", group: #{d.groups.first.inspect}" : ", groups: #{d.groups.inspect}"
|
112
112
|
end
|
113
113
|
|
114
|
-
source = ", :
|
115
|
-
path = ", :
|
116
|
-
git = ", :
|
117
|
-
github = ", :
|
118
|
-
branch = ", :
|
119
|
-
ref = ", :
|
120
|
-
glob = ", :
|
121
|
-
require_path = ", :
|
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\-BINSTUBS" "1" "
|
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" "
|
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" "
|
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" "
|
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" "
|
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
|
94
|
+
A space-separated or `:`-separated list of groups referencing gems to skip during
|
95
|
+
installation.
|
92
96
|
|
93
97
|
* `with`:
|
94
|
-
|
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" "
|
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" "
|
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" "
|
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" "
|
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\.
|
78
|
-
Bundler\.
|
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.
|
112
|
-
Bundler.
|
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" "
|
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" "
|
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\-INFO" "1" "
|
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"
|
@@ -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\-INIT" "1" "
|
3
|
+
.TH "BUNDLE\-INIT" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-init\fR \- Generates a Gemfile into the current working 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\-INJECT" "1" "
|
3
|
+
.TH "BUNDLE\-INJECT" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
|
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\-INSTALL" "1" "
|
3
|
+
.TH "BUNDLE\-INSTALL" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
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\-LICENSES" "1" "
|
3
|
+
.TH "BUNDLE\-LICENSES" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-licenses\fR \- Print the license of all gems in the bundle
|
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\-LOCK" "1" "
|
3
|
+
.TH "BUNDLE\-LOCK" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
|
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\-OPEN" "1" "
|
3
|
+
.TH "BUNDLE\-OPEN" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
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\-OUTDATED" "1" "
|
3
|
+
.TH "BUNDLE\-OUTDATED" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
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\-PLATFORM" "1" "
|
3
|
+
.TH "BUNDLE\-PLATFORM" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-platform\fR \- Displays platform compatibility information
|
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\-PRISTINE" "1" "
|
3
|
+
.TH "BUNDLE\-PRISTINE" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
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\-SHOW" "1" "
|
3
|
+
.TH "BUNDLE\-SHOW" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
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\-UPDATE" "1" "
|
3
|
+
.TH "BUNDLE\-UPDATE" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
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\-VERSION" "1" "
|
3
|
+
.TH "BUNDLE\-VERSION" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-version\fR \- Prints Bundler version information
|
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\-VIZ" "1" "
|
3
|
+
.TH "BUNDLE\-VIZ" "1" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
|
6
6
|
.SH "SYNOPSIS"
|
data/lib/bundler/man/bundle.1
CHANGED
data/lib/bundler/man/gemfile.5
CHANGED
@@ -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 "GEMFILE" "5" "
|
3
|
+
.TH "GEMFILE" "5" "March 2025" ""
|
4
4
|
.SH "NAME"
|
5
5
|
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
|
6
6
|
.SH "SYNOPSIS"
|
data/lib/bundler/plugin/index.rb
CHANGED
@@ -48,35 +48,38 @@ module Bundler
|
|
48
48
|
@version.segments
|
49
49
|
end
|
50
50
|
|
51
|
-
def sort_obj
|
52
|
-
[@version, @priority]
|
53
|
-
end
|
54
|
-
|
55
51
|
def <=>(other)
|
56
52
|
return unless other.is_a?(self.class)
|
57
53
|
|
58
|
-
|
54
|
+
version_comparison = version <=> other.version
|
55
|
+
return version_comparison unless version_comparison.zero?
|
56
|
+
|
57
|
+
priority <=> other.priority
|
59
58
|
end
|
60
59
|
|
61
60
|
def ==(other)
|
62
61
|
return unless other.is_a?(self.class)
|
63
62
|
|
64
|
-
|
63
|
+
version == other.version && priority == other.priority
|
65
64
|
end
|
66
65
|
|
67
66
|
def eql?(other)
|
68
67
|
return unless other.is_a?(self.class)
|
69
68
|
|
70
|
-
|
69
|
+
version.eql?(other.version) && priority.eql?(other.priority)
|
71
70
|
end
|
72
71
|
|
73
72
|
def hash
|
74
|
-
|
73
|
+
[@version, @priority].hash
|
75
74
|
end
|
76
75
|
|
77
76
|
def to_s
|
78
77
|
@version.to_s
|
79
78
|
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
attr_reader :priority
|
80
83
|
end
|
81
84
|
end
|
82
85
|
end
|
@@ -115,6 +115,10 @@ module Bundler
|
|
115
115
|
raise NoSpaceOnDeviceError.new(path, action)
|
116
116
|
rescue Errno::ENOTSUP
|
117
117
|
raise OperationNotSupportedError.new(path, action)
|
118
|
+
rescue Errno::EPERM
|
119
|
+
raise OperationNotPermittedError.new(path, action)
|
120
|
+
rescue Errno::EROFS
|
121
|
+
raise ReadOnlyFileSystemError.new(path, action)
|
118
122
|
rescue Errno::EEXIST, Errno::ENOENT
|
119
123
|
raise
|
120
124
|
rescue SystemCallError => e
|
@@ -147,6 +147,12 @@ module Bundler
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
+
def installed_to?(destination)
|
151
|
+
# if copy_to is interrupted, it may leave a partially installed directory that
|
152
|
+
# contains .git but no other files -- consider this not to be installed
|
153
|
+
Dir.exist?(destination) && (Dir.children(destination) - [".git"]).any?
|
154
|
+
end
|
155
|
+
|
150
156
|
private
|
151
157
|
|
152
158
|
def git_remote_fetch(args)
|
data/lib/bundler/source/git.rb
CHANGED
@@ -360,7 +360,11 @@ module Bundler
|
|
360
360
|
end
|
361
361
|
|
362
362
|
def locked_revision_checked_out?
|
363
|
-
locked_revision && locked_revision == revision &&
|
363
|
+
locked_revision && locked_revision == revision && installed?
|
364
|
+
end
|
365
|
+
|
366
|
+
def installed?
|
367
|
+
git_proxy.installed_to?(install_path)
|
364
368
|
end
|
365
369
|
|
366
370
|
def base_name
|
@@ -16,6 +16,9 @@ module Bundler
|
|
16
16
|
@anonymized_uri = remove_auth(@uri).freeze
|
17
17
|
end
|
18
18
|
|
19
|
+
MAX_CACHE_SLUG_HOST_SIZE = 255 - 1 - 32 # 255 minus dot minus MD5 length
|
20
|
+
private_constant :MAX_CACHE_SLUG_HOST_SIZE
|
21
|
+
|
19
22
|
# @return [String] A slug suitable for use as a cache key for this
|
20
23
|
# remote.
|
21
24
|
#
|
@@ -28,10 +31,15 @@ module Bundler
|
|
28
31
|
host = cache_uri.to_s.start_with?("file://") ? nil : cache_uri.host
|
29
32
|
|
30
33
|
uri_parts = [host, cache_uri.user, cache_uri.port, cache_uri.path]
|
31
|
-
|
34
|
+
uri_parts.compact!
|
35
|
+
uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.join("."))
|
36
|
+
|
37
|
+
uri_parts.pop
|
38
|
+
host_parts = uri_parts.join(".")
|
39
|
+
return uri_digest if host_parts.empty?
|
32
40
|
|
33
|
-
|
34
|
-
|
41
|
+
shortened_host_parts = host_parts[0...MAX_CACHE_SLUG_HOST_SIZE]
|
42
|
+
[shortened_host_parts, uri_digest].join(".")
|
35
43
|
end
|
36
44
|
end
|
37
45
|
|
@@ -13,15 +13,19 @@ require_relative "rfc2396_parser"
|
|
13
13
|
require_relative "rfc3986_parser"
|
14
14
|
|
15
15
|
module Bundler::URI
|
16
|
+
# The default parser instance for RFC 2396.
|
16
17
|
RFC2396_PARSER = RFC2396_Parser.new
|
17
18
|
Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor)
|
18
19
|
|
20
|
+
# The default parser instance for RFC 3986.
|
19
21
|
RFC3986_PARSER = RFC3986_Parser.new
|
20
22
|
Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor)
|
21
23
|
|
24
|
+
# The default parser instance.
|
22
25
|
DEFAULT_PARSER = RFC3986_PARSER
|
23
26
|
Ractor.make_shareable(DEFAULT_PARSER) if defined?(Ractor)
|
24
27
|
|
28
|
+
# Set the default parser instance.
|
25
29
|
def self.parser=(parser = RFC3986_PARSER)
|
26
30
|
remove_const(:Parser) if defined?(::Bundler::URI::Parser)
|
27
31
|
const_set("Parser", parser.class)
|
@@ -40,7 +44,7 @@ module Bundler::URI
|
|
40
44
|
end
|
41
45
|
self.parser = RFC3986_PARSER
|
42
46
|
|
43
|
-
def self.const_missing(const)
|
47
|
+
def self.const_missing(const) # :nodoc:
|
44
48
|
if const == :REGEXP
|
45
49
|
warn "Bundler::URI::REGEXP is obsolete. Use Bundler::URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
|
46
50
|
Bundler::URI::RFC2396_REGEXP
|
@@ -87,7 +91,7 @@ module Bundler::URI
|
|
87
91
|
module_function :make_components_hash
|
88
92
|
end
|
89
93
|
|
90
|
-
module Schemes
|
94
|
+
module Schemes # :nodoc:
|
91
95
|
end
|
92
96
|
private_constant :Schemes
|
93
97
|
|
@@ -305,7 +309,7 @@ module Bundler::URI
|
|
305
309
|
256.times do |i|
|
306
310
|
TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
|
307
311
|
end
|
308
|
-
TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze
|
312
|
+
TBLENCURICOMP_ = TBLENCWWWCOMP_.dup.freeze # :nodoc:
|
309
313
|
TBLENCWWWCOMP_[' '] = '+'
|
310
314
|
TBLENCWWWCOMP_.freeze
|
311
315
|
TBLDECWWWCOMP_ = {} # :nodoc:
|
@@ -737,12 +737,12 @@ module Bundler::URI
|
|
737
737
|
end
|
738
738
|
private :check_registry
|
739
739
|
|
740
|
-
def set_registry(v)
|
740
|
+
def set_registry(v) # :nodoc:
|
741
741
|
raise InvalidURIError, "cannot set registry"
|
742
742
|
end
|
743
743
|
protected :set_registry
|
744
744
|
|
745
|
-
def registry=(v)
|
745
|
+
def registry=(v) # :nodoc:
|
746
746
|
raise InvalidURIError, "cannot set registry"
|
747
747
|
end
|
748
748
|
|
@@ -1133,17 +1133,16 @@ module Bundler::URI
|
|
1133
1133
|
base.fragment=(nil)
|
1134
1134
|
|
1135
1135
|
# RFC2396, Section 5.2, 4)
|
1136
|
-
if
|
1137
|
-
base.
|
1138
|
-
|
1139
|
-
|
1140
|
-
base.set_path(rel.path)
|
1136
|
+
if authority
|
1137
|
+
base.set_userinfo(rel.userinfo)
|
1138
|
+
base.set_host(rel.host)
|
1139
|
+
base.set_port(rel.port || base.default_port)
|
1140
|
+
base.set_path(rel.path)
|
1141
|
+
elsif base.path && rel.path
|
1142
|
+
base.set_path(merge_path(base.path, rel.path))
|
1141
1143
|
end
|
1142
1144
|
|
1143
1145
|
# RFC2396, Section 5.2, 7)
|
1144
|
-
base.set_userinfo(rel.userinfo) if rel.userinfo
|
1145
|
-
base.set_host(rel.host) if rel.host
|
1146
|
-
base.set_port(rel.port) if rel.port
|
1147
1146
|
base.query = rel.query if rel.query
|
1148
1147
|
base.fragment=(rel.fragment) if rel.fragment
|
1149
1148
|
|
@@ -1392,10 +1391,12 @@ module Bundler::URI
|
|
1392
1391
|
end
|
1393
1392
|
end
|
1394
1393
|
|
1394
|
+
# Returns the hash value.
|
1395
1395
|
def hash
|
1396
1396
|
self.component_ary.hash
|
1397
1397
|
end
|
1398
1398
|
|
1399
|
+
# Compares with _oth_ for Hash.
|
1399
1400
|
def eql?(oth)
|
1400
1401
|
self.class == oth.class &&
|
1401
1402
|
parser == oth.parser &&
|
@@ -1438,7 +1439,7 @@ module Bundler::URI
|
|
1438
1439
|
end
|
1439
1440
|
end
|
1440
1441
|
|
1441
|
-
def inspect
|
1442
|
+
def inspect # :nodoc:
|
1442
1443
|
"#<#{self.class} #{self}>"
|
1443
1444
|
end
|
1444
1445
|
|
@@ -321,14 +321,14 @@ module Bundler::URI
|
|
321
321
|
str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
|
322
322
|
end
|
323
323
|
|
324
|
-
|
325
|
-
if
|
326
|
-
def inspect
|
327
|
-
|
324
|
+
TO_S = Kernel.instance_method(:to_s) # :nodoc:
|
325
|
+
if TO_S.respond_to?(:bind_call)
|
326
|
+
def inspect # :nodoc:
|
327
|
+
TO_S.bind_call(self)
|
328
328
|
end
|
329
329
|
else
|
330
|
-
def inspect
|
331
|
-
|
330
|
+
def inspect # :nodoc:
|
331
|
+
TO_S.bind(self).call
|
332
332
|
end
|
333
333
|
end
|
334
334
|
|
data/lib/bundler/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.6.
|
4
|
+
version: 2.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- André Arko
|
@@ -21,7 +21,7 @@ authors:
|
|
21
21
|
- Yehuda Katz
|
22
22
|
bindir: exe
|
23
23
|
cert_chain: []
|
24
|
-
date: 2025-
|
24
|
+
date: 2025-03-13 00:00:00.000000000 Z
|
25
25
|
dependencies: []
|
26
26
|
description: Bundler manages an application's dependencies through its entire life,
|
27
27
|
across many machines, systematically and repeatably
|
@@ -411,7 +411,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
411
411
|
- !ruby/object:Gem::Version
|
412
412
|
version: 3.3.3
|
413
413
|
requirements: []
|
414
|
-
rubygems_version: 3.6.
|
414
|
+
rubygems_version: 3.6.6
|
415
415
|
specification_version: 4
|
416
416
|
summary: The best way to manage your application's dependencies
|
417
417
|
test_files: []
|