Some versions of the Bundler 1.1 RC series introduced corrupted lockfiles. There were two major problems:
multiple copies of the same GIT section appeared in the lockfile
when this happened, those sections got multiple copies of gems in those sections.
As a result, Bundler 1.1 contains code that fixes the earlier corruption. We will remove this fix-up code in Bundler 1.2.
We're doing this because we might write tests that deal with other versions of bundler and we are unsure how to handle this better.
# File lib/bundler.rb, line 182 def app_cache root.join("vendor/cache") end
# File lib/bundler.rb, line 176 def app_config_path ENV['BUNDLE_APP_CONFIG'] ? Pathname.new(ENV['BUNDLE_APP_CONFIG']).expand_path(root) : root.join('.bundle') end
Returns absolute location of where binstubs are installed to.
# File lib/bundler.rb, line 99 def bin_path @bin_path ||= begin path = settings[:bin] || "bin" path = Pathname.new(path).expand_path(root) FileUtils.mkdir_p(path) Pathname.new(path).expand_path end end
Returns absolute path of where gems are installed on the filesystem.
# File lib/bundler.rb, line 94 def bundle_path @bundle_path ||= Pathname.new(settings.path).expand_path(root) end
# File lib/bundler.rb, line 168 def cache bundle_path.join("cache/bundler") end
# File lib/bundler.rb, line 217 def clean_exec(*args) with_clean_env { Kernel.exec(*args) } end
# File lib/bundler.rb, line 213 def clean_system(*args) with_clean_env { Kernel.system(*args) } end
# File lib/bundler.rb, line 306 def clear_gemspec_cache @gemspec_cache = {} end
# File lib/bundler.rb, line 85 def configure @configured ||= configure_gem_home_and_path end
# File lib/bundler.rb, line 221 def default_gemfile SharedHelpers.default_gemfile end
# File lib/bundler.rb, line 225 def default_lockfile SharedHelpers.default_lockfile end
# File lib/bundler.rb, line 139 def definition(unlock = nil) @definition = nil if unlock @definition ||= begin configure upgrade_lockfile Definition.build(default_gemfile, default_lockfile, unlock) end end
# File lib/bundler.rb, line 135 def environment Bundler::Environment.new(root, definition) end
# File lib/bundler.rb, line 156 def home bundle_path.join("bundler") end
# File lib/bundler.rb, line 160 def install_path home.join("gems") end
# File lib/bundler.rb, line 131 def load @load ||= Runtime.new(root, definition) end
# File lib/bundler.rb, line 279 def load_gemspec(file) @gemspec_cache ||= {} key = File.expand_path(file) spec = ( @gemspec_cache[key] ||= load_gemspec_uncached(file) ) # Protect against caching side-effected gemspecs by returning a # new instance each time. spec.dup if spec end
# File lib/bundler.rb, line 288 def load_gemspec_uncached(file) path = Pathname.new(file) # Eval the gemspec from its parent directory Dir.chdir(path.dirname.to_s) do contents = File.read(path.basename.to_s) if contents =~ /\A---/ # try YAML begin Gem::Specification.from_yaml(contents) rescue ArgumentError, YamlSyntaxError, Gem::EndOfYAMLException, Gem::Exception eval_gemspec(path, contents) end else eval_gemspec(path, contents) end end end
# File lib/bundler.rb, line 252 def mkdir_p(path) if requires_sudo? sudo "mkdir -p '#{path}'" unless File.exist?(path) else FileUtils.mkdir_p(path) end end
# File lib/bundler/gem_path_manipulation.rb, line 2 def self.preserve_gem_path original_gem_path = ENV["_ORIGINAL_GEM_PATH"] gem_path = ENV["GEM_PATH"] ENV["_ORIGINAL_GEM_PATH"] = gem_path if original_gem_path.nil? || original_gem_path == "" ENV["GEM_PATH"] = original_gem_path if gem_path.nil? || gem_path == "" end
# File lib/bundler.rb, line 275 def read_file(file) File.open(file, "rb") { |f| f.read } end
# File lib/bundler.rb, line 127 def require(*groups) setup(*groups).require(*groups) end
# File lib/bundler.rb, line 238 def requires_sudo? return @requires_sudo if defined?(@checked_for_sudo) path = bundle_path path = path.parent until path.exist? sudo_present = which "sudo" bin_dir = Pathname.new(Bundler.system_bindir) bin_dir = bin_dir.parent until bin_dir.exist? @checked_for_sudo = true sudo_gems = !File.writable?(path) || !File.writable?(bin_dir) @requires_sudo = settings.allow_sudo? && sudo_gems && sudo_present end
# File lib/bundler.rb, line 172 def root default_gemfile.dirname.expand_path end
# File lib/bundler.rb, line 148 def ruby_scope "#{Bundler.rubygems.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}" end
# File lib/bundler.rb, line 190 def settings @settings ||= Settings.new(app_config_path) end
# File lib/bundler.rb, line 108 def setup(*groups) # Just return if all groups are already loaded return @setup if defined?(@setup) definition.validate_ruby! if groups.empty? # Load all groups, but only once @setup = load.setup else @completed_groups ||= [] # Figure out which groups haven't been loaded yet unloaded = groups - @completed_groups # Record groups that are now loaded @completed_groups = groups unloaded.any? ? load.setup(*groups) : load end end
# File lib/bundler.rb, line 164 def specs_path bundle_path.join("specifications") end
# File lib/bundler.rb, line 271 def sudo(str) `sudo -p 'Enter your password to install the bundled RubyGems to your system: ' #{str}` end
# File lib/bundler.rb, line 229 def system_bindir # Gem.bindir doesn't always return the location that Rubygems will install # system binaries. If you put '-n foo' in your .gemrc, Rubygems will # install binstubs there instead. Unfortunately, Rubygems doesn't expose # that directory at all, so rather than parse .gemrc ourselves, we allow # the directory to be set as well, via `bundle config bindir foo`. Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir end
# File lib/bundler.rb, line 186 def tmp user_bundle_path.join("tmp", Process.pid.to_s) end
# File lib/bundler.rb, line 152 def user_bundle_path Pathname.new(Bundler.rubygems.user_home).join(".bundler") end
# File lib/bundler.rb, line 260 def which(executable) if File.executable?(executable) executable elsif ENV['PATH'] path = ENV['PATH'].split(File::PATH_SEPARATOR).find do |p| File.executable?(File.join(p, executable)) end path && File.expand_path(executable, path) end end
# File lib/bundler.rb, line 202 def with_clean_env with_original_env do ENV.delete_if { |k,_| k[0,7] == 'BUNDLE_' } if ENV.has_key? 'RUBYOPT' ENV['RUBYOPT'] = ENV['RUBYOPT'].sub '-rbundler/setup', '' ENV['RUBYOPT'] = ENV['RUBYOPT'].sub "-I#{File.expand_path('..', __FILE__)}", '' end yield end end
# File lib/bundler/friendly_errors.rb, line 2 def self.with_friendly_errors begin yield rescue Bundler::BundlerError => e Bundler.ui.error e.message Bundler.ui.debug e.backtrace.join("\n") exit e.status_code rescue Interrupt => e Bundler.ui.error "\nQuitting..." Bundler.ui.debug e.backtrace.join("\n") exit 1 rescue SystemExit => e exit e.status rescue LoadError => e case e.message when /cannot load such file -- openssl/, /openssl.so/, /libcrypto.so/ Bundler.ui.error "\nCould not load OpenSSL." Bundler.ui.warn "You must recompile Ruby with OpenSSL support or change the sources in your" "\nGemfile from 'https' to 'http'. Instructions for compiling with OpenSSL" "\nusing RVM are available at rvm.io/packages/openssl." Bundler.ui.debug "#{e.class}: #{e.message}" Bundler.ui.debug e.backtrace.join("\n") exit 1 else raise e end rescue Exception => e Bundler.ui.error( "Unfortunately, a fatal error has occurred. Please see the Bundler \n" "troubleshooting documentation at http://bit.ly/bundler-issues. Thanks! \n") raise e end end
Generated with the Darkfish Rdoc Generator 2.