summaryrefslogtreecommitdiff
path: root/lib/bundler
diff options
context:
space:
mode:
authorMichael Siegfried <michael@procore.com>2022-01-04 14:54:17 -0800
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2022-12-20 13:15:02 +0900
commit2bc4f1dea5e663acba1d3c662390e8fc20bf6721 (patch)
tree1269485972bc55f03289e58a2a9276947e61b127 /lib/bundler
parent1ee31f9d9dc8da4b0eb8ca39b79a6b270c6c2f2d (diff)
downloadruby-2bc4f1dea5e663acba1d3c662390e8fc20bf6721.tar.gz
[rubygems/rubygems] Support for pre flag in `bundle update`
Passing this flag allows bumping to the current version, even if that version is prerelease. This works in concert with the current flags. https://github.com/rubygems/rubygems/commit/a6409e3509
Diffstat (limited to 'lib/bundler')
-rw-r--r--lib/bundler/cli.rb4
-rw-r--r--lib/bundler/cli/common.rb1
-rw-r--r--lib/bundler/gem_version_promoter.rb9
3 files changed, 13 insertions, 1 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb
index 18cef045a2..28f5cd4c1e 100644
--- a/lib/bundler/cli.rb
+++ b/lib/bundler/cli.rb
@@ -292,6 +292,8 @@ module Bundler
"Prefer updating only to next minor version"
method_option "major", :type => :boolean, :banner =>
"Prefer updating to next major version (default)"
+ method_option "pre", :type => :boolean, :banner =>
+ "If updating, allow consideration of prerelease gems"
method_option "strict", :type => :boolean, :banner =>
"Do not allow any gem to be updated past latest --patch | --minor | --major"
method_option "conservative", :type => :boolean, :banner =>
@@ -668,6 +670,8 @@ module Bundler
"If updating, prefer updating only to next minor version"
method_option "major", :type => :boolean, :banner =>
"If updating, prefer updating to next major version (default)"
+ method_option "pre", :type => :boolean, :banner =>
+ "If updating, allow consideration of prerelease gems"
method_option "strict", :type => :boolean, :banner =>
"If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
method_option "conservative", :type => :boolean, :banner =>
diff --git a/lib/bundler/cli/common.rb b/lib/bundler/cli/common.rb
index 0d83a1c07e..d654406f65 100644
--- a/lib/bundler/cli/common.rb
+++ b/lib/bundler/cli/common.rb
@@ -111,6 +111,7 @@ module Bundler
definition.gem_version_promoter.tap do |gvp|
gvp.level = patch_level.first || :major
gvp.strict = options[:strict] || options["filter-strict"]
+ gvp.pre = options[:pre]
end
end
diff --git a/lib/bundler/gem_version_promoter.rb b/lib/bundler/gem_version_promoter.rb
index f73f79e84d..9233fc0889 100644
--- a/lib/bundler/gem_version_promoter.rb
+++ b/lib/bundler/gem_version_promoter.rb
@@ -8,6 +8,7 @@ module Bundler
# to the resolution engine to select the best version.
class GemVersionPromoter
attr_reader :level
+ attr_accessor :pre
# By default, strict is false, meaning every available version of a gem
# is returned from sort_versions. The order gives preference to the
@@ -28,6 +29,7 @@ module Bundler
def initialize
@level = :major
@strict = false
+ @pre = false
end
# @param value [Symbol] One of three Symbols: :major, :minor or :patch.
@@ -66,6 +68,11 @@ module Bundler
level == :minor
end
+ # @return [bool] Convenience method for testing value of pre variable.
+ def pre?
+ pre == true
+ end
+
private
def filter_dep_specs(specs, package)
@@ -86,7 +93,7 @@ module Bundler
locked_version = package.locked_version
result = specs.sort do |a, b|
- unless locked_version && package.prerelease_specified?
+ unless locked_version && (package.prerelease_specified? || pre?)
a_pre = a.prerelease?
b_pre = b.prerelease?