rubygems-update 3.5.5 → 3.5.10
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 +107 -0
- data/Manifest.txt +84 -64
- data/POLICIES.md +75 -6
- data/bundler/CHANGELOG.md +75 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +5 -4
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli.rb +7 -24
- data/bundler/lib/bundler/definition.rb +111 -56
- data/bundler/lib/bundler/dependency.rb +2 -1
- data/bundler/lib/bundler/dsl.rb +16 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +2 -2
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -38
- data/bundler/lib/bundler/injector.rb +3 -2
- data/bundler/lib/bundler/installer.rb +2 -2
- data/bundler/lib/bundler/man/bundle-add.1 +1 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +3 -1
- data/bundler/lib/bundler/man/bundle-check.1.ronn +3 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +1 -3
- data/bundler/lib/bundler/man/bundle-config.1.ronn +0 -3
- data/bundler/lib/bundler/man/bundle-console.1 +1 -1
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
- data/bundler/lib/bundler/man/bundle-help.1 +1 -1
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +3 -3
- data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
- data/bundler/lib/bundler/man/bundle-plugin.1 +7 -4
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +1 -1
- data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +3 -3
- data/bundler/lib/bundler/man/gemfile.5.ronn +2 -2
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +2 -2
- data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
- data/bundler/lib/bundler/plugin/installer.rb +36 -16
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/resolver/candidate.rb +1 -1
- data/bundler/lib/bundler/resolver.rb +54 -24
- data/bundler/lib/bundler/rubygems_ext.rb +12 -0
- data/bundler/lib/bundler/runtime.rb +1 -1
- data/bundler/lib/bundler/self_manager.rb +1 -1
- data/bundler/lib/bundler/settings.rb +14 -12
- data/bundler/lib/bundler/setup.rb +3 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +1 -1
- data/bundler/lib/bundler/source/git.rb +1 -1
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +7 -20
- data/bundler/lib/bundler/source_list.rb +17 -4
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +4 -3
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/uri_credentials_filter.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +22 -22
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendored_net_http.rb +7 -3
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -0
- data/bundler/lib/bundler.rb +23 -2
- data/lib/rubygems/command.rb +1 -1
- data/lib/rubygems/command_manager.rb +2 -1
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/rdoc_command.rb +1 -8
- data/lib/rubygems/commands/rebuild_command.rb +264 -0
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/update_command.rb +8 -9
- data/lib/rubygems/config_file.rb +20 -8
- data/lib/rubygems/defaults.rb +4 -4
- data/lib/rubygems/dependency.rb +2 -2
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/ext/cargo_builder.rb +1 -1
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +40 -23
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/local_remote_options.rb +6 -6
- data/lib/rubygems/package.rb +13 -7
- data/lib/rubygems/remote_fetcher.rb +3 -3
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set.rb +1 -1
- data/lib/rubygems/requirement.rb +5 -0
- data/lib/rubygems/resolver/api_set.rb +1 -1
- data/lib/rubygems/resolver/best_set.rb +1 -1
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +5 -5
- data/lib/rubygems/s3_uri_signer.rb +3 -3
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +2 -2
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/specification.rb +6 -6
- data/lib/rubygems/specification_policy.rb +15 -7
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/util/licenses.rb +43 -0
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +3 -3
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +30 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +15 -15
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +11 -11
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +1 -1
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/LICENSE.txt +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +853 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1588 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/yaml_serializer.rb +12 -0
- data/lib/rubygems.rb +2 -2
- data/rubygems-update.gemspec +7 -2
- metadata +90 -67
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort.rb +0 -3
- /data/lib/rubygems/{net-http → vendor/molinillo}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-http}/.document +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/backward.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/net-protocol}/.document +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{resolv → vendor/optparse}/.document +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/COPYING +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +0 -0
- /data/lib/rubygems/{resolver/molinillo → vendor/resolv}/.document +0 -0
- /data/lib/rubygems/{resolv → vendor/resolv}/LICENSE.txt +0 -0
- /data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +0 -0
- /data/lib/rubygems/{timeout → vendor/timeout}/.document +0 -0
- /data/lib/rubygems/{timeout → vendor/timeout}/LICENSE.txt +0 -0
- /data/lib/rubygems/{tsort → vendor/tsort}/.document +0 -0
- /data/lib/rubygems/{tsort → vendor/tsort}/LICENSE.txt +0 -0
data/bundler/lib/bundler/cli.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative "vendored_thor"
|
|
5
5
|
module Bundler
|
6
6
|
class CLI < Thor
|
7
7
|
require_relative "cli/common"
|
8
|
+
require_relative "cli/install"
|
8
9
|
|
9
10
|
package_name "Bundler"
|
10
11
|
|
@@ -69,7 +70,7 @@ module Bundler
|
|
69
70
|
Bundler.settings.set_command_option_if_given :retry, options[:retry]
|
70
71
|
|
71
72
|
current_cmd = args.last[:current_command].name
|
72
|
-
auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
|
73
|
+
Bundler.auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
|
73
74
|
rescue UnknownArgumentError => e
|
74
75
|
raise InvalidOption, e.message
|
75
76
|
ensure
|
@@ -114,6 +115,8 @@ module Bundler
|
|
114
115
|
class_option "verbose", type: :boolean, desc: "Enable verbose output mode", aliases: "-V"
|
115
116
|
|
116
117
|
def help(cli = nil)
|
118
|
+
cli = self.class.all_aliases[cli] if self.class.all_aliases[cli]
|
119
|
+
|
117
120
|
case cli
|
118
121
|
when "gemfile" then command = "gemfile"
|
119
122
|
when nil then command = "bundle"
|
@@ -347,6 +350,7 @@ module Bundler
|
|
347
350
|
method_option "github", type: :string
|
348
351
|
method_option "branch", type: :string
|
349
352
|
method_option "ref", type: :string
|
353
|
+
method_option "glob", type: :string, banner: "The location of a dependency's .gemspec, expanded within Ruby (single quotes recommended)"
|
350
354
|
method_option "skip-install", type: :boolean, banner: "Adds gem to the Gemfile but does not install it"
|
351
355
|
method_option "optimistic", type: :boolean, banner: "Adds optimistic declaration of version to gem"
|
352
356
|
method_option "strict", type: :boolean, banner: "Adds strict declaration of version to gem"
|
@@ -620,7 +624,7 @@ module Bundler
|
|
620
624
|
method_option "major", type: :boolean, banner: "If updating, prefer updating to next major version (default)"
|
621
625
|
method_option "pre", type: :boolean, banner: "If updating, always choose the highest allowed version, regardless of prerelease status"
|
622
626
|
method_option "strict", type: :boolean, banner: "If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
|
623
|
-
method_option "conservative", type: :boolean, banner:
|
627
|
+
method_option "conservative", type: :boolean, banner: "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
|
624
628
|
method_option "bundler", type: :string, lazy_default: "> 0.a", banner: "Update the locked version of bundler"
|
625
629
|
def lock
|
626
630
|
require_relative "cli/lock"
|
@@ -682,7 +686,6 @@ module Bundler
|
|
682
686
|
exec_used = args.index {|a| exec_commands.include? a }
|
683
687
|
|
684
688
|
command = args.find {|a| bundler_commands.include? a }
|
685
|
-
command = all_aliases[command] if all_aliases[command]
|
686
689
|
|
687
690
|
if exec_used && help_used
|
688
691
|
if exec_used + help_used == 1
|
@@ -735,26 +738,6 @@ module Bundler
|
|
735
738
|
|
736
739
|
private
|
737
740
|
|
738
|
-
# Automatically invoke `bundle install` and resume if
|
739
|
-
# Bundler.settings[:auto_install] exists. This is set through config cmd
|
740
|
-
# `bundle config set --global auto_install 1`.
|
741
|
-
#
|
742
|
-
# Note that this method `nil`s out the global Definition object, so it
|
743
|
-
# should be called first, before you instantiate anything like an
|
744
|
-
# `Installer` that'll keep a reference to the old one instead.
|
745
|
-
def auto_install
|
746
|
-
return unless Bundler.settings[:auto_install]
|
747
|
-
|
748
|
-
begin
|
749
|
-
Bundler.definition.specs
|
750
|
-
rescue GemNotFound, GitError
|
751
|
-
Bundler.ui.info "Automatically installing missing gems."
|
752
|
-
Bundler.reset!
|
753
|
-
invoke :install, []
|
754
|
-
Bundler.reset!
|
755
|
-
end
|
756
|
-
end
|
757
|
-
|
758
741
|
def current_command
|
759
742
|
_, _, config = @_initializer
|
760
743
|
config[:current_command]
|
@@ -785,7 +768,7 @@ module Bundler
|
|
785
768
|
return unless SharedHelpers.md5_available?
|
786
769
|
|
787
770
|
latest = Fetcher::CompactIndex.
|
788
|
-
new(nil, Source::Rubygems::Remote.new(
|
771
|
+
new(nil, Source::Rubygems::Remote.new(Gem::URI("https://rubygems.org")), nil, nil).
|
789
772
|
send(:compact_index_client).
|
790
773
|
instance_variable_get(:@cache).
|
791
774
|
dependencies("bundler").
|
@@ -92,11 +92,12 @@ module Bundler
|
|
92
92
|
@platforms = @locked_platforms.dup
|
93
93
|
@locked_bundler_version = @locked_gems.bundler_version
|
94
94
|
@locked_ruby_version = @locked_gems.ruby_version
|
95
|
+
@originally_locked_deps = @locked_gems.dependencies
|
95
96
|
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
|
96
97
|
@locked_checksums = @locked_gems.checksums
|
97
98
|
|
98
99
|
if unlock != true
|
99
|
-
@locked_deps = @
|
100
|
+
@locked_deps = @originally_locked_deps
|
100
101
|
@locked_specs = @originally_locked_specs
|
101
102
|
@locked_sources = @locked_gems.sources
|
102
103
|
else
|
@@ -111,6 +112,7 @@ module Bundler
|
|
111
112
|
@locked_gems = nil
|
112
113
|
@locked_deps = {}
|
113
114
|
@locked_specs = SpecSet.new([])
|
115
|
+
@originally_locked_deps = {}
|
114
116
|
@originally_locked_specs = @locked_specs
|
115
117
|
@locked_sources = []
|
116
118
|
@locked_platforms = []
|
@@ -130,7 +132,7 @@ module Bundler
|
|
130
132
|
@sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
|
131
133
|
end
|
132
134
|
|
133
|
-
@unlock
|
135
|
+
@sources_to_unlock = @unlock.delete(:sources) || []
|
134
136
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
135
137
|
@ruby_version.diff(locked_ruby_version_object)
|
136
138
|
end
|
@@ -142,11 +144,13 @@ module Bundler
|
|
142
144
|
@path_changes = converge_paths
|
143
145
|
@source_changes = converge_sources
|
144
146
|
|
147
|
+
@explicit_unlocks = @unlock.delete(:gems) || []
|
148
|
+
|
145
149
|
if @unlock[:conservative]
|
146
|
-
@
|
150
|
+
@gems_to_unlock = @explicit_unlocks.any? ? @explicit_unlocks : @dependencies.map(&:name)
|
147
151
|
else
|
148
|
-
eager_unlock =
|
149
|
-
@
|
152
|
+
eager_unlock = @explicit_unlocks.map {|name| Dependency.new(name, ">= 0") }
|
153
|
+
@gems_to_unlock = @locked_specs.for(eager_unlock, false, platforms).map(&:name).uniq
|
150
154
|
end
|
151
155
|
|
152
156
|
@dependency_changes = converge_dependencies
|
@@ -225,7 +229,6 @@ module Bundler
|
|
225
229
|
@resolver = nil
|
226
230
|
@resolution_packages = nil
|
227
231
|
@specs = nil
|
228
|
-
@gem_version_promoter = nil
|
229
232
|
|
230
233
|
Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
|
231
234
|
true
|
@@ -320,38 +323,26 @@ module Bundler
|
|
320
323
|
dependencies.map(&:groups).flatten.uniq
|
321
324
|
end
|
322
325
|
|
323
|
-
def lock(
|
324
|
-
|
325
|
-
|
326
|
-
|
326
|
+
def lock(file_or_preserve_unknown_sections = false, preserve_unknown_sections_or_unused = false)
|
327
|
+
if [true, false, nil].include?(file_or_preserve_unknown_sections)
|
328
|
+
target_lockfile = lockfile || Bundler.default_lockfile
|
329
|
+
preserve_unknown_sections = file_or_preserve_unknown_sections
|
330
|
+
else
|
331
|
+
target_lockfile = file_or_preserve_unknown_sections
|
332
|
+
preserve_unknown_sections = preserve_unknown_sections_or_unused
|
327
333
|
|
328
|
-
|
329
|
-
|
330
|
-
|
334
|
+
suggestion = if target_lockfile == lockfile
|
335
|
+
"To fix this warning, remove it from the `Definition#lock` call."
|
336
|
+
else
|
337
|
+
"Instead, instantiate a new definition passing `#{target_lockfile}`, and call `lock` without a file argument on that definition"
|
338
|
+
end
|
331
339
|
|
332
|
-
|
333
|
-
locked_major = @locked_bundler_version.segments.first
|
334
|
-
current_major = bundler_version_to_lock.segments.first
|
340
|
+
msg = "`Definition#lock` was passed a target file argument. #{suggestion}"
|
335
341
|
|
336
|
-
|
342
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
337
343
|
end
|
338
344
|
|
339
|
-
|
340
|
-
|
341
|
-
if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
342
|
-
return if Bundler.frozen_bundle?
|
343
|
-
SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
|
344
|
-
return
|
345
|
-
end
|
346
|
-
|
347
|
-
if Bundler.frozen_bundle?
|
348
|
-
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
349
|
-
return
|
350
|
-
end
|
351
|
-
|
352
|
-
SharedHelpers.filesystem_access(file) do |p|
|
353
|
-
File.open(p, "wb") {|f| f.puts(contents) }
|
354
|
-
end
|
345
|
+
write_lock(target_lockfile, preserve_unknown_sections)
|
355
346
|
end
|
356
347
|
|
357
348
|
def locked_ruby_version
|
@@ -518,7 +509,45 @@ module Bundler
|
|
518
509
|
end
|
519
510
|
|
520
511
|
def lockfile_exists?
|
521
|
-
|
512
|
+
file_exists?(lockfile)
|
513
|
+
end
|
514
|
+
|
515
|
+
def file_exists?(file)
|
516
|
+
file && File.exist?(file)
|
517
|
+
end
|
518
|
+
|
519
|
+
def write_lock(file, preserve_unknown_sections)
|
520
|
+
return if Definition.no_lock
|
521
|
+
|
522
|
+
contents = to_lock
|
523
|
+
|
524
|
+
# Convert to \r\n if the existing lock has them
|
525
|
+
# i.e., Windows with `git config core.autocrlf=true`
|
526
|
+
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")
|
527
|
+
|
528
|
+
if @locked_bundler_version
|
529
|
+
locked_major = @locked_bundler_version.segments.first
|
530
|
+
current_major = bundler_version_to_lock.segments.first
|
531
|
+
|
532
|
+
updating_major = locked_major < current_major
|
533
|
+
end
|
534
|
+
|
535
|
+
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
536
|
+
|
537
|
+
if file_exists?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
538
|
+
return if Bundler.frozen_bundle?
|
539
|
+
SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
|
540
|
+
return
|
541
|
+
end
|
542
|
+
|
543
|
+
if Bundler.frozen_bundle?
|
544
|
+
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
545
|
+
return
|
546
|
+
end
|
547
|
+
|
548
|
+
SharedHelpers.filesystem_access(file) do |p|
|
549
|
+
File.open(p, "wb") {|f| f.puts(contents) }
|
550
|
+
end
|
522
551
|
end
|
523
552
|
|
524
553
|
def resolver
|
@@ -540,8 +569,10 @@ module Bundler
|
|
540
569
|
@resolution_packages ||= begin
|
541
570
|
last_resolve = converge_locked_specs
|
542
571
|
remove_invalid_platforms!(current_dependencies)
|
543
|
-
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @
|
544
|
-
|
572
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @gems_to_unlock, prerelease: gem_version_promoter.pre?)
|
573
|
+
packages = additional_base_requirements_to_prevent_downgrades(packages, last_resolve)
|
574
|
+
packages = additional_base_requirements_to_force_updates(packages)
|
575
|
+
packages
|
545
576
|
end
|
546
577
|
end
|
547
578
|
|
@@ -645,14 +676,18 @@ module Bundler
|
|
645
676
|
|
646
677
|
def change_reason
|
647
678
|
if unlocking?
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
679
|
+
unlock_targets = if @gems_to_unlock.any?
|
680
|
+
["gems", @gems_to_unlock]
|
681
|
+
elsif @sources_to_unlock.any?
|
682
|
+
["sources", @sources_to_unlock]
|
683
|
+
end
|
684
|
+
|
685
|
+
unlock_reason = if unlock_targets
|
686
|
+
"#{unlock_targets.first}: (#{unlock_targets.last.join(", ")})"
|
687
|
+
else
|
688
|
+
@unlock[:ruby] ? "ruby" : ""
|
689
|
+
end
|
690
|
+
|
656
691
|
return "bundler is unlocking #{unlock_reason}"
|
657
692
|
end
|
658
693
|
[
|
@@ -707,7 +742,7 @@ module Bundler
|
|
707
742
|
spec = @dependencies.find {|s| s.name == k }
|
708
743
|
source = spec&.source
|
709
744
|
if source&.respond_to?(:local_override!)
|
710
|
-
source.unlock! if @
|
745
|
+
source.unlock! if @gems_to_unlock.include?(spec.name)
|
711
746
|
locals << [source, source.local_override!(v)]
|
712
747
|
end
|
713
748
|
end
|
@@ -715,7 +750,7 @@ module Bundler
|
|
715
750
|
sources_with_changes = locals.select do |source, changed|
|
716
751
|
changed || specs_changed?(source)
|
717
752
|
end.map(&:first)
|
718
|
-
!sources_with_changes.each {|source| @
|
753
|
+
!sources_with_changes.each {|source| @sources_to_unlock << source.name }.empty?
|
719
754
|
end
|
720
755
|
|
721
756
|
def check_lockfile
|
@@ -792,7 +827,7 @@ module Bundler
|
|
792
827
|
# gem), unlock it. For git sources, this means to unlock the revision, which
|
793
828
|
# will cause the `ref` used to be the most recent for the branch (or master) if
|
794
829
|
# an explicit `ref` is not used.
|
795
|
-
if source.respond_to?(:unlock!) && @
|
830
|
+
if source.respond_to?(:unlock!) && @sources_to_unlock.include?(source.name)
|
796
831
|
source.unlock!
|
797
832
|
changes = true
|
798
833
|
end
|
@@ -809,9 +844,7 @@ module Bundler
|
|
809
844
|
dep.source = sources.get(dep.source)
|
810
845
|
end
|
811
846
|
|
812
|
-
|
813
|
-
|
814
|
-
unless locked_dep = @locked_deps[dep.name]
|
847
|
+
unless locked_dep = @originally_locked_deps[dep.name]
|
815
848
|
changes = true
|
816
849
|
next
|
817
850
|
end
|
@@ -838,7 +871,7 @@ module Bundler
|
|
838
871
|
def converge_locked_specs
|
839
872
|
converged = converge_specs(@locked_specs)
|
840
873
|
|
841
|
-
resolve = SpecSet.new(converged.reject {|s| @
|
874
|
+
resolve = SpecSet.new(converged.reject {|s| @gems_to_unlock.include?(s.name) })
|
842
875
|
|
843
876
|
diff = nil
|
844
877
|
|
@@ -871,7 +904,7 @@ module Bundler
|
|
871
904
|
|
872
905
|
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
873
906
|
deps << dep if !dep.source || lockfile_source.include?(dep.source)
|
874
|
-
@
|
907
|
+
@gems_to_unlock << name if lockfile_source.include?(dep.source) && lockfile_source != gemfile_source
|
875
908
|
|
876
909
|
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
877
910
|
s.source = gemfile_source
|
@@ -880,7 +913,7 @@ module Bundler
|
|
880
913
|
s.source = default_source unless sources.get(lockfile_source)
|
881
914
|
end
|
882
915
|
|
883
|
-
next if @
|
916
|
+
next if @sources_to_unlock.include?(s.source.name)
|
884
917
|
|
885
918
|
# Path sources have special logic
|
886
919
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
@@ -902,12 +935,12 @@ module Bundler
|
|
902
935
|
else
|
903
936
|
# If the spec is no longer in the path source, unlock it. This
|
904
937
|
# commonly happens if the version changed in the gemspec
|
905
|
-
@
|
938
|
+
@gems_to_unlock << name
|
906
939
|
end
|
907
940
|
end
|
908
941
|
|
909
942
|
if dep.nil? && requested_dependencies.find {|d| name == d.name }
|
910
|
-
@
|
943
|
+
@gems_to_unlock << s.name
|
911
944
|
else
|
912
945
|
converged << s
|
913
946
|
end
|
@@ -984,7 +1017,7 @@ module Bundler
|
|
984
1017
|
current == proposed
|
985
1018
|
end
|
986
1019
|
|
987
|
-
def
|
1020
|
+
def additional_base_requirements_to_prevent_downgrades(resolution_packages, last_resolve)
|
988
1021
|
return resolution_packages unless @locked_gems && !sources.expired_sources?(@locked_gems.sources)
|
989
1022
|
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
990
1023
|
next if locked_spec.source.is_a?(Source::Path)
|
@@ -993,6 +1026,28 @@ module Bundler
|
|
993
1026
|
resolution_packages
|
994
1027
|
end
|
995
1028
|
|
1029
|
+
def additional_base_requirements_to_force_updates(resolution_packages)
|
1030
|
+
return resolution_packages if @explicit_unlocks.empty?
|
1031
|
+
full_update = dup_for_full_unlock.resolve
|
1032
|
+
@explicit_unlocks.each do |name|
|
1033
|
+
version = full_update[name].first&.version
|
1034
|
+
resolution_packages.base_requirements[name] = Gem::Requirement.new("= #{version}") if version
|
1035
|
+
end
|
1036
|
+
resolution_packages
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
def dup_for_full_unlock
|
1040
|
+
unlocked_definition = self.class.new(@lockfile, @dependencies, @sources, true, @ruby_version, @optional_groups, @gemfiles)
|
1041
|
+
unlocked_definition.resolution_mode = { "local" => !@remote }
|
1042
|
+
unlocked_definition.setup_sources_for_resolve
|
1043
|
+
unlocked_definition.gem_version_promoter.tap do |gvp|
|
1044
|
+
gvp.level = gem_version_promoter.level
|
1045
|
+
gvp.strict = gem_version_promoter.strict
|
1046
|
+
gvp.pre = gem_version_promoter.pre
|
1047
|
+
end
|
1048
|
+
unlocked_definition
|
1049
|
+
end
|
1050
|
+
|
996
1051
|
def remove_invalid_platforms!(dependencies)
|
997
1052
|
return if Bundler.frozen_bundle?
|
998
1053
|
|
@@ -7,7 +7,7 @@ require_relative "rubygems_ext"
|
|
7
7
|
module Bundler
|
8
8
|
class Dependency < Gem::Dependency
|
9
9
|
attr_reader :autorequire
|
10
|
-
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
|
10
|
+
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref, :glob
|
11
11
|
|
12
12
|
ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..34).to_a).freeze
|
13
13
|
PLATFORM_MAP = {
|
@@ -39,6 +39,7 @@ module Bundler
|
|
39
39
|
@github = options["github"]
|
40
40
|
@branch = options["branch"]
|
41
41
|
@ref = options["ref"]
|
42
|
+
@glob = options["glob"]
|
42
43
|
@platforms = Array(options["platforms"])
|
43
44
|
@env = options["env"]
|
44
45
|
@should_include = options.fetch("should_include", true)
|
data/bundler/lib/bundler/dsl.rb
CHANGED
@@ -19,6 +19,7 @@ module Bundler
|
|
19
19
|
platform platforms type source install_if gemfile force_ruby_platform].freeze
|
20
20
|
|
21
21
|
GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
|
22
|
+
GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}
|
22
23
|
|
23
24
|
attr_reader :gemspecs, :gemfile
|
24
25
|
attr_accessor :dependencies
|
@@ -46,7 +47,7 @@ module Bundler
|
|
46
47
|
@gemfile = expanded_gemfile_path
|
47
48
|
@gemfiles << expanded_gemfile_path
|
48
49
|
contents ||= Bundler.read_file(@gemfile.to_s)
|
49
|
-
instance_eval(contents, gemfile.to_s, 1)
|
50
|
+
instance_eval(contents, @gemfile.to_s, 1)
|
50
51
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
51
52
|
message = "There was an error " \
|
52
53
|
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
|
@@ -308,6 +309,20 @@ module Bundler
|
|
308
309
|
repo_name ||= user_name
|
309
310
|
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
310
311
|
end
|
312
|
+
|
313
|
+
git_source(:gitlab) do |repo_name|
|
314
|
+
if repo_name =~ GITLAB_MERGE_REQUEST_URL
|
315
|
+
{
|
316
|
+
"git" => "https://gitlab.com/#{$1}.git",
|
317
|
+
"branch" => nil,
|
318
|
+
"ref" => "refs/merge-requests/#{$2}/head",
|
319
|
+
"tag" => nil,
|
320
|
+
}
|
321
|
+
else
|
322
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
323
|
+
"https://gitlab.com/#{repo_name}.git"
|
324
|
+
end
|
325
|
+
end
|
311
326
|
end
|
312
327
|
|
313
328
|
def with_source(source)
|
@@ -19,14 +19,7 @@ module Bundler
|
|
19
19
|
BUNDLER_PREFIX = "BUNDLER_ORIG_"
|
20
20
|
|
21
21
|
def self.from_env
|
22
|
-
new(
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.env_to_hash(env)
|
26
|
-
to_hash = env.to_hash
|
27
|
-
return to_hash unless Gem.win_platform?
|
28
|
-
|
29
|
-
to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
|
22
|
+
new(ENV.to_hash, BUNDLER_KEYS)
|
30
23
|
end
|
31
24
|
|
32
25
|
# @param env [Hash]
|
@@ -39,18 +32,7 @@ module Bundler
|
|
39
32
|
|
40
33
|
# Replaces `ENV` with the bundler environment variables backed up
|
41
34
|
def replace_with_backup
|
42
|
-
|
43
|
-
ENV.replace(backup)
|
44
|
-
return
|
45
|
-
end
|
46
|
-
|
47
|
-
# Fallback logic for Windows below to workaround
|
48
|
-
# https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
|
49
|
-
# supported rubies include the fix for that.
|
50
|
-
|
51
|
-
ENV.clear
|
52
|
-
|
53
|
-
backup.each {|k, v| ENV[k] = v }
|
35
|
+
ENV.replace(backup)
|
54
36
|
end
|
55
37
|
|
56
38
|
# @return [Hash]
|
@@ -58,9 +40,9 @@ module Bundler
|
|
58
40
|
env = @original.clone
|
59
41
|
@keys.each do |key|
|
60
42
|
value = env[key]
|
61
|
-
if !value.nil?
|
43
|
+
if !value.nil?
|
62
44
|
env[@prefix + key] ||= value
|
63
|
-
|
45
|
+
else
|
64
46
|
env[@prefix + key] ||= INTENTIONALLY_NIL
|
65
47
|
end
|
66
48
|
end
|
@@ -72,7 +54,7 @@ module Bundler
|
|
72
54
|
env = @original.clone
|
73
55
|
@keys.each do |key|
|
74
56
|
value_original = env[@prefix + key]
|
75
|
-
next if value_original.nil?
|
57
|
+
next if value_original.nil?
|
76
58
|
if value_original == INTENTIONALLY_NIL
|
77
59
|
env.delete(key)
|
78
60
|
else
|
@@ -23,7 +23,7 @@ module Bundler
|
|
23
23
|
when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
|
24
24
|
response
|
25
25
|
when Gem::Net::HTTPRedirection
|
26
|
-
new_uri =
|
26
|
+
new_uri = Gem::URI.parse(response["location"])
|
27
27
|
if new_uri.host == uri.host
|
28
28
|
new_uri.user = uri.user
|
29
29
|
new_uri.password = uri.password
|
@@ -111,7 +111,7 @@ module Bundler
|
|
111
111
|
spec -= [nil, "ruby", ""]
|
112
112
|
spec_file_name = "#{spec.join "-"}.gemspec"
|
113
113
|
|
114
|
-
uri =
|
114
|
+
uri = Gem::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
|
115
115
|
spec = if uri.scheme == "file"
|
116
116
|
path = Gem::Util.correct_for_windows_path(uri.path)
|
117
117
|
Bundler.safe_load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
|
@@ -255,7 +255,7 @@ module Bundler
|
|
255
255
|
|
256
256
|
con = Gem::Net::HTTP::Persistent.new name: "bundler", proxy: :ENV
|
257
257
|
if gem_proxy = Gem.configuration[:http_proxy]
|
258
|
-
con.proxy =
|
258
|
+
con.proxy = Gem::URI.parse(gem_proxy) if gem_proxy != :no_proxy
|
259
259
|
end
|
260
260
|
|
261
261
|
if remote_uri.scheme == "https"
|
@@ -45,17 +45,37 @@ module Bundler
|
|
45
45
|
|
46
46
|
# Given a Resolver::Package and an Array of Specifications of available
|
47
47
|
# versions for a gem, this method will return the Array of Specifications
|
48
|
-
# sorted
|
49
|
-
#
|
50
|
-
#
|
48
|
+
# sorted in an order to give preference to the current level (:major, :minor
|
49
|
+
# or :patch) when resolution is deciding what versions best resolve all
|
50
|
+
# dependencies in the bundle.
|
51
51
|
# @param package [Resolver::Package] The package being resolved.
|
52
52
|
# @param specs [Specification] An array of Specifications for the package.
|
53
|
-
# @return [Specification] A new instance of the Specification Array sorted
|
54
|
-
# possibly filtered.
|
53
|
+
# @return [Specification] A new instance of the Specification Array sorted.
|
55
54
|
def sort_versions(package, specs)
|
56
|
-
|
55
|
+
locked_version = package.locked_version
|
57
56
|
|
58
|
-
|
57
|
+
result = specs.sort do |a, b|
|
58
|
+
unless package.prerelease_specified? || pre?
|
59
|
+
a_pre = a.prerelease?
|
60
|
+
b_pre = b.prerelease?
|
61
|
+
|
62
|
+
next 1 if a_pre && !b_pre
|
63
|
+
next -1 if b_pre && !a_pre
|
64
|
+
end
|
65
|
+
|
66
|
+
if major? || locked_version.nil?
|
67
|
+
b <=> a
|
68
|
+
elsif either_version_older_than_locked?(a, b, locked_version)
|
69
|
+
b <=> a
|
70
|
+
elsif segments_do_not_match?(a, b, :major)
|
71
|
+
a <=> b
|
72
|
+
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
73
|
+
a <=> b
|
74
|
+
else
|
75
|
+
b <=> a
|
76
|
+
end
|
77
|
+
end
|
78
|
+
post_sort(result, package.unlock?, locked_version)
|
59
79
|
end
|
60
80
|
|
61
81
|
# @return [bool] Convenience method for testing value of level variable.
|
@@ -73,9 +93,18 @@ module Bundler
|
|
73
93
|
pre == true
|
74
94
|
end
|
75
95
|
|
76
|
-
|
96
|
+
# Given a Resolver::Package and an Array of Specifications of available
|
97
|
+
# versions for a gem, this method will truncate the Array if strict
|
98
|
+
# is true. That means filtering out downgrades from the version currently
|
99
|
+
# locked, and filtering out upgrades that go past the selected level (major,
|
100
|
+
# minor, or patch).
|
101
|
+
# @param package [Resolver::Package] The package being resolved.
|
102
|
+
# @param specs [Specification] An array of Specifications for the package.
|
103
|
+
# @return [Specification] A new instance of the Specification Array
|
104
|
+
# truncated.
|
105
|
+
def filter_versions(package, specs)
|
106
|
+
return specs unless strict
|
77
107
|
|
78
|
-
def filter_dep_specs(specs, package)
|
79
108
|
locked_version = package.locked_version
|
80
109
|
return specs if locked_version.nil? || major?
|
81
110
|
|
@@ -89,32 +118,7 @@ module Bundler
|
|
89
118
|
end
|
90
119
|
end
|
91
120
|
|
92
|
-
|
93
|
-
locked_version = package.locked_version
|
94
|
-
|
95
|
-
result = specs.sort do |a, b|
|
96
|
-
unless package.prerelease_specified? || pre?
|
97
|
-
a_pre = a.prerelease?
|
98
|
-
b_pre = b.prerelease?
|
99
|
-
|
100
|
-
next -1 if a_pre && !b_pre
|
101
|
-
next 1 if b_pre && !a_pre
|
102
|
-
end
|
103
|
-
|
104
|
-
if major? || locked_version.nil?
|
105
|
-
a <=> b
|
106
|
-
elsif either_version_older_than_locked?(a, b, locked_version)
|
107
|
-
a <=> b
|
108
|
-
elsif segments_do_not_match?(a, b, :major)
|
109
|
-
b <=> a
|
110
|
-
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
111
|
-
b <=> a
|
112
|
-
else
|
113
|
-
a <=> b
|
114
|
-
end
|
115
|
-
end
|
116
|
-
post_sort(result, package.unlock?, locked_version)
|
117
|
-
end
|
121
|
+
private
|
118
122
|
|
119
123
|
def either_version_older_than_locked?(a, b, locked_version)
|
120
124
|
a.version < locked_version || b.version < locked_version
|
@@ -133,13 +137,13 @@ module Bundler
|
|
133
137
|
if unlock || locked_version.nil?
|
134
138
|
result
|
135
139
|
else
|
136
|
-
|
140
|
+
move_version_to_beginning(result, locked_version)
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
140
|
-
def
|
144
|
+
def move_version_to_beginning(result, version)
|
141
145
|
move, keep = result.partition {|s| s.version.to_s == version.to_s }
|
142
|
-
|
146
|
+
move.concat(keep)
|
143
147
|
end
|
144
148
|
end
|
145
149
|
end
|
@@ -50,7 +50,7 @@ module Bundler
|
|
50
50
|
append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @deps.any?
|
51
51
|
|
52
52
|
# since we resolved successfully, write out the lockfile
|
53
|
-
@definition.lock
|
53
|
+
@definition.lock
|
54
54
|
|
55
55
|
# invalidate the cached Bundler.definition
|
56
56
|
Bundler.reset_paths!
|
@@ -120,9 +120,10 @@ module Bundler
|
|
120
120
|
github = ", :github => \"#{d.github}\"" unless d.github.nil?
|
121
121
|
branch = ", :branch => \"#{d.branch}\"" unless d.branch.nil?
|
122
122
|
ref = ", :ref => \"#{d.ref}\"" unless d.ref.nil?
|
123
|
+
glob = ", :glob => \"#{d.glob}\"" unless d.glob.nil?
|
123
124
|
require_path = ", :require => #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?
|
124
125
|
|
125
|
-
%(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{require_path})
|
126
|
+
%(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{glob}#{require_path})
|
126
127
|
end.join("\n")
|
127
128
|
end
|
128
129
|
|