Module: Bundler
- Defined in:
- lib/bundler.rb,
lib/bundler/ui.rb,
lib/bundler/cli.rb,
lib/bundler/dsl.rb,
lib/bundler/env.rb,
lib/bundler/graph.rb,
lib/bundler/index.rb,
lib/bundler/retry.rb,
lib/bundler/digest.rb,
lib/bundler/errors.rb,
lib/bundler/mirror.rb,
lib/bundler/plugin.rb,
lib/bundler/source.rb,
lib/bundler/worker.rb,
lib/bundler/cli/add.rb,
lib/bundler/cli/gem.rb,
lib/bundler/cli/viz.rb,
lib/bundler/fetcher.rb,
lib/bundler/runtime.rb,
lib/bundler/version.rb,
lib/bundler/cli/exec.rb,
lib/bundler/cli/fund.rb,
lib/bundler/cli/info.rb,
lib/bundler/cli/init.rb,
lib/bundler/cli/list.rb,
lib/bundler/cli/lock.rb,
lib/bundler/cli/open.rb,
lib/bundler/cli/show.rb,
lib/bundler/injector.rb,
lib/bundler/resolver.rb,
lib/bundler/ruby_dsl.rb,
lib/bundler/settings.rb,
lib/bundler/spec_set.rb,
lib/bundler/ui/shell.rb,
lib/bundler/cli/cache.rb,
lib/bundler/cli/check.rb,
lib/bundler/cli/clean.rb,
lib/bundler/cli/issue.rb,
lib/bundler/constants.rb,
lib/bundler/deprecate.rb,
lib/bundler/installer.rb,
lib/bundler/ui/silent.rb,
lib/bundler/cli/common.rb,
lib/bundler/cli/config.rb,
lib/bundler/cli/doctor.rb,
lib/bundler/cli/inject.rb,
lib/bundler/cli/plugin.rb,
lib/bundler/cli/remove.rb,
lib/bundler/cli/update.rb,
lib/bundler/definition.rb,
lib/bundler/dependency.rb,
lib/bundler/deployment.rb,
lib/bundler/gem_helper.rb,
lib/bundler/plugin/api.rb,
lib/bundler/plugin/dsl.rb,
lib/bundler/source/git.rb,
lib/bundler/source_map.rb,
lib/bundler/cli/console.rb,
lib/bundler/cli/install.rb,
lib/bundler/gem_helpers.rb,
lib/bundler/source/path.rb,
lib/bundler/source_list.rb,
lib/bundler/ui/rg_proxy.rb,
lib/bundler/cli/binstubs.rb,
lib/bundler/cli/outdated.rb,
lib/bundler/cli/platform.rb,
lib/bundler/cli/pristine.rb,
lib/bundler/current_ruby.rb,
lib/bundler/feature_flag.rb,
lib/bundler/fetcher/base.rb,
lib/bundler/plugin/index.rb,
lib/bundler/process_lock.rb,
lib/bundler/ruby_version.rb,
lib/bundler/self_manager.rb,
lib/bundler/vendored_uri.rb,
lib/bundler/fetcher/index.rb,
lib/bundler/plugin/events.rb,
lib/bundler/resolver/base.rb,
lib/bundler/vendored_thor.rb,
lib/bundler/build_metadata.rb,
lib/bundler/match_metadata.rb,
lib/bundler/match_platform.rb,
lib/bundler/shared_helpers.rb,
lib/bundler/source/gemspec.rb,
lib/bundler/vendored_tsort.rb,
lib/bundler/version_ranges.rb,
lib/bundler/friendly_errors.rb,
lib/bundler/lockfile_parser.rb,
lib/bundler/source/metadata.rb,
lib/bundler/source/rubygems.rb,
lib/bundler/vendored_tmpdir.rb,
lib/bundler/yaml_serializer.rb,
lib/bundler/plugin/installer.rb,
lib/bundler/plugin/api/source.rb,
lib/bundler/fetcher/dependency.rb,
lib/bundler/fetcher/downloader.rb,
lib/bundler/lazy_specification.rb,
lib/bundler/lockfile_generator.rb,
lib/bundler/plugin/source_list.rb,
lib/bundler/settings/validator.rb,
lib/bundler/stub_specification.rb,
lib/bundler/vendored_fileutils.rb,
lib/bundler/vendored_molinillo.rb,
lib/bundler/resolver/spec_group.rb,
lib/bundler/similarity_detector.rb,
lib/bundler/vendored_persistent.rb,
lib/bundler/vendored_persistent.rb,
lib/bundler/compact_index_client.rb,
lib/bundler/gem_version_promoter.rb,
lib/bundler/installer/standalone.rb,
lib/bundler/plugin/installer/git.rb,
lib/bundler/remote_specification.rb,
lib/bundler/rubygems_integration.rb,
lib/bundler/source/git/git_proxy.rb,
lib/bundler/environment_preserver.rb,
lib/bundler/fetcher/compact_index.rb,
lib/bundler/match_remote_metadata.rb,
lib/bundler/source/path/installer.rb,
lib/bundler/endpoint_specification.rb,
lib/bundler/rubygems_gem_installer.rb,
lib/bundler/source/rubygems/remote.rb,
lib/bundler/uri_credentials_filter.rb,
lib/bundler/installer/gem_installer.rb,
lib/bundler/plugin/installer/rubygems.rb,
lib/bundler/source/rubygems_aggregate.rb,
lib/bundler/vendor/uri/lib/uri/common.rb,
lib/bundler/compact_index_client/cache.rb,
lib/bundler/compact_index_client/updater.rb,
lib/bundler/installer/parallel_installer.rb,
lib/bundler/compact_index_client/gem_parser.rb
Overview
Defined Under Namespace
Modules: BuildMetadata, Digest, FetchMetadata, FileUtils, FriendlyErrors, GemHelpers, MatchMetadata, MatchPlatform, MatchRemoteMetadata, Molinillo, Persistent, Plugin, RubyDsl, SharedHelpers, TSort, UI, URI, URICredentialsFilter, VersionRanges, YAMLSerializer
Classes: APIResponseInvalidDependenciesError, APIResponseMismatchError, BundlerError, CLI, CompactIndexClient, ConnectionPool, CurrentRuby, CyclicDependencyError, Definition, Dependency, Deployment, Deprecate, DeprecatedError, Dir, DirectoryRemovalError, Dsl, EndpointSpecification, Env, EnvironmentPreserver, FeatureFlag, Fetcher, GemHelper, GemInstaller, GemNotFound, GemRequireError, GemVersionPromoter, GemfileError, GemfileEvalError, GemfileLockNotFound, GemfileNotFound, GemspecError, GenericSystemCallError, GitError, Graph, HTTPError, Index, Injector, InstallError, InstallHookError, Installer, InvalidOption, LazySpecification, LockfileError, LockfileGenerator, LockfileParser, MarshalError, MirrorSockets, NoSpaceOnDeviceError, OperationNotSupportedError, ParallelInstaller, PathError, PermissionError, PersistentHTTP, PluginError, ProcessLock, ProductionError, RemoteSpecification, Resolver, Retry, RubyGemsGemInstaller, RubyVersion, RubyVersionMismatch, RubygemsIntegration, Runtime, SecurityError, SelfManager, Settings, SimilarityDetector, SocketAddress, Source, SourceList, SourceMap, SpecSet, Standalone, StubSpecification, SudoNotPermittedError, TemporaryResourceError, Thor, ThreadCreationError, VersionConflict, VirtualProtocolError, Worker, YamlSyntaxError
Constant Summary
collapse
- ORIGINAL_ENV =
environment_preserver.restore
- SUDO_MUTEX =
Thread::Mutex.new
- VERSION =
"2.3.24".freeze
- WINDOWS =
RbConfig::CONFIG["host_os"] =~ /(msdos|mswin|djgpp|mingw)/
- FREEBSD =
RbConfig::CONFIG["host_os"] =~ /bsd/
- NULL =
WINDOWS ? "NUL" : "/dev/null"
Class Method Summary
collapse
Class Method Details
.app_cache(custom_path = nil) ⇒ Object
319
320
321
322
|
# File 'lib/bundler.rb', line 319
def app_cache(custom_path = nil)
path = custom_path || root
Pathname.new(path).join(settings.app_cache_path)
end
|
.app_config_path ⇒ Object
305
306
307
308
309
310
311
312
313
314
315
316
317
|
# File 'lib/bundler.rb', line 305
def app_config_path
if app_config = ENV["BUNDLE_APP_CONFIG"]
app_config_pathname = Pathname.new(app_config)
if app_config_pathname.absolute?
app_config_pathname
else
app_config_pathname.expand_path(root)
end
else
root.join(".bundle")
end
end
|
.bin_path ⇒ Object
Returns absolute location of where binstubs are installed to.
115
116
117
118
119
120
121
122
|
# File 'lib/bundler.rb', line 115
def bin_path
@bin_path ||= begin
path = settings[:bin] || "bin"
path = Pathname.new(path).expand_path(root).expand_path
SharedHelpers.filesystem_access(path) {|p| FileUtils.mkdir_p(p) }
path
end
end
|
.bundle_path ⇒ Object
Returns absolute path of where gems are installed on the filesystem.
95
96
97
|
# File 'lib/bundler.rb', line 95
def bundle_path
@bundle_path ||= Pathname.new(configured_bundle_path.path).expand_path(root)
end
|
.bundler_major_version ⇒ Object
6
7
8
|
# File 'lib/bundler/version.rb', line 6
def self.bundler_major_version
@bundler_major_version ||= VERSION.split(".").first.to_i
end
|
.clean_env ⇒ Object
Deprecated.
Use ‘unbundled_env` instead
353
354
355
356
357
358
359
360
361
362
|
# File 'lib/bundler.rb', line 353
def clean_env
Bundler::SharedHelpers.major_deprecation(
2,
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`",
:print_caller_location => true
)
unbundled_env
end
|
.clean_exec(*args) ⇒ Object
Deprecated.
Use ‘unbundled_exec` instead
440
441
442
443
444
445
446
447
448
449
|
# File 'lib/bundler.rb', line 440
def clean_exec(*args)
Bundler::SharedHelpers.major_deprecation(
2,
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`",
:print_caller_location => true
)
with_env(unbundled_env) { Kernel.exec(*args) }
end
|
.clean_system(*args) ⇒ Object
Deprecated.
Use ‘unbundled_system` instead
418
419
420
421
422
423
424
425
426
427
|
# File 'lib/bundler.rb', line 418
def clean_system(*args)
Bundler::SharedHelpers.major_deprecation(
2,
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`",
:print_caller_location => true
)
with_env(unbundled_env) { Kernel.system(*args) }
end
|
.clear_gemspec_cache ⇒ Object
605
606
607
|
# File 'lib/bundler.rb', line 605
def clear_gemspec_cache
@gemspec_cache = {}
end
|
81
82
83
|
# File 'lib/bundler.rb', line 81
def configure
@configured ||= configure_gem_home_and_path
end
|
651
652
653
654
655
|
# File 'lib/bundler.rb', line 651
def configure_gem_home_and_path(path = bundle_path)
configure_gem_path
configure_gem_home(path)
Bundler.rubygems.clear_paths
end
|
110
111
112
|
# File 'lib/bundler.rb', line 110
def configured_bundle_path
@configured_bundle_path ||= settings.path.tap(&:validate!)
end
|
.create_bundle_path ⇒ Object
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/bundler.rb', line 99
def create_bundle_path
SharedHelpers.filesystem_access(bundle_path.to_s) do |p|
mkdir_p(p)
end unless bundle_path.exist?
@bundle_path = bundle_path.realpath
rescue Errno::EEXIST
raise PathError, "Could not install to path `#{bundle_path}` " \
"because a file already exists at that path. Either remove or rename the file so the directory can be created."
end
|
Returns current version of Ruby
7
8
9
|
# File 'lib/bundler/current_ruby.rb', line 7
def self.current_ruby
@current_ruby ||= CurrentRuby.new
end
|
.default_bundle_dir ⇒ Object
.default_gemfile ⇒ Object
.default_lockfile ⇒ Object
Returns an instance of Bundler::Definition for given Gemfile and lockfile
203
204
205
206
207
208
209
|
# File 'lib/bundler.rb', line 203
def definition(unlock = nil)
@definition = nil if unlock
@definition ||= begin
configure
Definition.build(default_gemfile, default_lockfile, unlock)
end
end
|
.environment ⇒ Object
193
194
195
196
|
# File 'lib/bundler.rb', line 193
def environment
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true
load
end
|
.feature_flag ⇒ Object
614
615
616
|
# File 'lib/bundler.rb', line 614
def feature_flag
@feature_flag ||= FeatureFlag.new(VERSION)
end
|
.frozen_bundle? ⇒ Boolean
211
212
213
214
215
|
# File 'lib/bundler.rb', line 211
def frozen_bundle?
frozen = settings[:deployment]
frozen ||= settings[:frozen]
frozen
end
|
.git_present? ⇒ Boolean
609
610
611
612
|
# File 'lib/bundler.rb', line 609
def git_present?
return @git_present if defined?(@git_present)
@git_present = Bundler.which("git") || Bundler.which("git.exe")
end
|
.home ⇒ Object
283
284
285
|
# File 'lib/bundler.rb', line 283
def home
bundle_path.join("bundler")
end
|
.install_path ⇒ Object
287
288
289
|
# File 'lib/bundler.rb', line 287
def install_path
home.join("gems")
end
|
.load ⇒ Object
189
190
191
|
# File 'lib/bundler.rb', line 189
def load
@load ||= Runtime.new(root, definition)
end
|
.load_gemspec(file, validate = false) ⇒ Object
578
579
580
581
582
583
584
585
|
# File 'lib/bundler.rb', line 578
def load_gemspec(file, validate = false)
@gemspec_cache ||= {}
key = File.expand_path(file)
@gemspec_cache[key] ||= load_gemspec_uncached(file, validate)
@gemspec_cache[key].dup if @gemspec_cache[key]
end
|
.load_gemspec_uncached(file, validate = false) ⇒ Object
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
|
# File 'lib/bundler.rb', line 587
def load_gemspec_uncached(file, validate = false)
path = Pathname.new(file)
contents = read_file(file)
spec = if contents.start_with?("---") eval_yaml_gemspec(path, contents)
else
SharedHelpers.chdir(path.dirname.to_s) do
eval_gemspec(path, contents)
end
end
return unless spec
spec.loaded_from = path.expand_path.to_s
Bundler.rubygems.validate(spec) if validate
spec
end
|
.load_marshal(data) ⇒ Object
572
573
574
575
576
|
# File 'lib/bundler.rb', line 572
def load_marshal(data)
Marshal.load(data)
rescue TypeError => e
raise MarshalError, "#{e.class}: #{e.message}"
end
|
456
457
458
459
|
# File 'lib/bundler.rb', line 456
def local_platform
return Gem::Platform::RUBY if settings[:force_ruby_platform] || Gem.platforms == [Gem::Platform::RUBY]
Gem::Platform.local
end
|
.mkdir_p(path, options = {}) ⇒ Object
518
519
520
521
522
523
524
525
526
|
# File 'lib/bundler.rb', line 518
def mkdir_p(path, options = {})
if requires_sudo? && !options[:no_sudo]
sudo "mkdir -p '#{path}'" unless File.exist?(path)
else
SharedHelpers.filesystem_access(path, :write) do |p|
FileUtils.mkdir_p(p)
end
end
end
|
227
228
229
230
231
|
# File 'lib/bundler.rb', line 227
def most_specific_locked_platform?(platform)
return false unless defined?(@definition) && @definition
definition.most_specific_locked_platform == platform
end
|
.original_env ⇒ Hash
Returns Environment present before Bundler was activated.
348
349
350
|
# File 'lib/bundler.rb', line 348
def original_env
ORIGINAL_ENV.clone
end
|
.original_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand with the environment present before Bundler was activated
435
436
437
|
# File 'lib/bundler.rb', line 435
def original_exec(*args)
with_original_env { Kernel.exec(*args) }
end
|
.original_system(*args) ⇒ Object
Run subcommand with the environment present before Bundler was activated
413
414
415
|
# File 'lib/bundler.rb', line 413
def original_system(*args)
with_original_env { Kernel.system(*args) }
end
|
.preferred_gemfile_name ⇒ Object
482
483
484
|
# File 'lib/bundler.rb', line 482
def preferred_gemfile_name
Bundler.settings[:init_gems_rb] ? "gems.rb" : "Gemfile"
end
|
.read_file(file) ⇒ Object
566
567
568
569
570
|
# File 'lib/bundler.rb', line 566
def read_file(file)
SharedHelpers.filesystem_access(file, :read) do
File.open(file, "r:UTF-8", &:read)
end
end
|
.require(*groups) ⇒ Object
Setups Bundler environment (see Bundler.setup) if it is not already set, and loads all gems from groups specified. Unlike ::setup, can be called multiple times with different groups (if they were allowed by setup).
Assuming Gemfile
gem 'first_gem', '= 1.0'
group :test do
gem 'second_gem', '= 1.0'
end
The code will work as follows:
Bundler.setup Bundler.require(:default) Bundler.require(:test)
185
186
187
|
# File 'lib/bundler.rb', line 185
def require(*groups)
setup(*groups).require(*groups)
end
|
.require_thor_actions ⇒ Object
4
5
6
|
# File 'lib/bundler/vendored_thor.rb', line 4
def self.require_thor_actions
require_relative "vendor/thor/lib/thor/actions"
end
|
.requires_sudo? ⇒ Boolean
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
|
# File 'lib/bundler.rb', line 490
def requires_sudo?
return @requires_sudo if defined?(@requires_sudo_ran)
sudo_present = which "sudo" if settings.allow_sudo?
if sudo_present
path = bundle_path
path = path.parent until path.exist?
bin_dir = Pathname.new(Bundler.system_bindir)
bin_dir = bin_dir.parent until bin_dir.exist?
files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s]
unwritable_files = files.reject {|f| File.writable?(f) }
sudo_needed = !unwritable_files.empty?
if sudo_needed
Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n #{unwritable_files.map(&:to_s).sort.join("\n ")}"
end
end
@requires_sudo_ran = true
@requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed
end
|
.reset! ⇒ Object
618
619
620
621
622
|
# File 'lib/bundler.rb', line 618
def reset!
reset_paths!
Plugin.reset!
reset_rubygems!
end
|
.reset_paths! ⇒ Object
629
630
631
632
633
634
635
636
637
638
639
640
641
642
|
# File 'lib/bundler.rb', line 629
def reset_paths!
@bin_path = nil
@bundler_major_version = nil
@bundle_path = nil
@configured = nil
@configured_bundle_path = nil
@definition = nil
@load = nil
@locked_gems = nil
@root = nil
@settings = nil
@setup = nil
@user_home = nil
end
|
.reset_rubygems! ⇒ Object
644
645
646
647
648
649
|
# File 'lib/bundler.rb', line 644
def reset_rubygems!
return unless defined?(@rubygems) && @rubygems
rubygems.undo_replacements
rubygems.reset
@rubygems = nil
end
|
.reset_settings_and_root! ⇒ Object
624
625
626
627
|
# File 'lib/bundler.rb', line 624
def reset_settings_and_root!
@settings = nil
@root = nil
end
|
.rm_rf(path) ⇒ Object
329
330
331
332
333
334
335
336
337
338
339
|
# File 'lib/bundler.rb', line 329
def rm_rf(path)
FileUtils.remove_entry_secure(path) if path && File.exist?(path)
rescue ArgumentError
message = <<EOF
It is a security vulnerability to allow your home directory to be world-writable, and bundler cannot continue.
You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
Please refer to https://ruby-doc.org/stdlib-3.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
EOF
File.world_writable?(path) ? Bundler.ui.warn(message) : raise
raise PathError, "Please fix the world-writable issue with your #{path} directory"
end
|
.root ⇒ Object
295
296
297
298
299
300
301
302
303
|
# File 'lib/bundler.rb', line 295
def root
@root ||= begin
SharedHelpers.root
rescue GemfileNotFound
bundle_dir = default_bundle_dir
raise GemfileNotFound, "Could not locate Gemfile or .bundle/ directory" unless bundle_dir
Pathname.new(File.expand_path("..", bundle_dir))
end
end
|
.ruby_scope ⇒ Object
233
234
235
|
# File 'lib/bundler.rb', line 233
def ruby_scope
"#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
end
|
.rubygems ⇒ Object
563
564
565
|
# File 'lib/bundler/rubygems_integration.rb', line 563
def self.rubygems
@rubygems ||= RubygemsIntegration.new
end
|
.self_manager ⇒ Object
657
658
659
660
661
662
|
# File 'lib/bundler.rb', line 657
def self_manager
@self_manager ||= begin
require_relative "bundler/self_manager"
Bundler::SelfManager.new
end
end
|
.settings ⇒ Object
341
342
343
344
345
|
# File 'lib/bundler.rb', line 341
def settings
@settings ||= Settings.new(app_config_path)
rescue GemfileNotFound
@settings = Settings.new(Pathname.new(".bundle").expand_path)
end
|
.setup(*groups) ⇒ Object
Turns on the Bundler runtime. After Bundler.setup
call, all load
or require
of the gems would be allowed only if they are part of the Gemfile or Ruby’s standard library. If the versions specified in Gemfile, only those versions would be loaded.
Assuming Gemfile
gem 'first_gem', '= 1.0'
group :test do
gem 'second_gem', '= 1.0'
end
The code using Bundler.setup works as follows:
require 'third_gem' require 'first_gem' Bundler.setup
require 'fourth_gem' require 'second_gem'
Bundler.setup
can be called only once, all subsequent calls are no-op.
If groups list is provided, only gems from specified groups would be allowed (gems specified outside groups belong to special :default
group).
To require all gems from Gemfile (or only some groups), see Bundler.require.
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
# File 'lib/bundler.rb', line 151
def setup(*groups)
return @setup if defined?(@setup) && @setup
definition.validate_runtime!
SharedHelpers.print_major_deprecations!
if groups.empty?
@setup = load.setup
else
load.setup(*groups)
end
end
|
.specs_path ⇒ Object
291
292
293
|
# File 'lib/bundler.rb', line 291
def specs_path
bundle_path.join("specifications")
end
|
.sudo(str) ⇒ Object
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
|
# File 'lib/bundler.rb', line 541
def sudo(str)
SUDO_MUTEX.synchronize do
prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, "").strip + " "
Your user account isn't allowed to install to the system RubyGems.
You can cancel this installation and run:
bundle config set --local path 'vendor/bundle'
bundle install
to install the gems into ./vendor/bundle/, or you can enter your password
and install the bundled gems to RubyGems using sudo.
Password:
PROMPT
unless @prompted_for_sudo ||= system(%(sudo -k -p "#{prompt}" true))
raise SudoNotPermittedError,
"Bundler requires sudo access to install at the moment. " \
"Try installing again, granting Bundler sudo access when prompted, or installing into a different path."
end
`sudo -p "#{prompt}" #{str}`
end
end
|
.system_bindir ⇒ Object
473
474
475
476
477
478
479
480
|
# File 'lib/bundler.rb', line 473
def system_bindir
Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
end
|
.tmp(name = Process.pid.to_s) ⇒ Object
324
325
326
327
|
# File 'lib/bundler.rb', line 324
def tmp(name = Process.pid.to_s)
Kernel.send(:require, "tmpdir")
Pathname.new(Dir.mktmpdir(["bundler", name]))
end
|
.ui ⇒ Object
85
86
87
|
# File 'lib/bundler.rb', line 85
def ui
(defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
end
|
.unbundled_env ⇒ Hash
Returns Environment with all bundler-related variables removed.
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
|
# File 'lib/bundler.rb', line 365
def unbundled_env
env = original_env
if env.key?("BUNDLER_ORIG_MANPATH")
env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"]
end
env.delete_if {|k, _| k[0, 7] == "BUNDLE_" }
if env.key?("RUBYOPT")
rubyopt = env["RUBYOPT"].split(" ")
rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}")
rubyopt.delete("-rbundler/setup")
env["RUBYOPT"] = rubyopt.join(" ")
end
if env.key?("RUBYLIB")
rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
rubylib.delete(__dir__)
env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
end
env
end
|
.unbundled_exec(*args) ⇒ Object
Run a ‘Kernel.exec` to a subcommand in an environment with all bundler related variables removed
452
453
454
|
# File 'lib/bundler.rb', line 452
def unbundled_exec(*args)
with_env(unbundled_env) { Kernel.exec(*args) }
end
|
.unbundled_system(*args) ⇒ Object
Run subcommand in an environment with all bundler related variables removed
430
431
432
|
# File 'lib/bundler.rb', line 430
def unbundled_system(*args)
with_unbundled_env { Kernel.system(*args) }
end
|
.URI(uri) ⇒ Object
Returns uri
converted to an Bundler::URI object.
670
671
672
673
674
675
676
677
678
679
|
# File 'lib/bundler/vendor/uri/lib/uri/common.rb', line 670
def URI(uri)
if uri.is_a?(Bundler::URI::Generic)
uri
elsif uri = String.try_convert(uri)
Bundler::URI.parse(uri)
else
raise ArgumentError,
"bad argument (expected Bundler::URI object or Bundler::URI string)"
end
end
|
.use_system_gems? ⇒ Boolean
486
487
488
|
# File 'lib/bundler.rb', line 486
def use_system_gems?
configured_bundle_path.use_system_gems?
end
|
.user_bundle_path(dir = "home") ⇒ Object
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
|
# File 'lib/bundler.rb', line 261
def user_bundle_path(dir = "home")
env_var, fallback = case dir
when "home"
["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
when "cache"
["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
when "config"
["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
when "plugin"
["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
else
raise BundlerError, "Unknown user path requested: #{dir}"
end
Pathname.new(ENV.fetch(env_var, &fallback))
end
|
.user_cache ⇒ Object
279
280
281
|
# File 'lib/bundler.rb', line 279
def user_cache
user_bundle_path("cache")
end
|
.user_home ⇒ Object
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
# File 'lib/bundler.rb', line 237
def user_home
@user_home ||= begin
home = Bundler.rubygems.user_home
bundle_home = home ? File.join(home, ".bundle") : nil
warning = if home.nil?
"Your home directory is not set."
elsif !File.directory?(home)
"`#{home}` is not a directory."
elsif !File.writable?(home) && (!File.directory?(bundle_home) || !File.writable?(bundle_home))
"`#{home}` is not writable."
end
if warning
Bundler.ui.warn "#{warning}\n"
user_home = tmp_home_path
Bundler.ui.warn "Bundler will use `#{user_home}' as your home directory temporarily.\n"
user_home
else
Pathname.new(home)
end
end
end
|
.which(executable) ⇒ Object
528
529
530
531
532
533
534
535
536
537
538
539
|
# File 'lib/bundler.rb', line 528
def which(executable)
if File.file?(executable) && File.executable?(executable)
executable
elsif paths = ENV["PATH"]
quote = '"'.freeze
paths.split(File::PATH_SEPARATOR).find do |path|
path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote)
executable_path = File.expand_path(executable, path)
return executable_path if File.file?(executable_path) && File.executable?(executable_path)
end
end
end
|
.with_clean_env ⇒ Object
Deprecated.
Use ‘with_unbundled_env` instead
396
397
398
399
400
401
402
403
404
405
|
# File 'lib/bundler.rb', line 396
def with_clean_env
Bundler::SharedHelpers.major_deprecation(
2,
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`",
:print_caller_location => true
)
with_env(unbundled_env) { yield }
end
|
.with_friendly_errors ⇒ Object
.with_original_env ⇒ Object
Run block with environment present before Bundler was activated
391
392
393
|
# File 'lib/bundler.rb', line 391
def with_original_env
with_env(original_env) { yield }
end
|
.with_unbundled_env ⇒ Object
Run block with all bundler-related variables removed
408
409
410
|
# File 'lib/bundler.rb', line 408
def with_unbundled_env
with_env(unbundled_env) { yield }
end
|