Class: Bundler::CLI::Exec

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/cli/exec.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options, args) ⇒ Exec

Returns a new instance of Exec.



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/bundler/cli/exec.rb', line 5

def initialize(options, args)
  @options = options
  @cmd = args.shift
  @args = args

  if RUBY_VERSION >= "2.0"
    @args << { :close_others => !options.keep_file_descriptors? }
  elsif options.keep_file_descriptors?
    Bundler.ui.warn "Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec."
  end
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



3
4
5
# File 'lib/bundler/cli/exec.rb', line 3

def args
  @args
end

#cmdObject (readonly)

Returns the value of attribute cmd.



3
4
5
# File 'lib/bundler/cli/exec.rb', line 3

def cmd
  @cmd
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/bundler/cli/exec.rb', line 3

def options
  @options
end

Instance Method Details

#runObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/bundler/cli/exec.rb', line 17

def run
  raise ArgumentError if cmd.nil?

  # First, try to exec directly to something in PATH
  SharedHelpers.set_bundle_environment
  bin_path = Bundler.which(@cmd)
  if bin_path
    Kernel.exec(bin_path, *args)
  end

  # If that didn't work, set up the whole bundle
  Bundler.definition.validate_ruby!
  Bundler.load.setup_environment
  Kernel.exec(@cmd, *args)
rescue Errno::EACCES
  Bundler.ui.error "bundler: not executable: #{cmd}"
  exit 126
rescue Errno::ENOENT
  Bundler.ui.error "bundler: command not found: #{cmd}"
  Bundler.ui.warn  "Install missing gem executables with `bundle install`"
  exit 127
rescue ArgumentError
  Bundler.ui.error "bundler: exec needs a command to run"
  exit 128
end