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/resolver/root.rb,
lib/bundler/vendored_thor.rb,
lib/bundler/build_metadata.rb,
lib/bundler/force_platform.rb,
lib/bundler/match_metadata.rb,
lib/bundler/match_platform.rb,
lib/bundler/shared_helpers.rb,
lib/bundler/source/gemspec.rb,
lib/bundler/uri_normalizer.rb,
lib/bundler/vendored_tsort.rb,
lib/bundler/friendly_errors.rb,
lib/bundler/lockfile_parser.rb,
lib/bundler/source/metadata.rb,
lib/bundler/source/rubygems.rb,
lib/bundler/yaml_serializer.rb,
lib/bundler/plugin/installer.rb,
lib/bundler/resolver/package.rb,
lib/bundler/plugin/api/source.rb,
lib/bundler/vendored_pub_grub.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/resolver/candidate.rb,
lib/bundler/settings/validator.rb,
lib/bundler/stub_specification.rb,
lib/bundler/vendored_fileutils.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/resolver/incompatibility.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, ForcePlatform, FriendlyErrors, GemHelpers, MatchMetadata, MatchPlatform, MatchRemoteMetadata, Persistent, Plugin, PubGrub, RubyDsl, SharedHelpers, TSort, UI, URI, URICredentialsFilter, URINormalizer, YAMLSerializer
Classes: APIResponseInvalidDependenciesError, APIResponseMismatchError, BundlerError, CLI, CompactIndexClient, ConnectionPool, CurrentRuby, CyclicDependencyError, Definition, Dependency, Deployment, Deprecate, DeprecatedError, 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, PluginError, ProcessLock, ProductionError, RemoteSpecification, Resolver, Retry, RubyGemsGemInstaller, RubyVersion, RubyVersionMismatch, RubygemsIntegration, Runtime, SecurityError, SelfManager, Settings, SimilarityDetector, SocketAddress, SolveFailure, Source, SourceList, SourceMap, SpecSet, Standalone, StubSpecification, TemporaryResourceError, Thor, ThreadCreationError, VirtualProtocolError, Worker, YamlSyntaxError
Constant Summary
collapse
- ORIGINAL_ENV =
environment_preserver.restore
- SUDO_MUTEX =
Thread::Mutex.new
- SAFE_MARSHAL_CLASSES =
[Symbol, TrueClass, String, Array, Hash, Gem::Version, Gem::Specification].freeze
- SAFE_MARSHAL_ERROR =
"Unexpected class %s present in marshaled data. Only %s are allowed."
- SAFE_MARSHAL_PROC =
proc do |object|
object.tap do
unless SAFE_MARSHAL_CLASSES.include?(object.class)
raise TypeError, format(SAFE_MARSHAL_ERROR, object.class, SAFE_MARSHAL_CLASSES.join(", "))
end
end
end
- VERSION =
"2.4.12".freeze
- WINDOWS =
RbConfig::CONFIG["host_os"] =~ /(msdos|mswin|djgpp|mingw)/
- FREEBSD =
RbConfig::CONFIG["host_os"].to_s.include?("bsd")
- NULL =
WINDOWS ? "NUL" : "/dev/null"
- PersistentHTTP =
Persistent::Net::HTTP::Persistent
Class Method Summary
collapse
Class Method Details
.app_cache(custom_path = nil) ⇒ Object
329
330
331
332
|
# File 'lib/bundler.rb', line 329
def app_cache(custom_path = nil)
path = custom_path || root
Pathname.new(path).join(settings.app_cache_path)
end
|
.app_config_path ⇒ Object
315
316
317
318
319
320
321
322
323
324
325
326
327
|
# File 'lib/bundler.rb', line 315
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.
125
126
127
128
129
130
131
132
|
# File 'lib/bundler.rb', line 125
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.
105
106
107
|
# File 'lib/bundler.rb', line 105
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
363
364
365
366
367
368
369
370
371
372
|
# File 'lib/bundler.rb', line 363
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
450
451
452
453
454
455
456
457
458
459
|
# File 'lib/bundler.rb', line 450
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
428
429
430
431
432
433
434
435
436
437
|
# File 'lib/bundler.rb', line 428
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
556
557
558
|
# File 'lib/bundler.rb', line 556
def clear_gemspec_cache
@gemspec_cache = {}
end
|
91
92
93
|
# File 'lib/bundler.rb', line 91
def configure
@configure ||= configure_gem_home_and_path
end
|
602
603
604
605
606
|
# File 'lib/bundler.rb', line 602
def configure_gem_home_and_path(path = bundle_path)
configure_gem_path
configure_gem_home(path)
Bundler.rubygems.clear_paths
end
|
120
121
122
|
# File 'lib/bundler.rb', line 120
def configured_bundle_path
@configured_bundle_path ||= settings.path.tap(&:validate!)
end
|
.create_bundle_path ⇒ Object
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/bundler.rb', line 109
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
213
214
215
216
217
218
219
|
# File 'lib/bundler.rb', line 213
def definition(unlock = nil)
@definition = nil if unlock
@definition ||= begin
configure
Definition.build(default_gemfile, default_lockfile, unlock)
end
end
|
.environment ⇒ Object
203
204
205
206
|
# File 'lib/bundler.rb', line 203
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
565
566
567
|
# File 'lib/bundler.rb', line 565
def feature_flag
@feature_flag ||= FeatureFlag.new(VERSION)
end
|
.frozen_bundle? ⇒ Boolean
221
222
223
224
225
|
# File 'lib/bundler.rb', line 221
def frozen_bundle?
frozen = settings[:deployment]
frozen ||= settings[:frozen]
frozen
end
|
.gem_version ⇒ Object
10
11
12
|
# File 'lib/bundler/version.rb', line 10
def self.gem_version
@gem_version ||= Gem::Version.create(VERSION)
end
|
.git_present? ⇒ Boolean
560
561
562
563
|
# File 'lib/bundler.rb', line 560
def git_present?
return @git_present if defined?(@git_present)
@git_present = Bundler.which("git#{RbConfig::CONFIG["EXEEXT"]}")
end
|
.home ⇒ Object
293
294
295
|
# File 'lib/bundler.rb', line 293
def home
bundle_path.join("bundler")
end
|
.install_path ⇒ Object
297
298
299
|
# File 'lib/bundler.rb', line 297
def install_path
home.join("gems")
end
|
.load ⇒ Object
199
200
201
|
# File 'lib/bundler.rb', line 199
def load
@load ||= Runtime.new(root, definition)
end
|
.load_gemspec(file, validate = false) ⇒ Object
529
530
531
532
533
534
535
536
|
# File 'lib/bundler.rb', line 529
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
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
|
# File 'lib/bundler.rb', line 538
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
|
466
467
468
469
|
# File 'lib/bundler.rb', line 466
def local_platform
return Gem::Platform::RUBY if settings[:force_ruby_platform]
Gem::Platform.local
end
|
.mkdir_p(path, options = {}) ⇒ Object
237
238
239
240
241
|
# File 'lib/bundler.rb', line 237
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.
358
359
360
|
# File 'lib/bundler.rb', line 358
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
445
446
447
|
# File 'lib/bundler.rb', line 445
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
423
424
425
|
# File 'lib/bundler.rb', line 423
def original_system(*args)
with_original_env { Kernel.system(*args) }
end
|
.preferred_gemfile_name ⇒ Object
492
493
494
|
# File 'lib/bundler.rb', line 492
def preferred_gemfile_name
Bundler.settings[:init_gems_rb] ? "gems.rb" : "Gemfile"
end
|
.read_file(file) ⇒ Object
519
520
521
522
523
|
# File 'lib/bundler.rb', line 519
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)
195
196
197
|
# File 'lib/bundler.rb', line 195
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
|
.reset! ⇒ Object
569
570
571
572
573
|
# File 'lib/bundler.rb', line 569
def reset!
reset_paths!
Plugin.reset!
reset_rubygems!
end
|
.reset_paths! ⇒ Object
580
581
582
583
584
585
586
587
588
589
590
591
592
593
|
# File 'lib/bundler.rb', line 580
def reset_paths!
@bin_path = nil
@bundler_major_version = nil
@bundle_path = nil
@configure = 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
595
596
597
598
599
600
|
# File 'lib/bundler.rb', line 595
def reset_rubygems!
return unless defined?(@rubygems) && @rubygems
rubygems.undo_replacements
rubygems.reset
@rubygems = nil
end
|
.reset_settings_and_root! ⇒ Object
575
576
577
578
|
# File 'lib/bundler.rb', line 575
def reset_settings_and_root!
@settings = nil
@root = nil
end
|
.rm_rf(path) ⇒ Object
339
340
341
342
343
344
345
346
347
348
349
|
# File 'lib/bundler.rb', line 339
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
305
306
307
308
309
310
311
312
313
|
# File 'lib/bundler.rb', line 305
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
243
244
245
|
# File 'lib/bundler.rb', line 243
def ruby_scope
"#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
end
|
.rubygems ⇒ Object
559
560
561
|
# File 'lib/bundler/rubygems_integration.rb', line 559
def self.rubygems
@rubygems ||= RubygemsIntegration.new
end
|
.safe_load_marshal(data) ⇒ Object
525
526
527
|
# File 'lib/bundler.rb', line 525
def safe_load_marshal(data)
load_marshal(data, :marshal_proc => SAFE_MARSHAL_PROC)
end
|
.self_manager ⇒ Object
608
609
610
611
612
613
|
# File 'lib/bundler.rb', line 608
def self_manager
@self_manager ||= begin
require_relative "bundler/self_manager"
Bundler::SelfManager.new
end
end
|
.settings ⇒ Object
351
352
353
354
355
|
# File 'lib/bundler.rb', line 351
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.
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
# File 'lib/bundler.rb', line 161
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
301
302
303
|
# File 'lib/bundler.rb', line 301
def specs_path
bundle_path.join("specifications")
end
|
.system_bindir ⇒ Object
483
484
485
486
487
488
489
490
|
# File 'lib/bundler.rb', line 483
def system_bindir
Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
end
|
.tmp(name = Process.pid.to_s) ⇒ Object
334
335
336
337
|
# File 'lib/bundler.rb', line 334
def tmp(name = Process.pid.to_s)
Kernel.send(:require, "tmpdir")
Pathname.new(Dir.mktmpdir(["bundler", name]))
end
|
.ui ⇒ Object
95
96
97
|
# File 'lib/bundler.rb', line 95
def ui
(defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
end
|
.unbundled_env ⇒ Hash
Returns Environment with all bundler-related variables removed.
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
|
# File 'lib/bundler.rb', line 375
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
462
463
464
|
# File 'lib/bundler.rb', line 462
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
440
441
442
|
# File 'lib/bundler.rb', line 440
def unbundled_system(*args)
with_unbundled_env { Kernel.system(*args) }
end
|
.URI(uri) ⇒ Object
Returns uri
converted to an Bundler::URI object.
718
719
720
721
722
723
724
725
726
727
|
# File 'lib/bundler/vendor/uri/lib/uri/common.rb', line 718
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
496
497
498
|
# File 'lib/bundler.rb', line 496
def use_system_gems?
configured_bundle_path.use_system_gems?
end
|
.user_bundle_path(dir = "home") ⇒ Object
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
# File 'lib/bundler.rb', line 271
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
289
290
291
|
# File 'lib/bundler.rb', line 289
def user_cache
user_bundle_path("cache")
end
|
.user_home ⇒ Object
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
|
# File 'lib/bundler.rb', line 247
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
506
507
508
509
510
511
512
513
514
515
516
517
|
# File 'lib/bundler.rb', line 506
def which(executable)
if File.file?(executable) && File.executable?(executable)
executable
elsif paths = ENV["PATH"]
quote = '"'
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
406
407
408
409
410
411
412
413
414
415
|
# File 'lib/bundler.rb', line 406
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
401
402
403
|
# File 'lib/bundler.rb', line 401
def with_original_env
with_env(original_env) { yield }
end
|
.with_unbundled_env ⇒ Object
Run block with all bundler-related variables removed
418
419
420
|
# File 'lib/bundler.rb', line 418
def with_unbundled_env
with_env(unbundled_env) { yield }
end
|