GRAYBYTE WORDPRESS FILE MANAGER8627

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/ruby26/lib64/ruby/2.6.0/bundler/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/ruby26/lib64/ruby/2.6.0/bundler//gem_version_promoter.rb
# frozen_string_literal: true

module Bundler
  # This class contains all of the logic for determining the next version of a
  # Gem to update to based on the requested level (patch, minor, major).
  # Primarily designed to work with Resolver which will provide it the list of
  # available dependency versions as found in its index, before returning it to
  # to the resolution engine to select the best version.
  class GemVersionPromoter
    DEBUG = ENV["DEBUG_RESOLVER"]

    attr_reader :level, :locked_specs, :unlock_gems

    # By default, strict is false, meaning every available version of a gem
    # is returned from sort_versions. The order gives preference to the
    # requested level (:patch, :minor, :major) but in complicated requirement
    # cases some gems will by necessity by promoted past the requested level,
    # or even reverted to older versions.
    #
    # If strict is set to true, the results from sort_versions will be
    # truncated, eliminating any version outside the current level scope.
    # This can lead to unexpected outcomes or even VersionConflict exceptions
    # that report a version of a gem not existing for versions that indeed do
    # existing in the referenced source.
    attr_accessor :strict

    attr_accessor :prerelease_specified

    # Given a list of locked_specs and a list of gems to unlock creates a
    # GemVersionPromoter instance.
    #
    # @param locked_specs [SpecSet] All current locked specs. Unlike Definition
    #   where this list is empty if all gems are being updated, this should
    #   always be populated for all gems so this class can properly function.
    # @param unlock_gems [String] List of gem names being unlocked. If empty,
    #   all gems will be considered unlocked.
    # @return [GemVersionPromoter]
    def initialize(locked_specs = SpecSet.new([]), unlock_gems = [])
      @level = :major
      @strict = false
      @locked_specs = locked_specs
      @unlock_gems = unlock_gems
      @sort_versions = {}
      @prerelease_specified = {}
    end

    # @param value [Symbol] One of three Symbols: :major, :minor or :patch.
    def level=(value)
      v = case value
          when String, Symbol
            value.to_sym
      end

      raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
      @level = v
    end

    # Given a Dependency and an Array of SpecGroups of available versions for a
    # gem, this method will return the Array of SpecGroups sorted (and possibly
    # truncated if strict is true) in an order to give preference to the current
    # level (:major, :minor or :patch) when resolution is deciding what versions
    # best resolve all dependencies in the bundle.
    # @param dep [Dependency] The Dependency of the gem.
    # @param spec_groups [SpecGroup] An array of SpecGroups for the same gem
    #    named in the @dep param.
    # @return [SpecGroup] A new instance of the SpecGroup Array sorted and
    #    possibly filtered.
    def sort_versions(dep, spec_groups)
      before_result = "before sort_versions: #{debug_format_result(dep, spec_groups).inspect}" if DEBUG

      @sort_versions[dep] ||= begin
        gem_name = dep.name

        # An Array per version returned, different entries for different platforms.
        # We only need the version here so it's ok to hard code this to the first instance.
        locked_spec = locked_specs[gem_name].first

        if strict
          filter_dep_specs(spec_groups, locked_spec)
        else
          sort_dep_specs(spec_groups, locked_spec)
        end.tap do |specs|
          if DEBUG
            STDERR.puts before_result
            STDERR.puts " after sort_versions: #{debug_format_result(dep, specs).inspect}"
          end
        end
      end
    end

    # @return [bool] Convenience method for testing value of level variable.
    def major?
      level == :major
    end

    # @return [bool] Convenience method for testing value of level variable.
    def minor?
      level == :minor
    end

  private

    def filter_dep_specs(spec_groups, locked_spec)
      res = spec_groups.select do |spec_group|
        if locked_spec && !major?
          gsv = spec_group.version
          lsv = locked_spec.version

          must_match = minor? ? [0] : [0, 1]

          matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] }
          (matches.uniq == [true]) ? (gsv >= lsv) : false
        else
          true
        end
      end

      sort_dep_specs(res, locked_spec)
    end

    def sort_dep_specs(spec_groups, locked_spec)
      return spec_groups unless locked_spec
      @gem_name = locked_spec.name
      @locked_version = locked_spec.version

      result = spec_groups.sort do |a, b|
        @a_ver = a.version
        @b_ver = b.version

        unless @prerelease_specified[@gem_name]
          a_pre = @a_ver.prerelease?
          b_pre = @b_ver.prerelease?

          next -1 if a_pre && !b_pre
          next  1 if b_pre && !a_pre
        end

        if major?
          @a_ver <=> @b_ver
        elsif either_version_older_than_locked
          @a_ver <=> @b_ver
        elsif segments_do_not_match(:major)
          @b_ver <=> @a_ver
        elsif !minor? && segments_do_not_match(:minor)
          @b_ver <=> @a_ver
        else
          @a_ver <=> @b_ver
        end
      end
      post_sort(result)
    end

    def either_version_older_than_locked
      @a_ver < @locked_version || @b_ver < @locked_version
    end

    def segments_do_not_match(level)
      index = [:major, :minor].index(level)
      @a_ver.segments[index] != @b_ver.segments[index]
    end

    def unlocking_gem?
      unlock_gems.empty? || unlock_gems.include?(@gem_name)
    end

    # Specific version moves can't always reliably be done during sorting
    # as not all elements are compared against each other.
    def post_sort(result)
      # default :major behavior in Bundler does not do this
      return result if major?
      if unlocking_gem?
        result
      else
        move_version_to_end(result, @locked_version)
      end
    end

    def move_version_to_end(result, version)
      move, keep = result.partition {|s| s.version.to_s == version.to_s }
      keep.concat(move)
    end

    def debug_format_result(dep, spec_groups)
      a = [dep.to_s,
           spec_groups.map {|sg| [sg.version, sg.dependencies_for_activated_platforms.map {|dp| [dp.name, dp.requirement.to_s] }] }]
      last_map = a.last.map {|sg_data| [sg_data.first.version, sg_data.last.map {|aa| aa.join(" ") }] }
      [a.first, last_map, level, strict ? :strict : :not_strict]
    end
  end
