Class: Bundler::CLI

Inherits:
Thor
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/bundler/cli.rb

Defined Under Namespace

Modules: Common Classes: Binstubs, Cache, Check, Clean, Config, Console, Doctor, Exec, Gem, Init, Inject, Install, Lock, Open, Outdated, Package, Platform, Plugin, Show, Update, Viz

Constant Summary

AUTO_INSTALL_CMDS =
%w(show binstubs outdated exec open console licenses clean).freeze

Constants inherited from Thor

Thor::AmbiguousTaskError, Thor::DynamicTask, Thor::HELP_MAPPINGS, Thor::HiddenTask, Thor::TEMPLATE_EXTNAME, Thor::THOR_RESERVED_WORDS, Thor::Task, Thor::UndefinedTaskError, Thor::VERSION

Instance Attribute Summary

Attributes included from Thor::Actions

#behavior

Attributes included from Thor::Base

#args, #options, #parent_options

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Thor::Actions

#action, #append_to_file, #apply, #chmod, #comment_lines, #copy_file, #create_file, #create_link, #destination_root, #destination_root=, #directory, #empty_directory, #find_in_source_paths, #get, #gsub_file, #in_root, included, #inject_into_class, #insert_into_file, #inside, #link_file, #prepend_to_file, #relative_to_original_destination_root, #remove_file, #run, #run_ruby_script, #source_paths, #template, #thor, #uncomment_lines

Methods inherited from Thor

check_unknown_options!, check_unknown_options?, command_help, default_command, desc, help, long_desc, map, method_option, method_options, package_name, printable_commands, register, stop_on_unknown_option!, stop_on_unknown_option?, subcommand, subcommand_classes, subcommands

Methods included from Thor::Base

included, register_klass_file, subclass_files, subclasses

Constructor Details

#initialize(*args) ⇒ CLI



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/bundler/cli.rb', line 23

def initialize(*args)
  super
  Bundler.reset!

  custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile]
  ENV["BUNDLE_GEMFILE"] = File.expand_path(custom_gemfile) if custom_gemfile && !custom_gemfile.empty?

  Bundler.settings[:retry] = options[:retry] if options[:retry]

  current_cmd = args.last[:current_command].name
  auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
rescue UnknownArgumentError => e
  raise InvalidOption, e.message
ensure
  self.options ||= {}
  Bundler.settings.cli_flags_given = !options.empty?
  unprinted_warnings = Bundler.ui.unprinted_warnings
  Bundler.ui = UI::Shell.new(options)
  Bundler.ui.level = "debug" if options["verbose"]
  unprinted_warnings.each {|w| Bundler.ui.warn(w) }

  if ENV["RUBYGEMS_GEMDEPS"] && !ENV["RUBYGEMS_GEMDEPS"].empty?
    Bundler.ui.warn(
      "The RUBYGEMS_GEMDEPS environment variable is set. This enables RubyGems' " \
      "experimental Gemfile mode, which may conflict with Bundler and cause unexpected errors. " \
      "To remove this warning, unset RUBYGEMS_GEMDEPS.", :wrap => true
    )
  end
end

Class Method Details

.dispatchObject



19
20
21
# File 'lib/bundler/cli.rb', line 19

def self.dispatch(*)
  super {|i| i.send(:print_command) }
end

.handle_no_command_error(command, has_namespace = $thor_runner) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'lib/bundler/cli.rb', line 87

def self.handle_no_command_error(command, has_namespace = $thor_runner)
  if Bundler.feature_flag.plugins? && Bundler::Plugin.command?(command)
    return Bundler::Plugin.exec_command(command, ARGV[1..-1])
  end

  return super unless command_path = Bundler.which("bundler-#{command}")

  Kernel.exec(command_path, *ARGV[1..-1])
end

.reformatted_help_args(args) ⇒ Object

Reformat the arguments passed to bundle that include a –help flag into the corresponding `bundle help #command` call



528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
# File 'lib/bundler/cli.rb', line 528

def self.reformatted_help_args(args)
  bundler_commands = all_commands.keys
  help_flags = %w(--help -h)
  exec_commands = %w(e ex exe exec)
  help_used = args.index {|a| help_flags.include? a }
  exec_used = args.index {|a| exec_commands.include? a }
  command = args.find {|a| bundler_commands.include? a }
  if exec_used && help_used
    if exec_used + help_used == 1
      %w(help exec)
    else
      args
    end
  elsif help_used
    args = args.dup
    args.delete_at(help_used)
    ["help", command || args].flatten.compact
  else
    args
  end
end

.source_rootObject



441
442
443
# File 'lib/bundler/cli.rb', line 441

def self.source_root
  File.expand_path(File.join(File.dirname(__FILE__), "templates"))
end

.startObject



10
11
12
13
14
15
16
17
# File 'lib/bundler/cli.rb', line 10

def self.start(*)
  super
rescue Exception => e
  Bundler.ui = UI::Shell.new
  raise e
ensure
  Bundler::SharedHelpers.print_major_deprecations!
end

Instance Method Details

#binstubs(*gems) ⇒ Object



253
254
255
256
# File 'lib/bundler/cli.rb', line 253

def binstubs(*gems)
  require "bundler/cli/binstubs"
  Binstubs.new(options, gems).run
end

#cacheObject



295
296
297
298
# File 'lib/bundler/cli.rb', line 295

def cache
  require "bundler/cli/cache"
  Cache.new(options).run
end

#checkObject



122
123
124
125
# File 'lib/bundler/cli.rb', line 122

def check
  require "bundler/cli/check"
  Check.new(options).run
end

#cleanObject



450
451
452
453
# File 'lib/bundler/cli.rb', line 450

def clean
  require "bundler/cli/clean"
  Clean.new(options.dup).run
end

#config(*args) ⇒ Object



350
351
352
353
# File 'lib/bundler/cli.rb', line 350

def config(*args)
  require "bundler/cli/config"
  Config.new(options, args, self).run
end

#console(group = nil) ⇒ Object



362
363
364
365
366
# File 'lib/bundler/cli.rb', line 362

def console(group = nil)
  # TODO: Remove for 2.0
  require "bundler/cli/console"
  Console.new(options, group).run
end

#doctorObject



515
516
517
518
# File 'lib/bundler/cli.rb', line 515

def doctor
  require "bundler/cli/doctor"
  Doctor.new(options).run
end

#envObject



501
502
503
# File 'lib/bundler/cli.rb', line 501

def env
  Env.new.write($stdout)
end

#exec(*args) ⇒ Object



333
334
335
336
# File 'lib/bundler/cli.rb', line 333

def exec(*args)
  require "bundler/cli/exec"
  Exec.new(options, args).run
end

#help(cli = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/bundler/cli.rb', line 62

def help(cli = nil)
  case cli
  when "gemfile" then command = "gemfile"
  when nil       then command = "bundle"
  else command = "bundle-#{cli}"
  end

  man_path  = File.expand_path("../../../man", __FILE__)
  man_pages = Hash[Dir.glob(File.join(man_path, "*")).grep(/.*\.\d*\Z/).collect do |f|
    [File.basename(f, ".*"), f]
  end]

  if man_pages.include?(command)
    if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+}
      Kernel.exec "man #{man_pages[command]}"
    else
      puts File.read("#{man_path}/#{File.basename(man_pages[command])}.txt")
    end
  elsif command_path = Bundler.which("bundler-#{cli}")
    Kernel.exec(command_path, "--help")
  else
    super
  end
end

#initObject



104
105
106
107
# File 'lib/bundler/cli.rb', line 104

def init
  require "bundler/cli/init"
  Init.new(options.dup).run
end

#inject(name, version) ⇒ Object



464
465
466
467
468
# File 'lib/bundler/cli.rb', line 464

def inject(name, version)
  SharedHelpers.major_deprecation "The `inject` command has been replaced by the `add` command"
  require "bundler/cli/inject"
  Inject.new(options, name, version).run
end

#installObject



178
179
180
181
182
183
# File 'lib/bundler/cli.rb', line 178

def install
  require "bundler/cli/install"
  Bundler.settings.temporary(:no_install => false) do
    Install.new(options.dup).run
  end
end

#licensesObject



375
376
377
378
379
380
381
382
383
384
385
386
# File 'lib/bundler/cli.rb', line 375

def licenses
  Bundler.load.specs.sort_by {|s| s.license.to_s }.reverse_each do |s|
    gem_name = s.name
    license  = s.license || s.licenses

    if license.empty?
      Bundler.ui.warn "#{gem_name}: Unknown"
    else
      Bundler.ui.info "#{gem_name}: #{license}"
    end
  end
end

#lockObject



495
496
497
498
# File 'lib/bundler/cli.rb', line 495

def lock
  require "bundler/cli/lock"
  Lock.new(options).run
end

#open(name) ⇒ Object



356
357
358
359
# File 'lib/bundler/cli.rb', line 356

def open(name)
  require "bundler/cli/open"
  Open.new(options, name).run
end

#outdated(*gems) ⇒ Object



286
287
288
289
# File 'lib/bundler/cli.rb', line 286

def outdated(*gems)
  require "bundler/cli/outdated"
  Outdated.new(options, gems).run
end

#packageObject



319
320
321
322
# File 'lib/bundler/cli.rb', line 319

def package
  require "bundler/cli/package"
  Package.new(options).run
end

#platformObject



458
459
460
461
# File 'lib/bundler/cli.rb', line 458

def platform
  require "bundler/cli/platform"
  Platform.new(options).run
end

#show(gem_name = nil) ⇒ Object



233
234
235
236
237
# File 'lib/bundler/cli.rb', line 233

def show(gem_name = nil)
  Bundler::SharedHelpers.major_deprecation("use `bundle show` instead of `bundle list`") if ARGV[0] == "list"
  require "bundler/cli/show"
  Show.new(options, gem_name).run
end

#update(*gems) ⇒ Object



219
220
221
222
# File 'lib/bundler/cli.rb', line 219

def update(*gems)
  require "bundler/cli/update"
  Update.new(options, gems).run
end

#versionObject



369
370
371
# File 'lib/bundler/cli.rb', line 369

def version
  Bundler.ui.info "Bundler version #{Bundler::VERSION}"
end

#vizObject



399
400
401
402
# File 'lib/bundler/cli.rb', line 399

def viz
  require "bundler/cli/viz"
  Viz.new(options.dup).run
end