HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/share/doc/ruby/html/Bundler/Definition.html
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title>class Bundler::Definition - RDoc Documentation</title>

<script type="text/javascript">
  var rdoc_rel_prefix = "../";
  var index_rel_prefix = "../";
</script>

<script src="../js/navigation.js" defer></script>
<script src="../js/search.js" defer></script>
<script src="../js/search_index.js" defer></script>
<script src="../js/searcher.js" defer></script>
<script src="../js/darkfish.js" defer></script>

<link href="../css/fonts.css" rel="stylesheet">
<link href="../css/rdoc.css" rel="stylesheet">




<body id="top" role="document" class="class">
<nav role="navigation">
  <div id="project-navigation">
    <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="../index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="../table_of_contents.html#pages">Pages</a>
    <a href="../table_of_contents.html#classes">Classes</a>
    <a href="../table_of_contents.html#methods">Methods</a>
  </div>
</div>

    <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

  </div>

  

  <div id="class-metadata">
    
    <div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  
  <p class="link"><a href="../Object.html">Object</a>
  
</div>

    <div id="includes-section" class="nav-section">
  <h3>Included Modules</h3>

  <ul class="link-list">
  
  
    <li><a class="include" href="GemHelpers.html">Bundler::GemHelpers</a>
  
  
  </ul>
</div>

    
    <!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    
    <li ><a href="#method-c-build">::build</a>
    
    <li ><a href="#method-c-new">::new</a>
    
    <li ><a href="#method-i-add_current_platform">#add_current_platform</a>
    
    <li ><a href="#method-i-add_platform">#add_platform</a>
    
    <li ><a href="#method-i-additional_base_requirements_for_resolve">#additional_base_requirements_for_resolve</a>
    
    <li ><a href="#method-i-change_reason">#change_reason</a>
    
    <li ><a href="#method-i-compute_requires">#compute_requires</a>
    
    <li ><a href="#method-i-concat_ruby_version_requirements">#concat_ruby_version_requirements</a>
    
    <li ><a href="#method-i-converge_dependencies">#converge_dependencies</a>
    
    <li ><a href="#method-i-converge_locals">#converge_locals</a>
    
    <li ><a href="#method-i-converge_locked_specs">#converge_locked_specs</a>
    
    <li ><a href="#method-i-converge_path_source_to_gemspec_source">#converge_path_source_to_gemspec_source</a>
    
    <li ><a href="#method-i-converge_path_sources_to_gemspec_sources">#converge_path_sources_to_gemspec_sources</a>
    
    <li ><a href="#method-i-converge_paths">#converge_paths</a>
    
    <li ><a href="#method-i-converge_rubygems_sources">#converge_rubygems_sources</a>
    
    <li ><a href="#method-i-converge_sources">#converge_sources</a>
    
    <li ><a href="#method-i-current_dependencies">#current_dependencies</a>
    
    <li ><a href="#method-i-current_platforms">#current_platforms</a>
    
    <li ><a href="#method-i-dependencies_for_source_changed-3F">#dependencies_for_source_changed?</a>
    
    <li ><a href="#method-i-double_check_for_index">#double_check_for_index</a>
    
    <li ><a href="#method-i-ensure_equivalent_gemfile_and_lockfile">#ensure_equivalent_gemfile_and_lockfile</a>
    
    <li ><a href="#method-i-equivalent_rubygems_remotes-3F">#equivalent_rubygems_remotes?</a>
    
    <li ><a href="#method-i-expand_dependencies">#expand_dependencies</a>
    
    <li ><a href="#method-i-expanded_dependencies">#expanded_dependencies</a>
    
    <li ><a href="#method-i-extract_gem_info">#extract_gem_info</a>
    
    <li ><a href="#method-i-find_indexed_specs">#find_indexed_specs</a>
    
    <li ><a href="#method-i-find_resolved_spec">#find_resolved_spec</a>
    
    <li ><a href="#method-i-gem_version_promoter">#gem_version_promoter</a>
    
    <li ><a href="#method-i-groups">#groups</a>
    
    <li ><a href="#method-i-has_local_dependencies-3F">#has_local_dependencies?</a>
    
    <li ><a href="#method-i-has_rubygems_remotes-3F">#has_rubygems_remotes?</a>
    
    <li ><a href="#method-i-in_locked_deps-3F">#in_locked_deps?</a>
    
    <li ><a href="#method-i-index">#index</a>
    
    <li ><a href="#method-i-lock">#lock</a>
    
    <li ><a href="#method-i-locked_bundler_version">#locked_bundler_version</a>
    
    <li ><a href="#method-i-locked_ruby_version">#locked_ruby_version</a>
    
    <li ><a href="#method-i-locked_ruby_version_object">#locked_ruby_version_object</a>
    
    <li ><a href="#method-i-lockfiles_equal-3F">#lockfiles_equal?</a>
    
    <li ><a href="#method-i-metadata_dependencies">#metadata_dependencies</a>
    
    <li ><a href="#method-i-missing_specs">#missing_specs</a>
    
    <li ><a href="#method-i-missing_specs-3F">#missing_specs?</a>
    
    <li ><a href="#method-i-new_platform-3F">#new_platform?</a>
    
    <li ><a href="#method-i-new_specs">#new_specs</a>
    
    <li ><a href="#method-i-nothing_changed-3F">#nothing_changed?</a>
    
    <li ><a href="#method-i-pinned_spec_names">#pinned_spec_names</a>
    
    <li ><a href="#method-i-pretty_dep">#pretty_dep</a>
    
    <li ><a href="#method-i-remove_platform">#remove_platform</a>
    
    <li ><a href="#method-i-removed_specs">#removed_specs</a>
    
    <li ><a href="#method-i-requested_dependencies">#requested_dependencies</a>
    
    <li ><a href="#method-i-requested_groups">#requested_groups</a>
    
    <li ><a href="#method-i-requested_specs">#requested_specs</a>
    
    <li ><a href="#method-i-resolve">#resolve</a>
    
    <li ><a href="#method-i-resolve_remotely-21">#resolve_remotely!</a>
    
    <li ><a href="#method-i-resolve_with_cache-21">#resolve_with_cache!</a>
    
    <li ><a href="#method-i-satisfies_locked_spec-3F">#satisfies_locked_spec?</a>
    
    <li ><a href="#method-i-source_requirements">#source_requirements</a>
    
    <li ><a href="#method-i-spec_git_paths">#spec_git_paths</a>
    
    <li ><a href="#method-i-specs">#specs</a>
    
    <li ><a href="#method-i-specs_changed-3F">#specs_changed?</a>
    
    <li ><a href="#method-i-specs_for">#specs_for</a>
    
    <li ><a href="#method-i-specs_for_source_changed-3F">#specs_for_source_changed?</a>
    
    <li ><a href="#method-i-to_lock">#to_lock</a>
    
    <li ><a href="#method-i-unlocking-3F">#unlocking?</a>
    
    <li ><a href="#method-i-validate_platforms-21">#validate_platforms!</a>
    
    <li ><a href="#method-i-validate_ruby-21">#validate_ruby!</a>
    
    <li ><a href="#method-i-validate_runtime-21">#validate_runtime!</a>
    
  </ul>
</div>

  </div>
</nav>

<main role="main" aria-labelledby="class-Bundler::Definition">
  <h1 id="class-Bundler::Definition" class="class">
    class Bundler::Definition
  </h1>

  <section class="description">
    
  </section>

  
  <section id="5Buntitled-5D" class="documentation-section">
    

    

    

    
    <section class="attribute-method-details" class="method-section">
      <header>
        <h3>Attributes</h3>
      </header>

      
      <div id="attribute-i-dependencies" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">dependencies</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-gemfiles" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">gemfiles</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-locked_deps" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">locked_deps</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-locked_gems" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">locked_gems</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-lockfile" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">lockfile</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-platforms" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">platforms</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-requires" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">requires</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-ruby_version" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">ruby_version</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
      <div id="attribute-i-sources" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name">sources</span><span
            class="attribute-access-type">[R]</span>
        </div>

        <div class="method-description">
        
        
        
        </div>
      </div>
      
    </section>
    

    
     <section id="public-class-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Class Methods</h3>
       </header>

    
      <div id="method-c-build" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">build</span><span
            class="method-args">(gemfile, lockfile, unlock)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Given a gemfile and lockfile creates a <a href="../Bundler.html"><code>Bundler</code></a> definition</p>

<p>@param gemfile [Pathname] Path to Gemfile @param lockfile [Pathname,nil] Path to Gemfile.lock @param unlock [Hash, Boolean, nil] Gems that have been requested</p>

<pre class="ruby"><span class="ruby-identifier">to</span> <span class="ruby-identifier">be</span> <span class="ruby-identifier">updated</span> <span class="ruby-keyword">or</span> <span class="ruby-keyword">true</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">all</span> <span class="ruby-identifier">gems</span> <span class="ruby-identifier">should</span> <span class="ruby-identifier">be</span> <span class="ruby-identifier">updated</span>
</pre>

<p>@return [Bundler::Definition]</p>
          
          

          
          <div class="method-source-code" id="build-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 28</span>
<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">build</span>(<span class="ruby-identifier">gemfile</span>, <span class="ruby-identifier">lockfile</span>, <span class="ruby-identifier">unlock</span>)
  <span class="ruby-identifier">unlock</span> <span class="ruby-operator">||=</span> {}
  <span class="ruby-identifier">gemfile</span> = <span class="ruby-constant">Pathname</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">gemfile</span>).<span class="ruby-identifier">expand_path</span>

  <span class="ruby-identifier">raise</span> <span class="ruby-constant">GemfileNotFound</span>, <span class="ruby-node">&quot;#{gemfile} not found&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">gemfile</span>.<span class="ruby-identifier">file?</span>

  <span class="ruby-constant">Dsl</span>.<span class="ruby-identifier">evaluate</span>(<span class="ruby-identifier">gemfile</span>, <span class="ruby-identifier">lockfile</span>, <span class="ruby-identifier">unlock</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-c-new" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">new</span><span
            class="method-args">(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>How does the new system work?</p>
<ul><li>
<p>Load information from Gemfile and Lockfile</p>
</li><li>
<p>Invalidate stale locked specs</p>
</li><li>
<p>All specs from stale source are stale</p>
</li><li>
<p>All specs that are reachable only through a stale dependency are stale.</p>
</li><li>
<p>If all fresh dependencies are satisfied by the locked</p>
</li></ul>

<pre>specs, then we can try to resolve locally.</pre>

<p>@param lockfile [Pathname] Path to Gemfile.lock @param dependencies [Array(<a href="Dependency.html"><code>Bundler::Dependency</code></a>)] array of dependencies from Gemfile @param sources [Bundler::SourceList] @param unlock [Hash, Boolean, nil] Gems that have been requested</p>

<pre class="ruby"><span class="ruby-identifier">to</span> <span class="ruby-identifier">be</span> <span class="ruby-identifier">updated</span> <span class="ruby-keyword">or</span> <span class="ruby-keyword">true</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">all</span> <span class="ruby-identifier">gems</span> <span class="ruby-identifier">should</span> <span class="ruby-identifier">be</span> <span class="ruby-identifier">updated</span>
</pre>

<p>@param <a href="Definition.html#attribute-i-ruby_version"><code>ruby_version</code></a> [Bundler::RubyVersion, nil] Requested Ruby Version @param optional_groups [Array(<a href="../String.html"><code>String</code></a>)] A list of optional groups</p>
          
          

          
          <div class="method-source-code" id="new-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 55</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">lockfile</span>, <span class="ruby-identifier">dependencies</span>, <span class="ruby-identifier">sources</span>, <span class="ruby-identifier">unlock</span>, <span class="ruby-identifier">ruby_version</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">optional_groups</span> = [], <span class="ruby-identifier">gemfiles</span> = [])
  <span class="ruby-keyword">if</span> [<span class="ruby-keyword">true</span>, <span class="ruby-keyword">false</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">unlock</span>)
    <span class="ruby-ivar">@unlocking_bundler</span> = <span class="ruby-keyword">false</span>
    <span class="ruby-ivar">@unlocking</span> = <span class="ruby-identifier">unlock</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">unlock</span> = <span class="ruby-identifier">unlock</span>.<span class="ruby-identifier">dup</span>
    <span class="ruby-ivar">@unlocking_bundler</span> = <span class="ruby-identifier">unlock</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value">:bundler</span>)
    <span class="ruby-identifier">unlock</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">_k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-constant">Array</span>(<span class="ruby-identifier">v</span>).<span class="ruby-identifier">empty?</span> }
    <span class="ruby-ivar">@unlocking</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">unlock</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-ivar">@dependencies</span>    = <span class="ruby-identifier">dependencies</span>
  <span class="ruby-ivar">@sources</span>         = <span class="ruby-identifier">sources</span>
  <span class="ruby-ivar">@unlock</span>          = <span class="ruby-identifier">unlock</span>
  <span class="ruby-ivar">@optional_groups</span> = <span class="ruby-identifier">optional_groups</span>
  <span class="ruby-ivar">@remote</span>          = <span class="ruby-keyword">false</span>
  <span class="ruby-ivar">@specs</span>           = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@ruby_version</span>    = <span class="ruby-identifier">ruby_version</span>
  <span class="ruby-ivar">@gemfiles</span>        = <span class="ruby-identifier">gemfiles</span>

  <span class="ruby-ivar">@lockfile</span>               = <span class="ruby-identifier">lockfile</span>
  <span class="ruby-ivar">@lockfile_contents</span>      = <span class="ruby-constant">String</span>.<span class="ruby-identifier">new</span>
  <span class="ruby-ivar">@locked_bundler_version</span> = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@locked_ruby_version</span>    = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@locked_specs_incomplete_for_platform</span> = <span class="ruby-keyword">false</span>

  <span class="ruby-keyword">if</span> <span class="ruby-identifier">lockfile</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">lockfile</span>)
    <span class="ruby-ivar">@lockfile_contents</span> = <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">read_file</span>(<span class="ruby-identifier">lockfile</span>)
    <span class="ruby-ivar">@locked_gems</span> = <span class="ruby-constant">LockfileParser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@lockfile_contents</span>)
    <span class="ruby-ivar">@locked_platforms</span> = <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">platforms</span>
    <span class="ruby-ivar">@platforms</span> = <span class="ruby-ivar">@locked_platforms</span>.<span class="ruby-identifier">dup</span>
    <span class="ruby-ivar">@locked_bundler_version</span> = <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">bundler_version</span>
    <span class="ruby-ivar">@locked_ruby_version</span> = <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">ruby_version</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlock</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">true</span>
      <span class="ruby-ivar">@locked_deps</span>    = <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">dependencies</span>
      <span class="ruby-ivar">@locked_specs</span>   = <span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">specs</span>)
      <span class="ruby-ivar">@locked_sources</span> = <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">sources</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-ivar">@unlock</span>         = {}
      <span class="ruby-ivar">@locked_deps</span>    = {}
      <span class="ruby-ivar">@locked_specs</span>   = <span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>([])
      <span class="ruby-ivar">@locked_sources</span> = []
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-ivar">@unlock</span>         = {}
    <span class="ruby-ivar">@platforms</span>      = []
    <span class="ruby-ivar">@locked_gems</span>    = <span class="ruby-keyword">nil</span>
    <span class="ruby-ivar">@locked_deps</span>    = {}
    <span class="ruby-ivar">@locked_specs</span>   = <span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>([])
    <span class="ruby-ivar">@locked_sources</span> = []
    <span class="ruby-ivar">@locked_platforms</span> = []
  <span class="ruby-keyword">end</span>

  <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>] <span class="ruby-operator">||=</span> []
  <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:sources</span>] <span class="ruby-operator">||=</span> []
  <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:ruby</span>] <span class="ruby-operator">||=</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@ruby_version</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">locked_ruby_version_object</span>
    <span class="ruby-ivar">@ruby_version</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-identifier">locked_ruby_version_object</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-ivar">@unlocking</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:ruby</span>] <span class="ruby-operator">||=</span> (<span class="ruby-operator">!</span><span class="ruby-ivar">@locked_ruby_version</span> <span class="ruby-operator">^</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@ruby_version</span>)

  <span class="ruby-identifier">add_current_platform</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">frozen_bundle?</span>

  <span class="ruby-identifier">converge_path_sources_to_gemspec_sources</span>
  <span class="ruby-ivar">@path_changes</span> = <span class="ruby-identifier">converge_paths</span>
  <span class="ruby-ivar">@source_changes</span> = <span class="ruby-identifier">converge_sources</span>

  <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:lock_shared_dependencies</span>]
    <span class="ruby-identifier">eager_unlock</span> = <span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>], <span class="ruby-keyword">true</span>)
    <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>] = <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">for</span>(<span class="ruby-identifier">eager_unlock</span>, [], <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>).<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:name</span>)
  <span class="ruby-keyword">end</span>

  <span class="ruby-ivar">@dependency_changes</span> = <span class="ruby-identifier">converge_dependencies</span>
  <span class="ruby-ivar">@local_changes</span> = <span class="ruby-identifier">converge_locals</span>

  <span class="ruby-ivar">@requires</span> = <span class="ruby-identifier">compute_requires</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
     <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Instance Methods</h3>
       </header>

    
      <div id="method-i-add_current_platform" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">add_current_platform</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="add_current_platform-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 521</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">add_current_platform</span>
  <span class="ruby-identifier">current_platforms</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">platform</span><span class="ruby-operator">|</span> <span class="ruby-identifier">add_platform</span>(<span class="ruby-identifier">platform</span>) }
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-add_platform" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">add_platform</span><span
            class="method-args">(platform)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="add_platform-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 511</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">add_platform</span>(<span class="ruby-identifier">platform</span>)
  <span class="ruby-ivar">@new_platform</span> <span class="ruby-operator">||=</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@platforms</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">platform</span>)
  <span class="ruby-ivar">@platforms</span> <span class="ruby-operator">|=</span> [<span class="ruby-identifier">platform</span>]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-current_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">current_dependencies</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="current_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 230</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">current_dependencies</span>
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">select</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:should_include?</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-ensure_equivalent_gemfile_and_lockfile" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">ensure_equivalent_gemfile_and_lockfile</span><span
            class="method-args">(explicit_flag = false)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="ensure_equivalent_gemfile_and_lockfile-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 392</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">ensure_equivalent_gemfile_and_lockfile</span>(<span class="ruby-identifier">explicit_flag</span> = <span class="ruby-keyword">false</span>)
  <span class="ruby-identifier">msg</span> = <span class="ruby-constant">String</span>.<span class="ruby-identifier">new</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;You are trying to install in deployment mode after changing\n&quot;</span> \
         <span class="ruby-string">&quot;your Gemfile. Run `bundle install` elsewhere and add the\n&quot;</span> \
         <span class="ruby-node">&quot;updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control.&quot;</span>

  <span class="ruby-keyword">unless</span> <span class="ruby-identifier">explicit_flag</span>
    <span class="ruby-identifier">suggested_command</span> = <span class="ruby-keyword">if</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>.<span class="ruby-identifier">locations</span>(<span class="ruby-string">&quot;frozen&quot;</span>)[<span class="ruby-value">:global</span>]
      <span class="ruby-string">&quot;bundle config unset frozen&quot;</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>.<span class="ruby-identifier">locations</span>(<span class="ruby-string">&quot;deployment&quot;</span>).<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">&amp;</span>([<span class="ruby-value">:global</span>, <span class="ruby-value">:local</span>]).<span class="ruby-identifier">any?</span>
      <span class="ruby-string">&quot;bundle config unset deployment&quot;</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-string">&quot;bundle install --no-deployment&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} &quot;</span> \
           <span class="ruby-node">&quot;freeze \nby running `#{suggested_command}`.&quot;</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">added</span> =   []
  <span class="ruby-identifier">deleted</span> = []
  <span class="ruby-identifier">changed</span> = []

  <span class="ruby-identifier">new_platforms</span> = <span class="ruby-ivar">@platforms</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@locked_platforms</span>
  <span class="ruby-identifier">deleted_platforms</span> = <span class="ruby-ivar">@locked_platforms</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@platforms</span>
  <span class="ruby-identifier">added</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">new_platforms</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* platform: #{p}&quot;</span> }
  <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">deleted_platforms</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* platform: #{p}&quot;</span> }

  <span class="ruby-identifier">gemfile_sources</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">lock_sources</span>

  <span class="ruby-identifier">new_sources</span> = <span class="ruby-identifier">gemfile_sources</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@locked_sources</span>
  <span class="ruby-identifier">deleted_sources</span> = <span class="ruby-ivar">@locked_sources</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">gemfile_sources</span>

  <span class="ruby-identifier">new_deps</span> = <span class="ruby-ivar">@dependencies</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">values</span>
  <span class="ruby-identifier">deleted_deps</span> = <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">values</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@dependencies</span>

  <span class="ruby-comment"># Check if it is possible that the source is only changed thing</span>
  <span class="ruby-keyword">if</span> (<span class="ruby-identifier">new_deps</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">deleted_deps</span>.<span class="ruby-identifier">empty?</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">new_sources</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">deleted_sources</span>.<span class="ruby-identifier">empty?</span>)
    <span class="ruby-identifier">new_sources</span>.<span class="ruby-identifier">reject!</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">source</span>.<span class="ruby-identifier">path?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">exist?</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">equivalent_rubygems_remotes?</span>(<span class="ruby-identifier">source</span>) }
    <span class="ruby-identifier">deleted_sources</span>.<span class="ruby-identifier">reject!</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">source</span>.<span class="ruby-identifier">path?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">exist?</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">equivalent_rubygems_remotes?</span>(<span class="ruby-identifier">source</span>) }
  <span class="ruby-keyword">end</span>

  <span class="ruby-keyword">if</span> <span class="ruby-ivar">@locked_sources</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">gemfile_sources</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">new_sources</span>.<span class="ruby-identifier">any?</span>
      <span class="ruby-identifier">added</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">new_sources</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* source: #{source}&quot;</span> }
    <span class="ruby-keyword">end</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">deleted_sources</span>.<span class="ruby-identifier">any?</span>
      <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">deleted_sources</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* source: #{source}&quot;</span> }
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">added</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">new_deps</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* #{pretty_dep(d)}&quot;</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">new_deps</span>.<span class="ruby-identifier">any?</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">deleted_deps</span>.<span class="ruby-identifier">any?</span>
    <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">concat</span> <span class="ruby-identifier">deleted_deps</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-node">&quot;* #{pretty_dep(d)}&quot;</span> }
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">both_sources</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span>, <span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = [] }
  <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">both_sources</span>[<span class="ruby-identifier">d</span>.<span class="ruby-identifier">name</span>][<span class="ruby-value">0</span>] = <span class="ruby-identifier">d</span> }
  <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">each</span>  {<span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">both_sources</span>[<span class="ruby-identifier">name</span>][<span class="ruby-value">1</span>] = <span class="ruby-identifier">d</span>.<span class="ruby-identifier">source</span> }

  <span class="ruby-identifier">both_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, (<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">lock_source</span>)<span class="ruby-operator">|</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> (<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">lock_source</span>.<span class="ruby-identifier">nil?</span>) <span class="ruby-operator">||</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">dep</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">lock_source</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">lock_source</span>.<span class="ruby-identifier">can_lock?</span>(<span class="ruby-identifier">dep</span>))
    <span class="ruby-identifier">gemfile_source_name</span> = (<span class="ruby-identifier">dep</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>) <span class="ruby-operator">||</span> <span class="ruby-string">&quot;no specified source&quot;</span>
    <span class="ruby-identifier">lockfile_source_name</span> = <span class="ruby-identifier">lock_source</span> <span class="ruby-operator">||</span> <span class="ruby-string">&quot;no specified source&quot;</span>
    <span class="ruby-identifier">changed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`&quot;</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">reason</span> = <span class="ruby-identifier">change_reason</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;\n\n#{reason.split(&quot;, &quot;).map(&amp;:capitalize).join(&quot;\n&quot;)}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">reason</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n\nYou have added to the Gemfile:\n&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">added</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">added</span>.<span class="ruby-identifier">any?</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n\nYou have deleted from the Gemfile:\n&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">any?</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n\nYou have changed in the Gemfile:\n&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">changed</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">changed</span>.<span class="ruby-identifier">any?</span>
  <span class="ruby-identifier">msg</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>

  <span class="ruby-identifier">raise</span> <span class="ruby-constant">ProductionError</span>, <span class="ruby-identifier">msg</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">added</span>.<span class="ruby-identifier">any?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">deleted</span>.<span class="ruby-identifier">any?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">changed</span>.<span class="ruby-identifier">any?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">nothing_changed?</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-find_indexed_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">find_indexed_specs</span><span
            class="method-args">(current_spec)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="find_indexed_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 529</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">find_indexed_specs</span>(<span class="ruby-identifier">current_spec</span>)
  <span class="ruby-identifier">index</span>[<span class="ruby-identifier">current_spec</span>.<span class="ruby-identifier">name</span>].<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">spec</span><span class="ruby-operator">|</span> <span class="ruby-identifier">spec</span>.<span class="ruby-identifier">match_platform</span>(<span class="ruby-identifier">current_spec</span>.<span class="ruby-identifier">platform</span>) }.<span class="ruby-identifier">sort_by</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:version</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-find_resolved_spec" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">find_resolved_spec</span><span
            class="method-args">(current_spec)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="find_resolved_spec-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 525</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">find_resolved_spec</span>(<span class="ruby-identifier">current_spec</span>)
  <span class="ruby-identifier">specs</span>.<span class="ruby-identifier">find_by_name_and_platform</span>(<span class="ruby-identifier">current_spec</span>.<span class="ruby-identifier">name</span>, <span class="ruby-identifier">current_spec</span>.<span class="ruby-identifier">platform</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-gem_version_promoter" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">gem_version_promoter</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="gem_version_promoter-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 133</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">gem_version_promoter</span>
  <span class="ruby-ivar">@gem_version_promoter</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">locked_specs</span> =
      <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlocking?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@lockfile_contents</span>.<span class="ruby-identifier">empty?</span>
        <span class="ruby-comment"># Definition uses an empty set of locked_specs to indicate all gems</span>
        <span class="ruby-comment"># are unlocked, but GemVersionPromoter needs the locked_specs</span>
        <span class="ruby-comment"># for conservative comparison.</span>
        <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">specs</span>)
      <span class="ruby-keyword">else</span>
        <span class="ruby-ivar">@locked_specs</span>
      <span class="ruby-keyword">end</span>
    <span class="ruby-constant">GemVersionPromoter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">locked_specs</span>, <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>])
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-groups" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">groups</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="groups-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 323</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">groups</span>
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:groups</span>).<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-has_local_dependencies-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">has_local_dependencies?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="has_local_dependencies-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 315</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">has_local_dependencies?</span>
  <span class="ruby-operator">!</span><span class="ruby-identifier">sources</span>.<span class="ruby-identifier">path_sources</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">sources</span>.<span class="ruby-identifier">git_sources</span>.<span class="ruby-identifier">empty?</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-has_rubygems_remotes-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">has_rubygems_remotes?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="has_rubygems_remotes-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 311</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">has_rubygems_remotes?</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">rubygems_sources</span>.<span class="ruby-identifier">any?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">remotes</span>.<span class="ruby-identifier">any?</span> }
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-index" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">index</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="index-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 267</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">index</span>
  <span class="ruby-ivar">@index</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Index</span>.<span class="ruby-identifier">build</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">dependency_names</span> = <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:name</span>)

    <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">all_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
      <span class="ruby-identifier">source</span>.<span class="ruby-identifier">dependency_names</span> = <span class="ruby-identifier">dependency_names</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pinned_spec_names</span>(<span class="ruby-identifier">source</span>)
      <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">add_source</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">specs</span>
      <span class="ruby-identifier">dependency_names</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">source</span>.<span class="ruby-identifier">unmet_deps</span>).<span class="ruby-identifier">uniq!</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">double_check_for_index</span>(<span class="ruby-identifier">idx</span>, <span class="ruby-identifier">dependency_names</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-lock" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">lock</span><span
            class="method-args">(file, preserve_unknown_sections = false)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="lock-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 327</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">lock</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">preserve_unknown_sections</span> = <span class="ruby-keyword">false</span>)
  <span class="ruby-identifier">contents</span> = <span class="ruby-identifier">to_lock</span>

  <span class="ruby-comment"># Convert to \r\n if the existing lock has them</span>
  <span class="ruby-comment"># i.e., Windows with `git config core.autocrlf=true`</span>
  <span class="ruby-identifier">contents</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/\n/</span>, <span class="ruby-string">&quot;\r\n&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@lockfile_contents</span>.<span class="ruby-identifier">match</span>(<span class="ruby-string">&quot;\r\n&quot;</span>)

  <span class="ruby-keyword">if</span> <span class="ruby-ivar">@locked_bundler_version</span>
    <span class="ruby-identifier">locked_major</span> = <span class="ruby-ivar">@locked_bundler_version</span>.<span class="ruby-identifier">segments</span>.<span class="ruby-identifier">first</span>
    <span class="ruby-identifier">current_major</span> = <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Version</span>.<span class="ruby-identifier">create</span>(<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>).<span class="ruby-identifier">segments</span>.<span class="ruby-identifier">first</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">updating_major</span> = <span class="ruby-identifier">locked_major</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">current_major</span>
      <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;Warning: the lockfile is being updated to Bundler #{current_major}, &quot;</span> \
                      <span class="ruby-node">&quot;after which you will be unable to return to Bundler #{@locked_bundler_version.segments.first}.&quot;</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">preserve_unknown_sections</span> <span class="ruby-operator">||=</span> <span class="ruby-operator">!</span><span class="ruby-identifier">updating_major</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">frozen_bundle?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span>(<span class="ruby-identifier">unlocking?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@unlocking_bundler</span>))

  <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">file</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">lockfiles_equal?</span>(<span class="ruby-ivar">@lockfile_contents</span>, <span class="ruby-identifier">contents</span>, <span class="ruby-identifier">preserve_unknown_sections</span>)

  <span class="ruby-keyword">if</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">frozen_bundle?</span>
    <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">error</span> <span class="ruby-string">&quot;Cannot write a changed lockfile while frozen.&quot;</span>
    <span class="ruby-keyword">return</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-constant">SharedHelpers</span>.<span class="ruby-identifier">filesystem_access</span>(<span class="ruby-identifier">file</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
    <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">p</span>, <span class="ruby-string">&quot;wb&quot;</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span>(<span class="ruby-identifier">contents</span>) }
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-locked_bundler_version" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">locked_bundler_version</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="locked_bundler_version-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 358</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">locked_bundler_version</span>
  <span class="ruby-keyword">if</span> <span class="ruby-ivar">@locked_bundler_version</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@locked_bundler_version</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Version</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>)
    <span class="ruby-identifier">new_version</span> = <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">new_version</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@locked_bundler_version</span> <span class="ruby-operator">||</span> <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-locked_ruby_version" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">locked_ruby_version</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="locked_ruby_version-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 366</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">locked_ruby_version</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">ruby_version</span>
  <span class="ruby-keyword">if</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:ruby</span>] <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@locked_ruby_version</span>
    <span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">RubyVersion</span>.<span class="ruby-identifier">system</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-ivar">@locked_ruby_version</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-locked_ruby_version_object" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">locked_ruby_version_object</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="locked_ruby_version_object-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 375</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">locked_ruby_version_object</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@locked_ruby_version</span>
  <span class="ruby-ivar">@locked_ruby_version_object</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">version</span> = <span class="ruby-constant">RubyVersion</span>.<span class="ruby-identifier">from_string</span>(<span class="ruby-ivar">@locked_ruby_version</span>)
      <span class="ruby-identifier">raise</span> <span class="ruby-constant">LockfileError</span>, <span class="ruby-node">&quot;The Ruby version #{@locked_ruby_version} from &quot;</span> \
        <span class="ruby-node">&quot;#{@lockfile} could not be parsed. &quot;</span> \
        <span class="ruby-string">&quot;Try running bundle update --ruby to resolve this.&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">version</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-missing_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">missing_specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="missing_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 201</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">missing_specs</span>
  <span class="ruby-identifier">missing</span> = []
  <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">materialize</span>(<span class="ruby-identifier">requested_dependencies</span>, <span class="ruby-identifier">missing</span>)
  <span class="ruby-identifier">missing</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-missing_specs-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">missing_specs?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="missing_specs-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 207</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">missing_specs?</span>
  <span class="ruby-identifier">missing</span> = <span class="ruby-identifier">missing_specs</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">missing</span>.<span class="ruby-identifier">empty?</span>
  <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;The definition is missing #{missing.map(&amp;:full_name)}&quot;</span>
  <span class="ruby-keyword">true</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">BundlerError</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
  <span class="ruby-ivar">@index</span> = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@resolve</span> = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@specs</span> = <span class="ruby-keyword">nil</span>
  <span class="ruby-ivar">@gem_version_promoter</span> = <span class="ruby-keyword">nil</span>

  <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;The definition is missing dependencies, failed to resolve &amp; materialize locally (#{e})&quot;</span>
  <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-new_platform-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">new_platform?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="new_platform-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 197</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">new_platform?</span>
  <span class="ruby-ivar">@new_platform</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-new_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">new_specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="new_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 189</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">new_specs</span>
  <span class="ruby-identifier">specs</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@locked_specs</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-nothing_changed-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">nothing_changed?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="nothing_changed-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 536</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">nothing_changed?</span>
  <span class="ruby-operator">!</span><span class="ruby-ivar">@source_changes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@dependency_changes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@new_platform</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@path_changes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@local_changes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@locked_specs_incomplete_for_platform</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-remove_platform" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">remove_platform</span><span
            class="method-args">(platform)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="remove_platform-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 516</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">remove_platform</span>(<span class="ruby-identifier">platform</span>)
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@platforms</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Platform</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">platform</span>))
  <span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidOption</span>, <span class="ruby-node">&quot;Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join &quot;, &quot;}&quot;</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-removed_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">removed_specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="removed_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 193</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">removed_specs</span>
  <span class="ruby-ivar">@locked_specs</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">specs</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-requested_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">requested_specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="requested_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 222</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">requested_specs</span>
  <span class="ruby-ivar">@requested_specs</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">groups</span> = <span class="ruby-identifier">requested_groups</span>
    <span class="ruby-identifier">groups</span>.<span class="ruby-identifier">map!</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:to_sym</span>)
    <span class="ruby-identifier">specs_for</span>(<span class="ruby-identifier">groups</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-resolve" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">resolve</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Resolve all the dependencies specified in Gemfile. It ensures that dependencies that have been already resolved via locked file and are fresh are reused when resolving dependencies</p>

<p>@return [SpecSet] resolved dependencies</p>
          
          

          
          <div class="method-source-code" id="resolve-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 245</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">resolve</span>
  <span class="ruby-ivar">@resolve</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">last_resolve</span> = <span class="ruby-identifier">converge_locked_specs</span>
    <span class="ruby-identifier">resolve</span> =
      <span class="ruby-keyword">if</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">frozen_bundle?</span>
        <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">&quot;Frozen, using resolution from the lockfile&quot;</span>
        <span class="ruby-identifier">last_resolve</span>
      <span class="ruby-keyword">elsif</span> <span class="ruby-operator">!</span><span class="ruby-identifier">unlocking?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">nothing_changed?</span>
        <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-string">&quot;Found no changes, using resolution from the lockfile&quot;</span>)
        <span class="ruby-identifier">last_resolve</span>
      <span class="ruby-keyword">else</span>
        <span class="ruby-comment"># Run a resolve against the locally available gems</span>
        <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Found changes from the lockfile, re-resolving dependencies because #{change_reason}&quot;</span>)
        <span class="ruby-identifier">last_resolve</span>.<span class="ruby-identifier">merge</span> <span class="ruby-constant">Resolver</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-identifier">expanded_dependencies</span>, <span class="ruby-identifier">index</span>, <span class="ruby-identifier">source_requirements</span>, <span class="ruby-identifier">last_resolve</span>, <span class="ruby-identifier">gem_version_promoter</span>, <span class="ruby-identifier">additional_base_requirements_for_resolve</span>, <span class="ruby-identifier">platforms</span>)
      <span class="ruby-keyword">end</span>

    <span class="ruby-comment"># filter out gems that _can_ be installed on multiple platforms, but don&#39;t need</span>
    <span class="ruby-comment"># to be</span>
    <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">for</span>(<span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-identifier">dependencies</span>, <span class="ruby-keyword">true</span>), [], <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-resolve_remotely-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">resolve_remotely!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="resolve_remotely-21-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 154</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">resolve_remotely!</span>
  <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Specs already loaded&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@specs</span>
  <span class="ruby-ivar">@remote</span> = <span class="ruby-keyword">true</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">remote!</span>
  <span class="ruby-identifier">specs</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-resolve_with_cache-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">resolve_with_cache!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="resolve_with_cache-21-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 148</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">resolve_with_cache!</span>
  <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Specs already loaded&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@specs</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">cached!</span>
  <span class="ruby-identifier">specs</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-spec_git_paths" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">spec_git_paths</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="spec_git_paths-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 319</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">spec_git_paths</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">git_sources</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">realpath</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">path</span>) <span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">path</span>) }.<span class="ruby-identifier">compact</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>For given dependency list returns a <a href="SpecSet.html"><code>SpecSet</code></a> with Gemspec of all the required dependencies.</p>

<pre>1. The method first resolves the dependencies specified in Gemfile
2. After that it tries and fetches gemspec of resolved dependencies</pre>

<p>@return [Bundler::SpecSet]</p>
          
          

          
          <div class="method-source-code" id="specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 167</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">specs</span>
  <span class="ruby-ivar">@specs</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-keyword">begin</span>
      <span class="ruby-identifier">specs</span> = <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">materialize</span>(<span class="ruby-identifier">requested_dependencies</span>)
    <span class="ruby-keyword">rescue</span> <span class="ruby-constant">GemNotFound</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span> <span class="ruby-comment"># Handle yanked gem</span>
      <span class="ruby-identifier">gem_name</span>, <span class="ruby-identifier">gem_version</span> = <span class="ruby-identifier">extract_gem_info</span>(<span class="ruby-identifier">e</span>)
      <span class="ruby-identifier">locked_gem</span> = <span class="ruby-ivar">@locked_specs</span>[<span class="ruby-identifier">gem_name</span>].<span class="ruby-identifier">last</span>
      <span class="ruby-identifier">raise</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">locked_gem</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">locked_gem</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">gem_version</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@remote</span>
      <span class="ruby-identifier">raise</span> <span class="ruby-constant">GemNotFound</span>, <span class="ruby-node">&quot;Your bundle is locked to #{locked_gem}, but that version could not &quot;</span> \
                         <span class="ruby-string">&quot;be found in any of the sources listed in your Gemfile. If you haven&#39;t changed sources, &quot;</span> \
                         <span class="ruby-node">&quot;that means the author of #{locked_gem} has removed it. You&#39;ll need to update your bundle &quot;</span> \
                         <span class="ruby-node">&quot;to a version other than #{locked_gem} that hasn&#39;t been removed in order to install.&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">specs</span>[<span class="ruby-string">&quot;bundler&quot;</span>].<span class="ruby-identifier">any?</span>
      <span class="ruby-identifier">bundler</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">metadata_source</span>.<span class="ruby-identifier">specs</span>.<span class="ruby-identifier">search</span>(<span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Dependency</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;bundler&quot;</span>, <span class="ruby-constant">VERSION</span>)).<span class="ruby-identifier">last</span>
      <span class="ruby-identifier">specs</span>[<span class="ruby-string">&quot;bundler&quot;</span>] = <span class="ruby-identifier">bundler</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">specs</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-specs_for" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">specs_for</span><span
            class="method-args">(groups)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="specs_for-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 234</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">specs_for</span>(<span class="ruby-identifier">groups</span>)
  <span class="ruby-identifier">deps</span> = <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> (<span class="ruby-identifier">d</span>.<span class="ruby-identifier">groups</span> <span class="ruby-operator">&amp;</span> <span class="ruby-identifier">groups</span>).<span class="ruby-identifier">any?</span> }
  <span class="ruby-identifier">deps</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">d</span>.<span class="ruby-identifier">should_include?</span> }
  <span class="ruby-identifier">specs</span>.<span class="ruby-identifier">for</span>(<span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-identifier">deps</span>))
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-to_lock" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">to_lock</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="to_lock-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 387</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">to_lock</span>
  <span class="ruby-identifier">require_relative</span> <span class="ruby-string">&quot;lockfile_generator&quot;</span>
  <span class="ruby-constant">LockfileGenerator</span>.<span class="ruby-identifier">generate</span>(<span class="ruby-keyword">self</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-unlocking-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">unlocking?</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="unlocking-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 540</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unlocking?</span>
  <span class="ruby-ivar">@unlocking</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-validate_platforms-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">validate_platforms!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="validate_platforms-21-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 499</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_platforms!</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@platforms</span>.<span class="ruby-identifier">any?</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bundle_platform</span><span class="ruby-operator">|</span>
    <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">rubygems</span>.<span class="ruby-identifier">platforms</span>.<span class="ruby-identifier">any?</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">local_platform</span><span class="ruby-operator">|</span>
      <span class="ruby-constant">MatchPlatform</span>.<span class="ruby-identifier">platforms_match?</span>(<span class="ruby-identifier">bundle_platform</span>, <span class="ruby-identifier">local_platform</span>)
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">raise</span> <span class="ruby-constant">ProductionError</span>, <span class="ruby-node">&quot;Your bundle only supports platforms #{@platforms.map(&amp;:to_s)} &quot;</span> \
    <span class="ruby-node">&quot;but your local platforms are #{Bundler.rubygems.platforms.map(&amp;:to_s)}, and &quot;</span> \
    <span class="ruby-string">&quot;there&#39;s no compatible match between those two lists.&quot;</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-validate_ruby-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">validate_ruby!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="validate_ruby-21-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 474</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_ruby!</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">ruby_version</span>

  <span class="ruby-keyword">if</span> <span class="ruby-identifier">diff</span> = <span class="ruby-identifier">ruby_version</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-constant">Bundler</span><span class="ruby-operator">::</span><span class="ruby-constant">RubyVersion</span>.<span class="ruby-identifier">system</span>)
    <span class="ruby-identifier">problem</span>, <span class="ruby-identifier">expected</span>, <span class="ruby-identifier">actual</span> = <span class="ruby-identifier">diff</span>

    <span class="ruby-identifier">msg</span> = <span class="ruby-keyword">case</span> <span class="ruby-identifier">problem</span>
          <span class="ruby-keyword">when</span> <span class="ruby-value">:engine</span>
            <span class="ruby-node">&quot;Your Ruby engine is #{actual}, but your Gemfile specified #{expected}&quot;</span>
          <span class="ruby-keyword">when</span> <span class="ruby-value">:version</span>
            <span class="ruby-node">&quot;Your Ruby version is #{actual}, but your Gemfile specified #{expected}&quot;</span>
          <span class="ruby-keyword">when</span> <span class="ruby-value">:engine_version</span>
            <span class="ruby-node">&quot;Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}&quot;</span>
          <span class="ruby-keyword">when</span> <span class="ruby-value">:patchlevel</span>
            <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">expected</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
              <span class="ruby-string">&quot;The Ruby patchlevel in your Gemfile must be a string&quot;</span>
            <span class="ruby-keyword">else</span>
              <span class="ruby-node">&quot;Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}&quot;</span>
            <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">raise</span> <span class="ruby-constant">RubyVersionMismatch</span>, <span class="ruby-identifier">msg</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-validate_runtime-21" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">validate_runtime!</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="validate_runtime-21-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 469</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_runtime!</span>
  <span class="ruby-identifier">validate_ruby!</span>
  <span class="ruby-identifier">validate_platforms!</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
     <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Private Instance Methods</h3>
       </header>

    
      <div id="method-i-additional_base_requirements_for_resolve" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">additional_base_requirements_for_resolve</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="additional_base_requirements_for_resolve-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 982</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">additional_base_requirements_for_resolve</span>
  <span class="ruby-keyword">return</span> [] <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@locked_gems</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">only_update_to_newer_versions?</span>
  <span class="ruby-identifier">dependencies_by_name</span> = <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">inject</span>({}) {<span class="ruby-operator">|</span><span class="ruby-identifier">memo</span>, <span class="ruby-identifier">dep</span><span class="ruby-operator">|</span> <span class="ruby-identifier">memo</span>.<span class="ruby-identifier">update</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">dep</span>) }
  <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">specs</span>.<span class="ruby-identifier">reduce</span>({}) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">requirements</span>, <span class="ruby-identifier">locked_spec</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">name</span> = <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">name</span>
    <span class="ruby-identifier">dependency</span> = <span class="ruby-identifier">dependencies_by_name</span>[<span class="ruby-identifier">name</span>]
    <span class="ruby-keyword">next</span> <span class="ruby-identifier">requirements</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@locked_gems</span>.<span class="ruby-identifier">dependencies</span>[<span class="ruby-identifier">name</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">dependency</span>
    <span class="ruby-keyword">next</span> <span class="ruby-identifier">requirements</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">dependency</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Path</span>)
    <span class="ruby-identifier">dep</span> = <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Dependency</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">name</span>, <span class="ruby-node">&quot;&gt;= #{locked_spec.version}&quot;</span>)
    <span class="ruby-identifier">requirements</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-constant">DepProxy</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">platform</span>)
    <span class="ruby-identifier">requirements</span>
  <span class="ruby-keyword">end</span>.<span class="ruby-identifier">values</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-change_reason" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">change_reason</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="change_reason-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 554</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">change_reason</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlocking?</span>
    <span class="ruby-identifier">unlock_reason</span> = <span class="ruby-ivar">@unlock</span>.<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">_k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-constant">Array</span>(<span class="ruby-identifier">v</span>).<span class="ruby-identifier">empty?</span> }.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
      <span class="ruby-keyword">if</span> <span class="ruby-identifier">v</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
        <span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_s</span>
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">v</span> = <span class="ruby-constant">Array</span>(<span class="ruby-identifier">v</span>)
        <span class="ruby-node">&quot;#{k}: (#{v.join(&quot;, &quot;)})&quot;</span>
      <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;, &quot;</span>)
    <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;bundler is unlocking #{unlock_reason}&quot;</span>
  <span class="ruby-keyword">end</span>
  [
    [<span class="ruby-ivar">@source_changes</span>, <span class="ruby-string">&quot;the list of sources changed&quot;</span>],
    [<span class="ruby-ivar">@dependency_changes</span>, <span class="ruby-string">&quot;the dependencies in your gemfile changed&quot;</span>],
    [<span class="ruby-ivar">@new_platform</span>, <span class="ruby-string">&quot;you added a new platform to your gemfile&quot;</span>],
    [<span class="ruby-ivar">@path_changes</span>, <span class="ruby-string">&quot;the gemspecs for path gems changed&quot;</span>],
    [<span class="ruby-ivar">@local_changes</span>, <span class="ruby-string">&quot;the gemspecs for git local gems changed&quot;</span>],
    [<span class="ruby-ivar">@locked_specs_incomplete_for_platform</span>, <span class="ruby-string">&quot;the lockfile does not have all gems needed for the current platform&quot;</span>],
  ].<span class="ruby-identifier">select</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:first</span>).<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:last</span>).<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;, &quot;</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-compute_requires" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">compute_requires</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="compute_requires-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 971</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">compute_requires</span>
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">reduce</span>({}) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">requires</span>, <span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">next</span> <span class="ruby-identifier">requires</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">should_include?</span>
    <span class="ruby-identifier">requires</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-constant">Array</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">autorequire</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
      <span class="ruby-comment"># Allow `require: true` as an alias for `require: &lt;name&gt;`</span>
      <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">file</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">requires</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-concat_ruby_version_requirements" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">concat_ruby_version_requirements</span><span
            class="method-args">(ruby_version, ruby_versions = [])</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="concat_ruby_version_requirements-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 871</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">concat_ruby_version_requirements</span>(<span class="ruby-identifier">ruby_version</span>, <span class="ruby-identifier">ruby_versions</span> = [])
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">ruby_versions</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">ruby_version</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">ruby_version</span>.<span class="ruby-identifier">patchlevel</span>
    <span class="ruby-identifier">ruby_versions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ruby_version</span>.<span class="ruby-identifier">to_gem_version_with_patchlevel</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">ruby_versions</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">ruby_version</span>.<span class="ruby-identifier">versions</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">version</span><span class="ruby-operator">|</span>
      <span class="ruby-identifier">requirement</span> = <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">Requirement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">version</span>)
      <span class="ruby-keyword">if</span> <span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">exact?</span>
        <span class="ruby-node">&quot;~&gt; #{version}.0&quot;</span>
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">requirement</span>
      <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_dependencies</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 697</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_dependencies</span>
  <span class="ruby-identifier">frozen</span> = <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">frozen_bundle?</span>
  (<span class="ruby-ivar">@dependencies</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">values</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">locked_source</span> = <span class="ruby-ivar">@locked_deps</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>]
    <span class="ruby-comment"># This is to make sure that if bundler is installing in deployment mode and</span>
    <span class="ruby-comment"># after locked_source and sources don&#39;t match, we still use locked_source.</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">frozen</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">locked_source</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span>
        <span class="ruby-identifier">locked_source</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:source</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">locked_source</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">instance_of?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Path</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">locked_source</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">exist?</span>
      <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> = <span class="ruby-identifier">locked_source</span>.<span class="ruby-identifier">source</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>
      <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>)
    <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Gemspec</span>)
      <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">platforms</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-ivar">@platforms</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-constant">Dependency</span><span class="ruby-operator">::</span><span class="ruby-constant">REVERSE_PLATFORM_MAP</span>[<span class="ruby-identifier">p</span>] }.<span class="ruby-identifier">flatten</span>(<span class="ruby-value">1</span>)).<span class="ruby-identifier">uniq!</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">changes</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-comment"># We want to know if all match, but don&#39;t want to check all entries</span>
  <span class="ruby-comment"># This means we need to return false if any dependency doesn&#39;t match</span>
  <span class="ruby-comment"># the lock or doesn&#39;t exist in the lock.</span>
  <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dependency</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">locked_dep</span> = <span class="ruby-ivar">@locked_deps</span>[<span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">name</span>]
      <span class="ruby-identifier">changes</span> = <span class="ruby-keyword">true</span>
      <span class="ruby-keyword">next</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-comment"># Gem::Dependency#== matches Gem::Dependency#type. As the lockfile</span>
    <span class="ruby-comment"># doesn&#39;t carry a notion of the dependency type, if you use</span>
    <span class="ruby-comment"># add_development_dependency in a gemspec that&#39;s loaded with the gemspec</span>
    <span class="ruby-comment"># directive, the lockfile dependencies and resolved dependencies end up</span>
    <span class="ruby-comment"># with a mismatch on #type. Work around that by setting the type on the</span>
    <span class="ruby-comment"># dep from the lockfile.</span>
    <span class="ruby-identifier">locked_dep</span>.<span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-value">:@type</span>, <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">type</span>)

    <span class="ruby-comment"># We already know the name matches from the hash lookup</span>
    <span class="ruby-comment"># so we only need to check the requirement now</span>
    <span class="ruby-identifier">changes</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">requirement</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">locked_dep</span>.<span class="ruby-identifier">requirement</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">changes</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_locals" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_locals</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Get all locals and override their matching sources. Return true if any of the locals changed (for example, they point to a new revision) or depend on new specs.</p>
          
          

          
          <div class="method-source-code" id="converge_locals-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 609</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_locals</span>
  <span class="ruby-identifier">locals</span> = []

  <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>.<span class="ruby-identifier">local_overrides</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">spec</span>   = <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">find</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">k</span> }
    <span class="ruby-identifier">source</span> = <span class="ruby-identifier">spec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">spec</span>.<span class="ruby-identifier">source</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:local_override!</span>)
      <span class="ruby-identifier">source</span>.<span class="ruby-identifier">unlock!</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">spec</span>.<span class="ruby-identifier">name</span>)
      <span class="ruby-identifier">locals</span> <span class="ruby-operator">&lt;&lt;</span> [<span class="ruby-identifier">source</span>, <span class="ruby-identifier">source</span>.<span class="ruby-identifier">local_override!</span>(<span class="ruby-identifier">v</span>)]
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">sources_with_changes</span> = <span class="ruby-identifier">locals</span>.<span class="ruby-identifier">select</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span>, <span class="ruby-identifier">changed</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">changed</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">specs_changed?</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">end</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:first</span>)
  <span class="ruby-operator">!</span><span class="ruby-identifier">sources_with_changes</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:sources</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">name</span> }.<span class="ruby-identifier">empty?</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_locked_specs" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_locked_specs</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Remove elements from the locked specs that are expired. This will most commonly happen if the Gemfile has changed since the lockfile was last generated</p>
          
          

          
          <div class="method-source-code" id="converge_locked_specs-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 743</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_locked_specs</span>
  <span class="ruby-identifier">deps</span> = []

  <span class="ruby-comment"># Build a list of dependencies that are the same in the Gemfile</span>
  <span class="ruby-comment"># and Gemfile.lock. If the Gemfile modified a dependency, but</span>
  <span class="ruby-comment"># the gem in the Gemfile.lock still satisfies it, this is fine</span>
  <span class="ruby-comment"># too.</span>
  <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">locked_dep</span> = <span class="ruby-ivar">@locked_deps</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>]

    <span class="ruby-comment"># If the locked_dep doesn&#39;t match the dependency we&#39;re looking for then we ignore the locked_dep</span>
    <span class="ruby-identifier">locked_dep</span> = <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">locked_dep</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">dep</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">in_locked_deps?</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">locked_dep</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">satisfies_locked_spec?</span>(<span class="ruby-identifier">dep</span>)
      <span class="ruby-identifier">deps</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">dep</span>
    <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Path</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">current_platform?</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">locked_dep</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">locked_dep</span>.<span class="ruby-identifier">source</span>)
      <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
        <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">name</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>
      <span class="ruby-keyword">end</span>

      <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">unlock!</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:unlock!</span>)
      <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">specs</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">name</span> }
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">unlock_source_unlocks_spec</span> = <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">unlock_source_unlocks_spec?</span>

  <span class="ruby-identifier">converged</span> = []
  <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
    <span class="ruby-comment"># Replace the locked dependency&#39;s source with the equivalent source from the Gemfile</span>
    <span class="ruby-identifier">dep</span> = <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">find</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">satisfies?</span>(<span class="ruby-identifier">d</span>) }
    <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> = (<span class="ruby-identifier">dep</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">get</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>)

    <span class="ruby-comment"># Don&#39;t add a spec to the list if its source is expired. For example,</span>
    <span class="ruby-comment"># if you change a Git gem to RubyGems.</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">nil?</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:sources</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">name</span>)

    <span class="ruby-comment"># XXX This is a backwards-compatibility fix to preserve the ability to</span>
    <span class="ruby-comment"># unlock a single gem by passing its name via `--source`. See issue #3759</span>
    <span class="ruby-comment"># TODO: delete in Bundler 2</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">unlock_source_unlocks_spec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:sources</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">name</span>)

    <span class="ruby-comment"># If the spec is from a path source and it doesn&#39;t exist anymore</span>
    <span class="ruby-comment"># then we unlock it.</span>

    <span class="ruby-comment"># Path sources have special logic</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">instance_of?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Path</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">instance_of?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Gemspec</span>)
      <span class="ruby-identifier">new_specs</span> = <span class="ruby-keyword">begin</span>
        <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">specs</span>
      <span class="ruby-keyword">rescue</span> <span class="ruby-constant">PathError</span>, <span class="ruby-constant">GitError</span>
        <span class="ruby-comment"># if we won&#39;t need the source (according to the lockfile),</span>
        <span class="ruby-comment"># don&#39;t error if the path/git source isn&#39;t available</span>
        <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@locked_specs</span>.
                <span class="ruby-identifier">for</span>(<span class="ruby-identifier">requested_dependencies</span>, [], <span class="ruby-keyword">false</span>, <span class="ruby-keyword">true</span>, <span class="ruby-keyword">false</span>).
                <span class="ruby-identifier">none?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">locked_spec</span><span class="ruby-operator">|</span> <span class="ruby-identifier">locked_spec</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> }

        <span class="ruby-identifier">raise</span>
      <span class="ruby-keyword">end</span>

      <span class="ruby-identifier">new_spec</span> = <span class="ruby-identifier">new_specs</span>[<span class="ruby-identifier">s</span>].<span class="ruby-identifier">first</span>

      <span class="ruby-comment"># If the spec is no longer in the path source, unlock it. This</span>
      <span class="ruby-comment"># commonly happens if the version changed in the gemspec</span>
      <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_spec</span>

      <span class="ruby-identifier">new_runtime_deps</span> = <span class="ruby-identifier">new_spec</span>.<span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">d</span>.<span class="ruby-identifier">type</span> <span class="ruby-operator">!=</span> <span class="ruby-value">:development</span> }
      <span class="ruby-identifier">old_runtime_deps</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">d</span>.<span class="ruby-identifier">type</span> <span class="ruby-operator">!=</span> <span class="ruby-value">:development</span> }
      <span class="ruby-comment"># If the dependencies of the path source have changed and locked spec can&#39;t satisfy new dependencies, unlock it</span>
      <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">new_runtime_deps</span>.<span class="ruby-identifier">sort</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">old_runtime_deps</span>.<span class="ruby-identifier">sort</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">new_runtime_deps</span>.<span class="ruby-identifier">all?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-identifier">satisfies_locked_spec?</span>(<span class="ruby-identifier">d</span>) }

      <span class="ruby-identifier">s</span>.<span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">new_spec</span>.<span class="ruby-identifier">dependencies</span>)
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">converged</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">resolve</span> = <span class="ruby-constant">SpecSet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">converged</span>)
  <span class="ruby-ivar">@locked_specs_incomplete_for_platform</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">for</span>(<span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-identifier">deps</span>), <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>], <span class="ruby-keyword">true</span>, <span class="ruby-keyword">true</span>)
  <span class="ruby-identifier">resolve</span> = <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">for</span>(<span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-identifier">deps</span>, <span class="ruby-keyword">true</span>), <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:gems</span>], <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>, <span class="ruby-keyword">false</span>)
  <span class="ruby-identifier">diff</span>    = <span class="ruby-keyword">nil</span>

  <span class="ruby-comment"># Now, we unlock any sources that do not have anymore gems pinned to it</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">all_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:unlock!</span>)

    <span class="ruby-keyword">unless</span> <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">any?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
      <span class="ruby-identifier">diff</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">to_a</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">resolve</span>.<span class="ruby-identifier">to_a</span>
      <span class="ruby-identifier">source</span>.<span class="ruby-identifier">unlock!</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">diff</span>.<span class="ruby-identifier">any?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">resolve</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_path_source_to_gemspec_source" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_path_source_to_gemspec_source</span><span
            class="method-args">(source)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_path_source_to_gemspec_source-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 633</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_path_source_to_gemspec_source</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">source</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">instance_of?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Path</span>)
  <span class="ruby-identifier">gemspec_source</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">path_sources</span>.<span class="ruby-identifier">find</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Gemspec</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">as_path_source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
  <span class="ruby-identifier">gemspec_source</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">source</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_path_sources_to_gemspec_sources" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_path_sources_to_gemspec_sources</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_path_sources_to_gemspec_sources-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 639</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_path_sources_to_gemspec_sources</span>
  <span class="ruby-ivar">@locked_sources</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">converge_path_source_to_gemspec_source</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">spec</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">spec</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">&amp;&amp;=</span> <span class="ruby-identifier">converge_path_source_to_gemspec_source</span>(<span class="ruby-identifier">spec</span>.<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">_</span>, <span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">&amp;&amp;=</span> <span class="ruby-identifier">converge_path_source_to_gemspec_source</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_paths" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_paths</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_paths-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 627</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_paths</span>
  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">path_sources</span>.<span class="ruby-identifier">any?</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">specs_changed?</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_rubygems_sources" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_rubygems_sources</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_rubygems_sources-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 651</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_rubygems_sources</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">disable_multisource?</span>

  <span class="ruby-identifier">changes</span> = <span class="ruby-keyword">false</span>

  <span class="ruby-comment"># Get the RubyGems sources from the Gemfile.lock</span>
  <span class="ruby-identifier">locked_gem_sources</span> = <span class="ruby-ivar">@locked_sources</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Rubygems</span>) }
  <span class="ruby-comment"># Get the RubyGems remotes from the Gemfile</span>
  <span class="ruby-identifier">actual_remotes</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">rubygems_remotes</span>

  <span class="ruby-comment"># If there is a RubyGems source in both</span>
  <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">locked_gem_sources</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">actual_remotes</span>.<span class="ruby-identifier">empty?</span>
    <span class="ruby-identifier">locked_gem_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">locked_gem</span><span class="ruby-operator">|</span>
      <span class="ruby-comment"># Merge the remotes from the Gemfile into the Gemfile.lock</span>
      <span class="ruby-identifier">changes</span> <span class="ruby-operator">|=</span> <span class="ruby-identifier">locked_gem</span>.<span class="ruby-identifier">replace_remotes</span>(<span class="ruby-identifier">actual_remotes</span>, <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>[<span class="ruby-value">:allow_deployment_source_credential_changes</span>])
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">changes</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-converge_sources" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">converge_sources</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="converge_sources-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 672</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">converge_sources</span>
  <span class="ruby-identifier">changes</span> = <span class="ruby-keyword">false</span>

  <span class="ruby-identifier">changes</span> <span class="ruby-operator">|=</span> <span class="ruby-identifier">converge_rubygems_sources</span>

  <span class="ruby-comment"># Replace the sources from the Gemfile with the sources from the Gemfile.lock,</span>
  <span class="ruby-comment"># if they exist in the Gemfile.lock and are `==`. If you can&#39;t find an equivalent</span>
  <span class="ruby-comment"># source in the Gemfile.lock, use the one from the Gemfile.</span>
  <span class="ruby-identifier">changes</span> <span class="ruby-operator">|=</span> <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">replace_sources!</span>(<span class="ruby-ivar">@locked_sources</span>)

  <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">all_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
    <span class="ruby-comment"># If the source is unlockable and the current command allows an unlock of</span>
    <span class="ruby-comment"># the source (for example, you are doing a `bundle update &lt;foo&gt;` of a git-pinned</span>
    <span class="ruby-comment"># gem), unlock it. For git sources, this means to unlock the revision, which</span>
    <span class="ruby-comment"># will cause the `ref` used to be the most recent for the branch (or master) if</span>
    <span class="ruby-comment"># an explicit `ref` is not used.</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:unlock!</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:sources</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">source</span>.<span class="ruby-identifier">name</span>)
      <span class="ruby-identifier">source</span>.<span class="ruby-identifier">unlock!</span>
      <span class="ruby-identifier">changes</span> = <span class="ruby-keyword">true</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">changes</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-current_platforms" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">current_platforms</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="current_platforms-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 546</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">current_platforms</span>
  <span class="ruby-identifier">current_platform</span> = <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">local_platform</span>
  [].<span class="ruby-identifier">tap</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">platforms</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">platforms</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">current_platform</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">specific_platform?</span>
    <span class="ruby-identifier">platforms</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">generic</span>(<span class="ruby-identifier">current_platform</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-dependencies_for_source_changed-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">dependencies_for_source_changed?</span><span
            class="method-args">(source, locked_source = source)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="dependencies_for_source_changed-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 588</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">dependencies_for_source_changed?</span>(<span class="ruby-identifier">source</span>, <span class="ruby-identifier">locked_source</span> = <span class="ruby-identifier">source</span>)
  <span class="ruby-identifier">deps_for_source</span> = <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
  <span class="ruby-identifier">locked_deps_for_source</span> = <span class="ruby-ivar">@locked_deps</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">locked_source</span> }

  <span class="ruby-constant">Set</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">deps_for_source</span>) <span class="ruby-operator">!=</span> <span class="ruby-constant">Set</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">locked_deps_for_source</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-double_check_for_index" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">double_check_for_index</span><span
            class="method-args">(idx, dependency_names)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Suppose the gem Foo depends on the gem Bar.  Foo exists in <a href="Source.html"><code>Source</code></a> A.  Bar has some versions that exist in both sources A and B.  At this point, the API request will have found all the versions of Bar in source A, but will not have found any versions of Bar from source B, which is a problem if the requested version of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for each spec we found, we add all possible versions from all sources to the index.</p>
          
          

          
          <div class="method-source-code" id="double_check_for_index-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 286</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">double_check_for_index</span>(<span class="ruby-identifier">idx</span>, <span class="ruby-identifier">dependency_names</span>)
  <span class="ruby-identifier">pinned_names</span> = <span class="ruby-identifier">pinned_spec_names</span>
  <span class="ruby-identifier">loop</span> <span class="ruby-keyword">do</span>
    <span class="ruby-identifier">idxcount</span> = <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">size</span>

    <span class="ruby-identifier">names</span> = <span class="ruby-value">:names</span> <span class="ruby-comment"># do this so we only have to traverse to get dependency_names from the index once</span>
    <span class="ruby-identifier">unmet_dependency_names</span> = <span class="ruby-identifier">lambda</span> <span class="ruby-keyword">do</span>
      <span class="ruby-keyword">return</span> <span class="ruby-identifier">names</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">names</span> <span class="ruby-operator">==</span> <span class="ruby-value">:names</span>
      <span class="ruby-identifier">new_names</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">all_sources</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:dependency_names_to_double_check</span>)
      <span class="ruby-keyword">return</span> <span class="ruby-identifier">names</span> = <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">new_names</span>.<span class="ruby-identifier">compact!</span>
      <span class="ruby-identifier">names</span> = <span class="ruby-identifier">new_names</span>.<span class="ruby-identifier">flatten</span>(<span class="ruby-value">1</span>).<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">dependency_names</span>)
      <span class="ruby-identifier">names</span>.<span class="ruby-identifier">uniq!</span>
      <span class="ruby-identifier">names</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">pinned_names</span>
      <span class="ruby-identifier">names</span>
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">all_sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">source</span><span class="ruby-operator">|</span>
      <span class="ruby-identifier">source</span>.<span class="ruby-identifier">double_check_for</span>(<span class="ruby-identifier">unmet_dependency_names</span>)
    <span class="ruby-keyword">end</span>

    <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">idxcount</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">idx</span>.<span class="ruby-identifier">size</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-equivalent_rubygems_remotes-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">equivalent_rubygems_remotes?</span><span
            class="method-args">(source)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="equivalent_rubygems_remotes-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 996</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">equivalent_rubygems_remotes?</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Source</span><span class="ruby-operator">::</span><span class="ruby-constant">Rubygems</span>)

  <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>[<span class="ruby-value">:allow_deployment_source_credential_changes</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">equivalent_remotes?</span>(<span class="ruby-identifier">sources</span>.<span class="ruby-identifier">rubygems_remotes</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-expand_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">expand_dependencies</span><span
            class="method-args">(dependencies, remote = false)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="expand_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 887</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">expand_dependencies</span>(<span class="ruby-identifier">dependencies</span>, <span class="ruby-identifier">remote</span> = <span class="ruby-keyword">false</span>)
  <span class="ruby-identifier">sorted_platforms</span> = <span class="ruby-constant">Resolver</span>.<span class="ruby-identifier">sort_platforms</span>(<span class="ruby-ivar">@platforms</span>)
  <span class="ruby-identifier">deps</span> = []
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">dep</span> = <span class="ruby-constant">Dependency</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-string">&quot;&gt;= 0&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:name</span>)
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">remote</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">dep</span>.<span class="ruby-identifier">current_platform?</span>
    <span class="ruby-identifier">platforms</span> = <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">gem_platforms</span>(<span class="ruby-identifier">sorted_platforms</span>)
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">platforms</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>[<span class="ruby-value">:disable_platform_warnings</span>]
      <span class="ruby-identifier">mapped_platforms</span> = <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">expanded_platforms</span>
      <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">warn</span> \
        <span class="ruby-node">&quot;The dependency #{dep} will be unused by any of the platforms Bundler is installing for. &quot;</span> \
        <span class="ruby-node">&quot;Bundler is installing for #{@platforms.join &quot;, &quot;} but the dependency &quot;</span> \
        <span class="ruby-node">&quot;is only for #{mapped_platforms.join &quot;, &quot;}. &quot;</span> \
        <span class="ruby-string">&quot;To add those platforms to the bundle, &quot;</span> \
        <span class="ruby-node">&quot;run `bundle lock --add-platform #{mapped_platforms.join &quot; &quot;}`.&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">platforms</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
      <span class="ruby-identifier">deps</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">DepProxy</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">p</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">remote</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">generic_local_platform</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">deps</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-expanded_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">expanded_dependencies</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>This list of dependencies is only used in <a href="Definition.html#method-i-resolve"><code>resolve</code></a>, so it&#39;s OK to add the metadata dependencies here</p>
          
          

          
          <div class="method-source-code" id="expanded_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 851</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">expanded_dependencies</span>
  <span class="ruby-ivar">@expanded_dependencies</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">expand_dependencies</span>(<span class="ruby-identifier">dependencies</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">metadata_dependencies</span>, <span class="ruby-ivar">@remote</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-extract_gem_info" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">extract_gem_info</span><span
            class="method-args">(error)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="extract_gem_info-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 965</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">extract_gem_info</span>(<span class="ruby-identifier">error</span>)
  <span class="ruby-comment"># This method will extract the error message like &quot;Could not find foo-1.2.3 in any of the sources&quot;</span>
  <span class="ruby-comment"># to an array. The first element will be the gem name (e.g. foo), the second will be the version number.</span>
  <span class="ruby-identifier">error</span>.<span class="ruby-identifier">message</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">/Could not find (\w+)-(\d+(?:\.\d+)+)/</span>).<span class="ruby-identifier">flatten</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-in_locked_deps-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">in_locked_deps?</span><span
            class="method-args">(dep, locked_dep)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="in_locked_deps-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 838</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">in_locked_deps?</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">locked_dep</span>)
  <span class="ruby-comment"># Because the lockfile can&#39;t link a dep to a specific remote, we need to</span>
  <span class="ruby-comment"># treat sources as equivalent anytime the locked dep has all the remotes</span>
  <span class="ruby-comment"># that the Gemfile dep does.</span>
  <span class="ruby-identifier">locked_dep</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">locked_dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">locked_dep</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-lockfiles_equal-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">lockfiles_equal?</span><span
            class="method-args">(current, proposed, preserve_unknown_sections)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="lockfiles_equal-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 952</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">lockfiles_equal?</span>(<span class="ruby-identifier">current</span>, <span class="ruby-identifier">proposed</span>, <span class="ruby-identifier">preserve_unknown_sections</span>)
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">preserve_unknown_sections</span>
    <span class="ruby-identifier">sections_to_ignore</span> = <span class="ruby-constant">LockfileParser</span>.<span class="ruby-identifier">sections_to_ignore</span>(<span class="ruby-ivar">@locked_bundler_version</span>)
    <span class="ruby-identifier">sections_to_ignore</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">LockfileParser</span>.<span class="ruby-identifier">unknown_sections_in_lockfile</span>(<span class="ruby-identifier">current</span>)
    <span class="ruby-identifier">sections_to_ignore</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">LockfileParser</span><span class="ruby-operator">::</span><span class="ruby-constant">ENVIRONMENT_VERSION_SECTIONS</span>
    <span class="ruby-identifier">pattern</span> = <span class="ruby-regexp">/#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/</span>
    <span class="ruby-identifier">whitespace_cleanup</span> = <span class="ruby-regexp">/\n{2,}/</span>
    <span class="ruby-identifier">current</span> = <span class="ruby-identifier">current</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">pattern</span>, <span class="ruby-string">&quot;\n&quot;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">whitespace_cleanup</span>, <span class="ruby-string">&quot;\n\n&quot;</span>).<span class="ruby-identifier">strip</span>
    <span class="ruby-identifier">proposed</span> = <span class="ruby-identifier">proposed</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">pattern</span>, <span class="ruby-string">&quot;\n&quot;</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">whitespace_cleanup</span>, <span class="ruby-string">&quot;\n\n&quot;</span>).<span class="ruby-identifier">strip</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">current</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">proposed</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-metadata_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">metadata_dependencies</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="metadata_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 857</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">metadata_dependencies</span>
  <span class="ruby-ivar">@metadata_dependencies</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">begin</span>
    <span class="ruby-identifier">ruby_versions</span> = <span class="ruby-identifier">concat_ruby_version_requirements</span>(<span class="ruby-ivar">@ruby_version</span>)
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">ruby_versions</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@ruby_version</span>.<span class="ruby-identifier">exact?</span>
      <span class="ruby-identifier">concat_ruby_version_requirements</span>(<span class="ruby-constant">RubyVersion</span>.<span class="ruby-identifier">system</span>)
      <span class="ruby-identifier">concat_ruby_version_requirements</span>(<span class="ruby-identifier">locked_ruby_version_object</span>) <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@unlock</span>[<span class="ruby-value">:ruby</span>]
    <span class="ruby-keyword">end</span>
    [
      <span class="ruby-constant">Dependency</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Ruby\0&quot;</span>, <span class="ruby-identifier">ruby_versions</span>),
      <span class="ruby-constant">Dependency</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;RubyGems\0&quot;</span>, <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>),
    ]
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-pinned_spec_names" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">pinned_spec_names</span><span
            class="method-args">(skip = nil)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="pinned_spec_names-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 937</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">pinned_spec_names</span>(<span class="ruby-identifier">skip</span> = <span class="ruby-keyword">nil</span>)
  <span class="ruby-identifier">pinned_names</span> = []
  <span class="ruby-identifier">default</span> = <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">disable_multisource?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">default_source</span>
  <span class="ruby-ivar">@dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">dep_source</span> = <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">dep_source</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">skip</span>
    <span class="ruby-identifier">pinned_names</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">pinned_names</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-pretty_dep" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">pretty_dep</span><span
            class="method-args">(dep, source = false)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="pretty_dep-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 576</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">pretty_dep</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">source</span> = <span class="ruby-keyword">false</span>)
  <span class="ruby-constant">SharedHelpers</span>.<span class="ruby-identifier">pretty_dependency</span>(<span class="ruby-identifier">dep</span>, <span class="ruby-identifier">source</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-requested_dependencies" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">requested_dependencies</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="requested_dependencies-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 910</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">requested_dependencies</span>
  <span class="ruby-identifier">groups</span> = <span class="ruby-identifier">requested_groups</span>
  <span class="ruby-identifier">groups</span>.<span class="ruby-identifier">map!</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:to_sym</span>)
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">d</span>.<span class="ruby-identifier">should_include?</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">d</span>.<span class="ruby-identifier">groups</span> <span class="ruby-operator">&amp;</span> <span class="ruby-identifier">groups</span>).<span class="ruby-identifier">empty?</span> }
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-requested_groups" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">requested_groups</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="requested_groups-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 948</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">requested_groups</span>
  <span class="ruby-identifier">groups</span> <span class="ruby-operator">-</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>[<span class="ruby-value">:without</span>] <span class="ruby-operator">-</span> <span class="ruby-ivar">@optional_groups</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">settings</span>[<span class="ruby-value">:with</span>]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-satisfies_locked_spec-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">satisfies_locked_spec?</span><span
            class="method-args">(dep)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="satisfies_locked_spec-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 845</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">satisfies_locked_spec?</span>(<span class="ruby-identifier">dep</span>)
  <span class="ruby-ivar">@locked_specs</span>[<span class="ruby-identifier">dep</span>].<span class="ruby-identifier">any?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">satisfies?</span>(<span class="ruby-identifier">dep</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-operator">!</span><span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">source</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span>)) }
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-source_requirements" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">source_requirements</span><span
            class="method-args">()</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="source_requirements-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 916</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">source_requirements</span>
  <span class="ruby-comment"># Load all specs from remote sources</span>
  <span class="ruby-identifier">index</span>

  <span class="ruby-comment"># Record the specs available in each gem&#39;s source, so that those</span>
  <span class="ruby-comment"># specs will be available later when the resolver knows where to</span>
  <span class="ruby-comment"># look for that gemspec (or its dependencies)</span>
  <span class="ruby-identifier">default</span> = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">default_source</span>
  <span class="ruby-identifier">source_requirements</span> = { <span class="ruby-value">:default</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">default</span> }
  <span class="ruby-identifier">default</span> = <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">feature_flag</span>.<span class="ruby-identifier">disable_multisource?</span>
  <span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">source</span> = <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">source</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default</span>
    <span class="ruby-identifier">source_requirements</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">source</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">metadata_dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">source_requirements</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">metadata_source</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">source_requirements</span>[<span class="ruby-string">&quot;bundler&quot;</span>] = <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">metadata_source</span> <span class="ruby-comment"># needs to come last to override</span>
  <span class="ruby-identifier">source_requirements</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-specs_changed-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">specs_changed?</span><span
            class="method-args">(source)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Check if the specs of the given source changed according to the locked source.</p>
          
          

          
          <div class="method-source-code" id="specs_changed-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 582</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">specs_changed?</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-identifier">locked</span> = <span class="ruby-ivar">@locked_sources</span>.<span class="ruby-identifier">find</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }

  <span class="ruby-operator">!</span><span class="ruby-identifier">locked</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">dependencies_for_source_changed?</span>(<span class="ruby-identifier">source</span>, <span class="ruby-identifier">locked</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">specs_for_source_changed?</span>(<span class="ruby-identifier">source</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-specs_for_source_changed-3F" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">specs_for_source_changed?</span><span
            class="method-args">(source)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="specs_for_source_changed-3F-source">
            <pre><span class="ruby-comment"># File lib/bundler/definition.rb, line 595</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">specs_for_source_changed?</span>(<span class="ruby-identifier">source</span>)
  <span class="ruby-identifier">locked_index</span> = <span class="ruby-constant">Index</span>.<span class="ruby-identifier">new</span>
  <span class="ruby-identifier">locked_index</span>.<span class="ruby-identifier">use</span>(<span class="ruby-ivar">@locked_specs</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">can_lock?</span>(<span class="ruby-identifier">s</span>) })

  <span class="ruby-comment"># order here matters, since Index#== is checking source.specs.include?(locked_index)</span>
  <span class="ruby-identifier">locked_index</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">source</span>.<span class="ruby-identifier">specs</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">PathError</span>, <span class="ruby-constant">GitError</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
  <span class="ruby-constant">Bundler</span>.<span class="ruby-identifier">ui</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;Assuming that #{source} has not changed since fetching its specs errored (#{e})&quot;</span>
  <span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
  </section>

</main>


<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>