end

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
March 03 2024 22:47:39
root / root
0755
cli
--
March 03 2024 22:47:32
root / linksafe
0755
compact_index_client
--
March 03 2024 22:47:32
root / linksafe
0755
fetcher
--
March 03 2024 22:47:32
root / linksafe
0755
installer
--
March 03 2024 22:47:32
root / linksafe
0755
plugin
--
March 03 2024 22:47:32
root / linksafe
0755
resolver
--
March 03 2024 22:47:32
root / linksafe
0755
settings
--
March 03 2024 22:47:32
root / linksafe
0755
source
--
March 03 2024 22:47:32
root / linksafe
0755
ssl_certs
--
March 03 2024 22:47:32
root / linksafe
0755
templates
--
March 03 2024 22:47:32
root / linksafe
0755
ui
--
March 03 2024 22:47:32
root / linksafe
0755
vendor
--
March 03 2024 22:47:32
root / linksafe
0755
build_metadata.rb
1.614 KB
April 12 2022 11:50:11
root / linksafe
0644
capistrano.rb
0.858 KB
April 12 2022 11:50:11
root / linksafe
0644
cli.rb
35.123 KB
April 12 2022 11:50:11
root / linksafe
0644
compact_index_client.rb
3.271 KB
April 12 2022 11:50:11
root / linksafe
0644
compatibility_guard.rb
0.506 KB
April 12 2022 11:50:11
root / linksafe
0644
constants.rb
0.207 KB
April 12 2022 11:50:11
root / linksafe
0644
current_ruby.rb
2.187 KB
April 12 2022 11:50:11
root / linksafe
0644
definition.rb
36.444 KB
April 12 2022 11:50:11
root / linksafe
0644
dep_proxy.rb
0.808 KB
April 12 2022 11:50:11
root / linksafe
0644
dependency.rb
4.434 KB
April 12 2022 11:50:11
root / linksafe
0644
deployment.rb
3.191 KB
April 12 2022 11:50:11
root / linksafe
0644
deprecate.rb
0.855 KB
April 12 2022 11:50:11
root / linksafe
0644
dsl.rb
21.46 KB
April 12 2022 11:50:11
root / linksafe
0644
endpoint_specification.rb
3.908 KB
April 12 2022 11:50:11
root / linksafe
0644
env.rb
5.221 KB
April 12 2022 11:50:11
root / linksafe
0644
environment_preserver.rb
1.306 KB
April 12 2022 11:50:11
root / linksafe
0644
errors.rb
4.59 KB
April 12 2022 11:50:11
root / linksafe
0644
feature_flag.rb
3.066 KB
April 12 2022 11:50:11
root / linksafe
0644
fetcher.rb
10.831 KB
April 12 2022 11:50:11
root / linksafe
0644
friendly_errors.rb
4.33 KB
April 12 2022 11:50:11
root / linksafe
0644
gem_helper.rb
5.876 KB
April 12 2022 11:50:11
root / linksafe
0644
gem_helpers.rb
3.186 KB
April 12 2022 11:50:11
root / linksafe
0644
gem_remote_fetcher.rb
1.459 KB
April 12 2022 11:50:11
root / linksafe
0644
gem_tasks.rb
0.134 KB
April 12 2022 11:50:11
root / linksafe
0644
gem_version_promoter.rb
6.523 KB
April 12 2022 11:50:11
root / linksafe
0644
gemdeps.rb
0.413 KB
April 12 2022 11:50:11
root / linksafe
0644
graph.rb
4.999 KB
April 12 2022 11:50:11
root / linksafe
0644
index.rb
5.242 KB
April 12 2022 11:50:11
root / linksafe
0644
injector.rb
8.612 KB
April 12 2022 11:50:11
root / linksafe
0644
inline.rb
2.33 KB
April 12 2022 11:50:11
root / linksafe
0644
installer.rb
11.846 KB
April 12 2022 11:50:11
root / linksafe
0644
lazy_specification.rb
3.615 KB
April 12 2022 11:50:11
root / linksafe
0644
lockfile_generator.rb
2.179 KB
April 12 2022 11:50:11
root / linksafe
0644
lockfile_parser.rb
8.622 KB
April 12 2022 11:50:11
root / linksafe
0644
match_platform.rb
0.644 KB
April 12 2022 11:50:11
root / linksafe
0644
mirror.rb
5.79 KB
April 12 2022 11:50:11
root / linksafe
0644
plugin.rb
9.121 KB
April 12 2022 11:50:11
root / linksafe
0644
process_lock.rb
0.686 KB
April 12 2022 11:50:11
root / linksafe
0644
psyched_yaml.rb
0.833 KB
April 12 2022 11:50:11
root / linksafe
0644
remote_specification.rb
3.457 KB
April 12 2022 11:50:11
root / linksafe
0644
resolver.rb
14.196 KB
April 12 2022 11:50:11
root / linksafe
0644
retry.rb
1.603 KB
April 12 2022 11:50:11
root / linksafe
0644
ruby_dsl.rb
0.743 KB
April 12 2022 11:50:11
root / linksafe
0644
ruby_version.rb
4.963 KB
April 12 2022 11:50:11
root / linksafe
0644
rubygems_ext.rb
5.878 KB
April 12 2022 11:50:11
root / linksafe
0644
rubygems_gem_installer.rb
3.486 KB
April 12 2022 11:50:11
root / linksafe
0644
rubygems_integration.rb
25.008 KB
April 12 2022 11:50:11
root / linksafe
0644
runtime.rb
10.951 KB
April 12 2022 11:50:11
root / linksafe
0644
settings.rb
12.382 KB
April 12 2022 11:50:11
root / linksafe
0644
setup.rb
0.703 KB
April 12 2022 11:50:11
root / linksafe
0644
shared_helpers.rb
12.002 KB
April 12 2022 11:50:11
root / linksafe
0644
similarity_detector.rb
1.836 KB
April 12 2022 11:50:11
root / linksafe
0644
source.rb
2.655 KB
April 12 2022 11:50:11
root / linksafe
0644
source_list.rb
5.868 KB
April 12 2022 11:50:11
root / linksafe
0644
spec_set.rb
5.344 KB
April 12 2022 11:50:11
root / linksafe
0644
stub_specification.rb
2.777 KB
April 12 2022 11:50:11
root / linksafe
0644
ui.rb
0.193 KB
April 12 2022 11:50:11
root / linksafe
0644
uri_credentials_filter.rb
1.204 KB
April 12 2022 11:50:11
root / linksafe
0644
vendored_fileutils.rb
0.188 KB
April 12 2022 11:50:11
root / linksafe
0644
vendored_molinillo.rb
0.098 KB
April 12 2022 11:50:11
root / linksafe
0644
vendored_persistent.rb
1.61 KB
April 12 2022 11:50:11
root / linksafe
0644
vendored_thor.rb
0.188 KB
April 12 2022 11:50:11
root / linksafe
0644
version.rb
0.802 KB
April 12 2022 11:50:11
root / linksafe
0644
version_ranges.rb
2.864 KB
April 12 2022 11:50:11
root / linksafe
0644
vlad.rb
0.455 KB
April 12 2022 11:50:11
root / linksafe
0644
worker.rb
2.568 KB
April 12 2022 11:50:11
root / linksafe
0644
yaml_serializer.rb
2.406 KB
April 12 2022 11:50:11
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF