bundler 2.2.12 → 2.2.17
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 +79 -5
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli.rb +3 -2
- data/lib/bundler/cli/common.rb +15 -2
- data/lib/bundler/cli/gem.rb +31 -17
- data/lib/bundler/cli/outdated.rb +1 -1
- data/lib/bundler/compact_index_client/updater.rb +10 -6
- data/lib/bundler/current_ruby.rb +1 -0
- data/lib/bundler/definition.rb +49 -34
- data/lib/bundler/dsl.rb +36 -25
- data/lib/bundler/feature_flag.rb +0 -1
- data/lib/bundler/fetcher.rb +2 -1
- data/lib/bundler/fetcher/downloader.rb +8 -4
- data/lib/bundler/gem_helper.rb +16 -0
- data/lib/bundler/injector.rb +2 -2
- data/lib/bundler/inline.rb +2 -1
- data/lib/bundler/installer/parallel_installer.rb +36 -15
- data/lib/bundler/lazy_specification.rb +6 -1
- data/lib/bundler/lockfile_parser.rb +3 -13
- 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 +21 -4
- data/lib/bundler/man/bundle-config.1.ronn +21 -3
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +1 -1
- data/lib/bundler/man/bundle-gem.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-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-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-viz.1 +1 -1
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +1 -1
- data/lib/bundler/plugin.rb +3 -2
- data/lib/bundler/plugin/api/source.rb +7 -0
- data/lib/bundler/plugin/installer.rb +8 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/resolver.rb +34 -36
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/settings.rb +60 -10
- data/lib/bundler/source.rb +6 -0
- data/lib/bundler/source/metadata.rb +0 -4
- data/lib/bundler/source/path.rb +3 -1
- data/lib/bundler/source/path/installer.rb +1 -1
- data/lib/bundler/source/rubygems.rb +22 -6
- data/lib/bundler/source_list.rb +28 -21
- data/lib/bundler/spec_set.rb +18 -5
- data/lib/bundler/templates/Gemfile +1 -1
- data/lib/bundler/templates/gems.rb +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +5 -3
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.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: 2c654f563fcfd784d65d2441b1cf8b5384f9e90ff8d7107de070e33dba2ee729
|
|
4
|
+
data.tar.gz: 4554510c934d22551680c26ff77f0b1a1073f7d35c0b21030d103fd40ade6baf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c4c62c6eb0c7fc78acc3317de4dbaed2d26de9859bffd8930a08e7368829a4acb9f1bea24ad290a57124983bab8ac372da21573b742f50f4d36fa6a054406189
|
|
7
|
+
data.tar.gz: 1862e00690b660a6d872324c6e2819c29a48ee9e9d7d97bd0cf35a92f0ea7d008fd4f7921c3f917564a3fc3279ead82bf24a360f80ad63205b37e50975b232c9
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,77 @@
|
|
|
1
|
+
# 2.2.17 (May 5, 2021)
|
|
2
|
+
|
|
3
|
+
## Enhancements:
|
|
4
|
+
|
|
5
|
+
- Improve authentication required error message to include an alternative using `ENV` [#4565](https://github.com/rubygems/rubygems/pull/4565)
|
|
6
|
+
- Discard partial range responses without etag [#4563](https://github.com/rubygems/rubygems/pull/4563)
|
|
7
|
+
- Fix configuring ENV for a gem server with a name including dashes [#4571](https://github.com/rubygems/rubygems/pull/4571)
|
|
8
|
+
- Redact credentials from `bundle env` and `bundle config` [#4566](https://github.com/rubygems/rubygems/pull/4566)
|
|
9
|
+
- Redact all sources in verbose mode [#4564](https://github.com/rubygems/rubygems/pull/4564)
|
|
10
|
+
- Improve `bundle pristine` error if `BUNDLE_GEMFILE` does not exist [#4536](https://github.com/rubygems/rubygems/pull/4536)
|
|
11
|
+
- [CurrentRuby] Add 3.0 as a known minor [#4535](https://github.com/rubygems/rubygems/pull/4535)
|
|
12
|
+
- Prefer File.read instead of IO.read [#4530](https://github.com/rubygems/rubygems/pull/4530)
|
|
13
|
+
- Add space after open curly bracket in Gemfile and gems.rb template [#4518](https://github.com/rubygems/rubygems/pull/4518)
|
|
14
|
+
|
|
15
|
+
## Bug fixes:
|
|
16
|
+
|
|
17
|
+
- Make sure specs are fetched from the right source when materializing [#4562](https://github.com/rubygems/rubygems/pull/4562)
|
|
18
|
+
- Fix `bundle cache` with an up-to-date lockfile and specs not already installed [#4554](https://github.com/rubygems/rubygems/pull/4554)
|
|
19
|
+
- Ignore `deployment` setting in inline mode [#4523](https://github.com/rubygems/rubygems/pull/4523)
|
|
20
|
+
|
|
21
|
+
## Performance:
|
|
22
|
+
|
|
23
|
+
- Don't materialize resolutions when not necessary [#4556](https://github.com/rubygems/rubygems/pull/4556)
|
|
24
|
+
|
|
25
|
+
# 2.2.16 (April 8, 2021)
|
|
26
|
+
|
|
27
|
+
## Enhancements:
|
|
28
|
+
|
|
29
|
+
- Add `--github-username` option and config to `bundle gem` [#3687](https://github.com/rubygems/rubygems/pull/3687)
|
|
30
|
+
- Bump vendored `tmpdir` library copy [#4506](https://github.com/rubygems/rubygems/pull/4506)
|
|
31
|
+
- Add `rake build:checksum` task to build checksums for a gem package [#4156](https://github.com/rubygems/rubygems/pull/4156)
|
|
32
|
+
- Enable bundler-cache for GitHub Actions template [#4498](https://github.com/rubygems/rubygems/pull/4498)
|
|
33
|
+
- Improve `bundle info` error when gem is on a "disabled" group [#4492](https://github.com/rubygems/rubygems/pull/4492)
|
|
34
|
+
- Small tweak to yank message [#4494](https://github.com/rubygems/rubygems/pull/4494)
|
|
35
|
+
- Don't show duplicate entries in `bundle outdated` output [#4474](https://github.com/rubygems/rubygems/pull/4474)
|
|
36
|
+
- Never downgrade top level gems when running `bundle update` [#4473](https://github.com/rubygems/rubygems/pull/4473)
|
|
37
|
+
|
|
38
|
+
## Bug fixes:
|
|
39
|
+
|
|
40
|
+
- Fix incorrect logic for filtering metadata matching candidates [#4497](https://github.com/rubygems/rubygems/pull/4497)
|
|
41
|
+
|
|
42
|
+
# 2.2.15 (March 19, 2021)
|
|
43
|
+
|
|
44
|
+
## Enhancements:
|
|
45
|
+
|
|
46
|
+
- Add a hint about bundler installing executables for path gems [#4461](https://github.com/rubygems/rubygems/pull/4461)
|
|
47
|
+
- Warn lockfiles with incorrect resolutions [#4459](https://github.com/rubygems/rubygems/pull/4459)
|
|
48
|
+
- Don't generate duplicate redundant sources in the lockfile [#4456](https://github.com/rubygems/rubygems/pull/4456)
|
|
49
|
+
|
|
50
|
+
## Bug fixes:
|
|
51
|
+
|
|
52
|
+
- Respect running ruby when resolving platforms [#4449](https://github.com/rubygems/rubygems/pull/4449)
|
|
53
|
+
|
|
54
|
+
# 2.2.14 (March 8, 2021)
|
|
55
|
+
|
|
56
|
+
## Security fixes:
|
|
57
|
+
|
|
58
|
+
- Lock GEM sources separately and fix locally installed specs confusing bundler [#4381](https://github.com/rubygems/rubygems/pull/4381)
|
|
59
|
+
|
|
60
|
+
## Bug fixes:
|
|
61
|
+
|
|
62
|
+
- Make `rake` available to other gems' installers right after it's installed [#4428](https://github.com/rubygems/rubygems/pull/4428)
|
|
63
|
+
- Fix encoding issue on compact index updater [#4362](https://github.com/rubygems/rubygems/pull/4362)
|
|
64
|
+
|
|
65
|
+
# 2.2.13 (March 3, 2021)
|
|
66
|
+
|
|
67
|
+
## Enhancements:
|
|
68
|
+
|
|
69
|
+
- Respect user configured default branch in README links in new generated gems [#4303](https://github.com/rubygems/rubygems/pull/4303)
|
|
70
|
+
|
|
71
|
+
## Bug fixes:
|
|
72
|
+
|
|
73
|
+
- Fix gems sometimes being pulled from irrelevant sources [#4418](https://github.com/rubygems/rubygems/pull/4418)
|
|
74
|
+
|
|
1
75
|
# 2.2.12 (March 1, 2021)
|
|
2
76
|
|
|
3
77
|
## Bug fixes:
|
|
@@ -422,7 +496,7 @@
|
|
|
422
496
|
- Ignore `frozen` setting in inline mode ([#7125](https://github.com/rubygems/bundler/pull/7125))
|
|
423
497
|
- Fix incorrect "bundler attempted to update GEM but version stayed the same" message when updating git sourced gems ([#6325](https://github.com/rubygems/bundler/pull/6325))
|
|
424
498
|
- Don't check for existence of a writable home directory if `BUNDLE_USER_HOME` is set ([#6885](https://github.com/rubygems/bundler/pull/6885))
|
|
425
|
-
- Fix error message when server would respond to a bad username/password
|
|
499
|
+
- Fix error message when server would respond to a bad username/password request with a 401 ([#6928](https://github.com/rubygems/bundler/pull/6928))
|
|
426
500
|
- Fix `bundle outdated` pluralization when multiple groups are requested ([#7063](https://github.com/rubygems/bundler/pull/7063))
|
|
427
501
|
- Fix `bundle install` not updating conservatively when gemspec is changed ([#7143](https://github.com/rubygems/bundler/pull/7143))
|
|
428
502
|
- Fix `bundle exec` not respecting custom process titles inside scripts ([#7140](https://github.com/rubygems/bundler/pull/7140))
|
|
@@ -2067,7 +2141,7 @@ Changes
|
|
|
2067
2141
|
- fix Bundler.which for directories ([#2697](https://github.com/rubygems/bundler/issues/2697), @rhysd)
|
|
2068
2142
|
- properly require `Capistrano::Version` ([#2690](https://github.com/rubygems/bundler/issues/2690), @steveklabnik)
|
|
2069
2143
|
- search for git.exe and git
|
|
2070
|
-
- fix the bug that downloads every spec when API fetcher
|
|
2144
|
+
- fix the bug that downloads every spec when API fetcher encounters an error
|
|
2071
2145
|
- only retry network requests
|
|
2072
2146
|
|
|
2073
2147
|
# 1.4.0.rc.1 (September 29, 2013)
|
|
@@ -2691,7 +2765,7 @@ Changes
|
|
|
2691
2765
|
|
|
2692
2766
|
- Implement `to_ary` to avoid calls to method_missing (@tenderlove, [#1274](https://github.com/rubygems/bundler/issues/1274))
|
|
2693
2767
|
- bundle clean removes old .gem files (@cldwalker, [#1293](https://github.com/rubygems/bundler/issues/1293))
|
|
2694
|
-
-
|
|
2768
|
+
- Correctly identify missing child dependency in error message
|
|
2695
2769
|
- Run pre-install, post-build, and post-install gem hooks for git gems (@warhammerkid, [#1120](https://github.com/rubygems/bundler/issues/1120))
|
|
2696
2770
|
- create Gemfile.lock for empty Gemfile ([#1218](https://github.com/rubygems/bundler/issues/1218))
|
|
2697
2771
|
|
|
@@ -2842,7 +2916,7 @@ Changes
|
|
|
2842
2916
|
|
|
2843
2917
|
- Performance fix for MRI 1.9 (@efficientcloud, [#1288](https://github.com/rubygems/bundler/issues/1288))
|
|
2844
2918
|
- Shortcuts (like `bundle i`) for all commands (@amatsuda)
|
|
2845
|
-
-
|
|
2919
|
+
- Correctly identify missing child dependency in error message
|
|
2846
2920
|
|
|
2847
2921
|
## Bug fixes:
|
|
2848
2922
|
|
|
@@ -3078,7 +3152,7 @@ Changes
|
|
|
3078
3152
|
|
|
3079
3153
|
- Various bugfixes to the built-in rake helpers
|
|
3080
3154
|
- Fix a bug where shortrefs weren't unique enough and were
|
|
3081
|
-
|
|
3155
|
+
therefore colliding
|
|
3082
3156
|
- Fix a small bug involving checking whether a local git
|
|
3083
3157
|
clone is up to date
|
|
3084
3158
|
- Correctly handle explicit '=' dependencies with gems
|
|
@@ -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 = "2021-
|
|
8
|
-
@git_commit_sha = "
|
|
7
|
+
@built_at = "2021-05-05".freeze
|
|
8
|
+
@git_commit_sha = "69cbd6e10e".freeze
|
|
9
9
|
@release = true
|
|
10
10
|
# end ivars
|
|
11
11
|
|
data/lib/bundler/cli.rb
CHANGED
|
@@ -504,8 +504,8 @@ module Bundler
|
|
|
504
504
|
By default, setting a configuration value sets it for all projects
|
|
505
505
|
on the machine.
|
|
506
506
|
|
|
507
|
-
If a global setting is
|
|
508
|
-
will show the current value, as well as any
|
|
507
|
+
If a global setting is superseded by local configuration, this command
|
|
508
|
+
will show the current value, as well as any superseded values and
|
|
509
509
|
where they were specified.
|
|
510
510
|
D
|
|
511
511
|
require_relative "cli/config"
|
|
@@ -591,6 +591,7 @@ module Bundler
|
|
|
591
591
|
:desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
|
|
592
592
|
method_option :ci, :type => :string, :lazy_default => Bundler.settings["gem.ci"] || "",
|
|
593
593
|
:desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|travis|gitlab|circle)`"
|
|
594
|
+
method_option :github_username, :type => :string, :default => Bundler.settings["gem.github_username"], :banner => "Set your username on GitHub", :desc => "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."
|
|
594
595
|
|
|
595
596
|
def gem(name)
|
|
596
597
|
end
|
data/lib/bundler/cli/common.rb
CHANGED
|
@@ -36,10 +36,15 @@ module Bundler
|
|
|
36
36
|
def self.without_groups_message(command)
|
|
37
37
|
command_in_past_tense = command == :install ? "installed" : "updated"
|
|
38
38
|
groups = Bundler.settings[:without]
|
|
39
|
+
"Gems in the #{verbalize_groups(groups)} were not #{command_in_past_tense}."
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.verbalize_groups(groups)
|
|
43
|
+
groups.map!{|g| "'#{g}'" }
|
|
39
44
|
group_list = [groups[0...-1].join(", "), groups[-1..-1]].
|
|
40
45
|
reject {|s| s.to_s.empty? }.join(" and ")
|
|
41
46
|
group_str = groups.size == 1 ? "group" : "groups"
|
|
42
|
-
"
|
|
47
|
+
"#{group_str} #{group_list}"
|
|
43
48
|
end
|
|
44
49
|
|
|
45
50
|
def self.select_spec(name, regex_match = nil)
|
|
@@ -53,7 +58,13 @@ module Bundler
|
|
|
53
58
|
|
|
54
59
|
case specs.count
|
|
55
60
|
when 0
|
|
56
|
-
|
|
61
|
+
dep_in_other_group = Bundler.definition.current_dependencies.find {|dep|dep.name == name }
|
|
62
|
+
|
|
63
|
+
if dep_in_other_group
|
|
64
|
+
raise GemNotFound, "Could not find gem '#{name}', because it's in the #{verbalize_groups(dep_in_other_group.groups)}, configured to be ignored."
|
|
65
|
+
else
|
|
66
|
+
raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
|
|
67
|
+
end
|
|
57
68
|
when 1
|
|
58
69
|
specs.first
|
|
59
70
|
else
|
|
@@ -83,6 +94,8 @@ module Bundler
|
|
|
83
94
|
end
|
|
84
95
|
|
|
85
96
|
def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
|
|
97
|
+
return unless locked_gems
|
|
98
|
+
|
|
86
99
|
locked_names = locked_gems.specs.map(&:name).uniq
|
|
87
100
|
names.-(locked_names).each do |g|
|
|
88
101
|
raise GemNotFound, gem_not_found_message(g, locked_names)
|
data/lib/bundler/cli/gem.rb
CHANGED
|
@@ -39,11 +39,19 @@ module Bundler
|
|
|
39
39
|
constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
|
|
40
40
|
constant_array = constant_name.split("::")
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
use_git = Bundler.git_present? && options[:git]
|
|
43
43
|
|
|
44
|
-
git_author_name =
|
|
45
|
-
|
|
46
|
-
git_user_email =
|
|
44
|
+
git_author_name = use_git ? `git config user.name`.chomp : ""
|
|
45
|
+
git_username = use_git ? `git config github.user`.chomp : ""
|
|
46
|
+
git_user_email = use_git ? `git config user.email`.chomp : ""
|
|
47
|
+
|
|
48
|
+
github_username = if options[:github_username].nil?
|
|
49
|
+
git_username
|
|
50
|
+
elsif options[:github_username] == false
|
|
51
|
+
""
|
|
52
|
+
else
|
|
53
|
+
options[:github_username]
|
|
54
|
+
end
|
|
47
55
|
|
|
48
56
|
config = {
|
|
49
57
|
:name => name,
|
|
@@ -58,6 +66,7 @@ module Bundler
|
|
|
58
66
|
:ext => options[:ext],
|
|
59
67
|
:exe => options[:exe],
|
|
60
68
|
:bundler_version => bundler_dependency_version,
|
|
69
|
+
:git => use_git,
|
|
61
70
|
:github_username => github_username.empty? ? "[USERNAME]" : github_username,
|
|
62
71
|
:required_ruby_version => Gem.ruby_version < Gem::Version.new("2.4.a") ? "2.3.0" : "2.4.0",
|
|
63
72
|
}
|
|
@@ -79,7 +88,7 @@ module Bundler
|
|
|
79
88
|
bin/setup
|
|
80
89
|
]
|
|
81
90
|
|
|
82
|
-
templates.merge!("gitignore.tt" => ".gitignore") if
|
|
91
|
+
templates.merge!("gitignore.tt" => ".gitignore") if use_git
|
|
83
92
|
|
|
84
93
|
if test_framework = ask_and_set_test_framework
|
|
85
94
|
config[:test] = test_framework
|
|
@@ -175,24 +184,31 @@ module Bundler
|
|
|
175
184
|
)
|
|
176
185
|
end
|
|
177
186
|
|
|
187
|
+
if File.exist?(target) && !File.directory?(target)
|
|
188
|
+
Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
|
|
189
|
+
exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
if use_git
|
|
193
|
+
Bundler.ui.info "Initializing git repo in #{target}"
|
|
194
|
+
`git init #{target}`
|
|
195
|
+
|
|
196
|
+
config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp
|
|
197
|
+
end
|
|
198
|
+
|
|
178
199
|
templates.each do |src, dst|
|
|
179
200
|
destination = target.join(dst)
|
|
180
|
-
|
|
181
|
-
thor.template("newgem/#{src}", destination, config)
|
|
182
|
-
end
|
|
201
|
+
thor.template("newgem/#{src}", destination, config)
|
|
183
202
|
end
|
|
184
203
|
|
|
185
204
|
executables.each do |file|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
end
|
|
205
|
+
path = target.join(file)
|
|
206
|
+
executable = (path.stat.mode | 0o111)
|
|
207
|
+
path.chmod(executable)
|
|
190
208
|
end
|
|
191
209
|
|
|
192
|
-
if
|
|
193
|
-
Bundler.ui.info "Initializing git repo in #{target}"
|
|
210
|
+
if use_git
|
|
194
211
|
Dir.chdir(target) do
|
|
195
|
-
`git init`
|
|
196
212
|
`git add .`
|
|
197
213
|
end
|
|
198
214
|
end
|
|
@@ -202,8 +218,6 @@ module Bundler
|
|
|
202
218
|
|
|
203
219
|
Bundler.ui.info "Gem '#{name}' was successfully created. " \
|
|
204
220
|
"For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
|
|
205
|
-
rescue Errno::EEXIST => e
|
|
206
|
-
raise GenericSystemCallError.new(e, "There was a conflict while creating the new gem.")
|
|
207
221
|
end
|
|
208
222
|
|
|
209
223
|
private
|
data/lib/bundler/cli/outdated.rb
CHANGED
|
@@ -72,7 +72,7 @@ module Bundler
|
|
|
72
72
|
gemfile_specs + dependency_specs
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
specs.sort_by(&:name).each do |current_spec|
|
|
75
|
+
specs.sort_by(&:name).uniq(&:name).each do |current_spec|
|
|
76
76
|
next unless gems.empty? || gems.include?(current_spec.name)
|
|
77
77
|
|
|
78
78
|
active_spec = retrieve_active_spec(definition, current_spec)
|
|
@@ -50,16 +50,20 @@ module Bundler
|
|
|
50
50
|
|
|
51
51
|
content = response.body
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
|
|
54
|
+
correct_response = SharedHelpers.filesystem_access(local_temp_path) do
|
|
54
55
|
if response.is_a?(Net::HTTPPartialContent) && local_temp_path.size.nonzero?
|
|
55
56
|
local_temp_path.open("a") {|f| f << slice_body(content, 1..-1) }
|
|
57
|
+
|
|
58
|
+
etag_for(local_temp_path) == etag
|
|
56
59
|
else
|
|
57
|
-
local_temp_path.open("
|
|
60
|
+
local_temp_path.open("wb") {|f| f << content }
|
|
61
|
+
|
|
62
|
+
etag.length.zero? || etag_for(local_temp_path) == etag
|
|
58
63
|
end
|
|
59
64
|
end
|
|
60
65
|
|
|
61
|
-
|
|
62
|
-
if etag.length.zero? || etag_for(local_temp_path) == etag
|
|
66
|
+
if correct_response
|
|
63
67
|
SharedHelpers.filesystem_access(local_path) do
|
|
64
68
|
FileUtils.mv(local_temp_path, local_path)
|
|
65
69
|
end
|
|
@@ -92,11 +96,11 @@ module Bundler
|
|
|
92
96
|
|
|
93
97
|
def checksum_for_file(path)
|
|
94
98
|
return nil unless path.file?
|
|
95
|
-
# This must use
|
|
99
|
+
# This must use File.read instead of Digest.file().hexdigest
|
|
96
100
|
# because we need to preserve \n line endings on windows when calculating
|
|
97
101
|
# the checksum
|
|
98
102
|
SharedHelpers.filesystem_access(path, :read) do
|
|
99
|
-
SharedHelpers.digest(:MD5).hexdigest(
|
|
103
|
+
SharedHelpers.digest(:MD5).hexdigest(File.read(path))
|
|
100
104
|
end
|
|
101
105
|
end
|
|
102
106
|
end
|
data/lib/bundler/current_ruby.rb
CHANGED
data/lib/bundler/definition.rb
CHANGED
|
@@ -106,6 +106,17 @@ module Bundler
|
|
|
106
106
|
@locked_platforms = []
|
|
107
107
|
end
|
|
108
108
|
|
|
109
|
+
@locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
|
110
|
+
@disable_multisource = @locked_gem_sources.all?(&:disable_multisource?)
|
|
111
|
+
|
|
112
|
+
unless @disable_multisource
|
|
113
|
+
msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. You should run `bundle update` or generate your lockfile from scratch."
|
|
114
|
+
|
|
115
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
|
116
|
+
|
|
117
|
+
@sources.merged_gem_lockfile_sections!
|
|
118
|
+
end
|
|
119
|
+
|
|
109
120
|
@unlock[:gems] ||= []
|
|
110
121
|
@unlock[:sources] ||= []
|
|
111
122
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
|
@@ -145,17 +156,19 @@ module Bundler
|
|
|
145
156
|
end
|
|
146
157
|
end
|
|
147
158
|
|
|
159
|
+
def disable_multisource?
|
|
160
|
+
@disable_multisource
|
|
161
|
+
end
|
|
162
|
+
|
|
148
163
|
def resolve_with_cache!
|
|
149
|
-
raise "Specs already loaded" if @specs
|
|
150
164
|
sources.cached!
|
|
151
|
-
|
|
165
|
+
resolve
|
|
152
166
|
end
|
|
153
167
|
|
|
154
168
|
def resolve_remotely!
|
|
155
|
-
return if @specs
|
|
156
169
|
@remote = true
|
|
157
170
|
sources.remote!
|
|
158
|
-
|
|
171
|
+
resolve
|
|
159
172
|
end
|
|
160
173
|
|
|
161
174
|
# For given dependency list returns a SpecSet with Gemspec of all the required
|
|
@@ -172,10 +185,10 @@ module Bundler
|
|
|
172
185
|
gem_name, gem_version = extract_gem_info(e)
|
|
173
186
|
locked_gem = @locked_specs[gem_name].last
|
|
174
187
|
raise if locked_gem.nil? || locked_gem.version.to_s != gem_version || !@remote
|
|
175
|
-
raise GemNotFound, "Your bundle is locked to #{locked_gem}, but that version
|
|
176
|
-
"be found in
|
|
177
|
-
"
|
|
178
|
-
"
|
|
188
|
+
raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
|
|
189
|
+
"no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
|
|
190
|
+
"You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
|
|
191
|
+
"removed in order to install."
|
|
179
192
|
end
|
|
180
193
|
unless specs["bundler"].any?
|
|
181
194
|
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
|
@@ -264,7 +277,7 @@ module Bundler
|
|
|
264
277
|
# Run a resolve against the locally available gems
|
|
265
278
|
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
|
266
279
|
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
|
|
267
|
-
Resolver.resolve(expanded_dependencies,
|
|
280
|
+
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
|
268
281
|
end
|
|
269
282
|
end
|
|
270
283
|
end
|
|
@@ -530,6 +543,9 @@ module Bundler
|
|
|
530
543
|
attr_reader :sources
|
|
531
544
|
private :sources
|
|
532
545
|
|
|
546
|
+
attr_reader :locked_gem_sources
|
|
547
|
+
private :locked_gem_sources
|
|
548
|
+
|
|
533
549
|
def nothing_changed?
|
|
534
550
|
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
|
|
535
551
|
end
|
|
@@ -654,21 +670,20 @@ module Bundler
|
|
|
654
670
|
end
|
|
655
671
|
|
|
656
672
|
def converge_rubygems_sources
|
|
657
|
-
return false if
|
|
673
|
+
return false if disable_multisource?
|
|
658
674
|
|
|
659
|
-
|
|
675
|
+
return false if locked_gem_sources.empty?
|
|
660
676
|
|
|
661
|
-
# Get the RubyGems sources from the Gemfile.lock
|
|
662
|
-
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
|
663
677
|
# Get the RubyGems remotes from the Gemfile
|
|
664
678
|
actual_remotes = sources.rubygems_remotes
|
|
679
|
+
return false if actual_remotes.empty?
|
|
680
|
+
|
|
681
|
+
changes = false
|
|
665
682
|
|
|
666
683
|
# If there is a RubyGems source in both
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
|
671
|
-
end
|
|
684
|
+
locked_gem_sources.each do |locked_gem|
|
|
685
|
+
# Merge the remotes from the Gemfile into the Gemfile.lock
|
|
686
|
+
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
|
672
687
|
end
|
|
673
688
|
|
|
674
689
|
changes
|
|
@@ -893,30 +908,18 @@ module Bundler
|
|
|
893
908
|
# Record the specs available in each gem's source, so that those
|
|
894
909
|
# specs will be available later when the resolver knows where to
|
|
895
910
|
# look for that gemspec (or its dependencies)
|
|
896
|
-
|
|
897
|
-
source_requirements = { :default => default }
|
|
898
|
-
default = nil unless Bundler.feature_flag.disable_multisource?
|
|
899
|
-
dependencies.each do |dep|
|
|
900
|
-
next unless source = dep.source || default
|
|
901
|
-
source_requirements[dep.name] = source
|
|
902
|
-
end
|
|
911
|
+
source_requirements = { :default => sources.default_source }.merge(dependency_source_requirements)
|
|
903
912
|
metadata_dependencies.each do |dep|
|
|
904
913
|
source_requirements[dep.name] = sources.metadata_source
|
|
905
914
|
end
|
|
915
|
+
source_requirements[:global] = index unless Bundler.feature_flag.disable_multisource?
|
|
906
916
|
source_requirements[:default_bundler] = source_requirements["bundler"] || source_requirements[:default]
|
|
907
917
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
|
908
918
|
source_requirements
|
|
909
919
|
end
|
|
910
920
|
|
|
911
921
|
def pinned_spec_names(skip = nil)
|
|
912
|
-
|
|
913
|
-
default = Bundler.feature_flag.disable_multisource? && sources.default_source
|
|
914
|
-
@dependencies.each do |dep|
|
|
915
|
-
next unless dep_source = dep.source || default
|
|
916
|
-
next if dep_source == skip
|
|
917
|
-
pinned_names << dep.name
|
|
918
|
-
end
|
|
919
|
-
pinned_names
|
|
922
|
+
dependency_source_requirements.reject {|_, source| source == skip }.keys
|
|
920
923
|
end
|
|
921
924
|
|
|
922
925
|
def requested_groups
|
|
@@ -954,7 +957,7 @@ module Bundler
|
|
|
954
957
|
end
|
|
955
958
|
|
|
956
959
|
def additional_base_requirements_for_resolve
|
|
957
|
-
return [] unless @locked_gems
|
|
960
|
+
return [] unless @locked_gems
|
|
958
961
|
dependencies_by_name = dependencies.inject({}) {|memo, dep| memo.update(dep.name => dep) }
|
|
959
962
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
|
960
963
|
name = locked_spec.name
|
|
@@ -973,5 +976,17 @@ module Bundler
|
|
|
973
976
|
|
|
974
977
|
Bundler.settings[:allow_deployment_source_credential_changes] && source.equivalent_remotes?(sources.rubygems_remotes)
|
|
975
978
|
end
|
|
979
|
+
|
|
980
|
+
def dependency_source_requirements
|
|
981
|
+
@dependency_source_requirements ||= begin
|
|
982
|
+
source_requirements = {}
|
|
983
|
+
default = sources.default_source
|
|
984
|
+
dependencies.each do |dep|
|
|
985
|
+
dep_source = dep.source || default
|
|
986
|
+
source_requirements[dep.name] = dep_source
|
|
987
|
+
end
|
|
988
|
+
source_requirements
|
|
989
|
+
end
|
|
990
|
+
end
|
|
976
991
|
end
|
|
977
992
|
end
|