class Bundler::CLI
Constants
- AUTO_INSTALL_CMDS
- PARSEABLE_COMMANDS
Public Class Methods
deprecated_option(*args, &blk)
click to toggle source
# File lib/bundler/cli.rb, line 64 def self.deprecated_option(*args, &blk) return if Bundler.feature_flag.forget_cli_options? method_option(*args, &blk) end
dispatch(*)
click to toggle source
Calls superclass method
# File lib/bundler/cli.rb, line 26 def self.dispatch(*) super do |i| i.send(:print_command) i.send(:warn_on_outdated_bundler) end end
handle_no_command_error(command, has_namespace = $thor_runner)
click to toggle source
Calls superclass method
# File lib/bundler/cli.rb, line 129 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
new(*args)
click to toggle source
Calls superclass method
Bundler::Thor::Actions::new
# File lib/bundler/cli.rb, line 33 def initialize(*args) super custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile] if custom_gemfile && !custom_gemfile.empty? Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", File.expand_path(custom_gemfile) Bundler.reset_paths! end Bundler.settings.set_command_option_if_given :retry, 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 ||= {} 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
reformatted_help_args(args)
click to toggle source
Reformat the arguments passed to bundle that include a –help flag into the corresponding `bundle help #{command}` call
# File lib/bundler/cli.rb, line 691 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_root()
click to toggle source
# File lib/bundler/cli.rb, line 583 def self.source_root File.expand_path(File.join(File.dirname(__FILE__), "templates")) end
start(*)
click to toggle source
Calls superclass method
# File lib/bundler/cli.rb, line 17 def self.start(*) super rescue Exception => e Bundler.ui = UI::Shell.new raise e ensure Bundler::SharedHelpers.print_major_deprecations! end
Public Instance Methods
add(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 368 def add(*gems) require "bundler/cli/add" Add.new(options.dup, gems).run end
binstubs(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 352 def binstubs(*gems) require "bundler/cli/binstubs" Binstubs.new(options, gems).run end
cache()
click to toggle source
# File lib/bundler/cli.rb, line 418 def cache require "bundler/cli/cache" Cache.new(options).run end
check()
click to toggle source
# File lib/bundler/cli.rb, line 164 def check require "bundler/cli/check" Check.new(options).run end
clean()
click to toggle source
# File lib/bundler/cli.rb, line 592 def clean require "bundler/cli/clean" Clean.new(options.dup).run end
cli_help()
click to toggle source
# File lib/bundler/cli.rb, line 73 def cli_help version Bundler.ui.info "\n" primary_commands = ["install", "update", Bundler.feature_flag.cache_command_is_package? ? "cache" : "package", "exec", "config", "help"] list = self.class.printable_commands(true) by_name = list.group_by {|name, _message| name.match(/^bundle (\w+)/)[1] } utilities = by_name.keys.sort - primary_commands primary_commands.map! {|name| (by_name[name] || raise("no primary command #{name}")).first } utilities.map! {|name| by_name[name].first } shell.say "Bundler commands:\n\n" shell.say " Primary commands:\n" shell.print_table(primary_commands, :indent => 4, :truncate => true) shell.say shell.say " Utilities:\n" shell.print_table(utilities, :indent => 4, :truncate => true) shell.say self.class.send(:class_options_help, shell) end
config(*args)
click to toggle source
# File lib/bundler/cli.rb, line 479 def config(*args) require "bundler/cli/config" Config.new(options, args, self).run end
console(group = nil)
click to toggle source
# File lib/bundler/cli.rb, line 492 def console(group = nil) require "bundler/cli/console" Console.new(options, group).run end
doctor()
click to toggle source
# File lib/bundler/cli.rb, line 661 def doctor require "bundler/cli/doctor" Doctor.new(options).run end
env()
click to toggle source
# File lib/bundler/cli.rb, line 647 def env Env.write($stdout) end
exec(*args)
click to toggle source
# File lib/bundler/cli.rb, line 461 def exec(*args) require "bundler/cli/exec" Exec.new(options, args).run end
help(cli = nil)
click to toggle source
Calls superclass method
# File lib/bundler/cli.rb, line 104 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
info(gem_name)
click to toggle source
# File lib/bundler/cli.rb, line 331 def info(gem_name) require "bundler/cli/info" Info.new(options, gem_name).run end
init()
click to toggle source
# File lib/bundler/cli.rb, line 146 def init require "bundler/cli/init" Init.new(options.dup).run end
inject(name, version)
click to toggle source
# File lib/bundler/cli.rb, line 610 def inject(name, version) SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command" require "bundler/cli/inject" Inject.new(options.dup, name, version).run end
install()
click to toggle source
# File lib/bundler/cli.rb, line 231 def install SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force") require "bundler/cli/install" Bundler.settings.temporary(:no_install => false) do Install.new(options.dup).run end end
issue()
click to toggle source
# File lib/bundler/cli.rb, line 667 def issue require "bundler/cli/issue" Issue.new.run end
licenses()
click to toggle source
# File lib/bundler/cli.rb, line 514 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
list()
click to toggle source
# File lib/bundler/cli.rb, line 319 def list require "bundler/cli/list" List.new(options).run end
lock()
click to toggle source
# File lib/bundler/cli.rb, line 641 def lock require "bundler/cli/lock" Lock.new(options).run end
open(name)
click to toggle source
# File lib/bundler/cli.rb, line 485 def open(name) require "bundler/cli/open" Open.new(options, name).run end
outdated(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 403 def outdated(*gems) require "bundler/cli/outdated" Outdated.new(options, gems).run end
package()
click to toggle source
# File lib/bundler/cli.rb, line 446 def package require "bundler/cli/package" Package.new(options).run end
platform()
click to toggle source
# File lib/bundler/cli.rb, line 600 def platform require "bundler/cli/platform" Platform.new(options).run end
pristine(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 678 def pristine(*gems) require "bundler/cli/pristine" Pristine.new(gems).run end
remove(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 175 def remove(*gems) require "bundler/cli/remove" Remove.new(gems, options).run end
show(gem_name = nil)
click to toggle source
# File lib/bundler/cli.rb, line 292 def show(gem_name = nil) if ARGV[0] == "show" rest = ARGV[1..-1] new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list" new_arguments = rest.map do |arg| next arg if arg != "--paths" next "--path" if new_command == "info" end old_argv = ARGV.join(" ") new_argv = [new_command, *new_arguments.compact].join(" ") Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`") end require "bundler/cli/show" Show.new(options, gem_name).run end
update(*gems)
click to toggle source
# File lib/bundler/cli.rb, line 277 def update(*gems) SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force") require "bundler/cli/update" Update.new(options, gems).run end
version()
click to toggle source
# File lib/bundler/cli.rb, line 499 def version cli_help = current_command.name == "cli_help" if cli_help || ARGV.include?("version") build_info = " (#{BuildMetadata.built_at} commit #{BuildMetadata.git_commit_sha})" end if !cli_help && Bundler.feature_flag.print_only_version_number? Bundler.ui.info "#{Bundler::VERSION}#{build_info}" else Bundler.ui.info "Bundler version #{Bundler::VERSION}#{build_info}" end end
viz()
click to toggle source
# File lib/bundler/cli.rb, line 539 def viz SharedHelpers.major_deprecation 2, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz" require "bundler/cli/viz" Viz.new(options.dup).run end
Private Instance Methods
auto_install()
click to toggle source
Automatically invoke `bundle install` and resume if Bundler.settings
exists. This is set through config cmd `bundle config auto_install
1`.
Note that this method `nil`s out the global Definition
object, so it should be called first, before you instantiate anything like an `Installer` that'll keep a reference to the old one instead.
# File lib/bundler/cli.rb, line 722 def auto_install return unless Bundler.settings[:auto_install] begin Bundler.definition.specs rescue GemNotFound Bundler.ui.info "Automatically installing missing gems." Bundler.reset! invoke :install, [] Bundler.reset! end end
current_command()
click to toggle source
# File lib/bundler/cli.rb, line 735 def current_command _, _, config = @_initializer config[:current_command] end
gem(name)
click to toggle source
# File lib/bundler/cli.rb, line 558 def gem(name) end
print_command()
click to toggle source
# File lib/bundler/cli.rb, line 740 def print_command return unless Bundler.ui.debug? cmd = current_command command_name = cmd.name return if PARSEABLE_COMMANDS.include?(command_name) command = ["bundle", command_name] + args options_to_print = options.dup options_to_print.delete_if do |k, v| next unless o = cmd.options[k] o.default == v end command << Thor::Options.to_switches(options_to_print.sort_by(&:first)).strip command.reject!(&:empty?) Bundler.ui.info "Running `#{command * " "}` with bundler #{Bundler::VERSION}" end
warn_on_outdated_bundler()
click to toggle source
# File lib/bundler/cli.rb, line 756 def warn_on_outdated_bundler return if Bundler.settings[:disable_version_check] command_name = current_command.name return if PARSEABLE_COMMANDS.include?(command_name) return unless SharedHelpers.md5_available? latest = Fetcher::CompactIndex. new(nil, Source::Rubygems::Remote.new(URI("https://rubygems.org")), nil). send(:compact_index_client). instance_variable_get(:@cache). dependencies("bundler"). map {|d| Gem::Version.new(d.first) }. max return unless latest current = Gem::Version.new(VERSION) return if current >= latest latest_installed = Bundler.rubygems.find_name("bundler").map(&:version).max installation = "To install the latest version, run `gem install bundler#{" --pre" if latest.prerelease?}`" if latest_installed && latest_installed > current suggestion = "To update to the most recent installed version (#{latest_installed}), run `bundle update --bundler`" suggestion = "#{installation}\n#{suggestion}" if latest_installed < latest else suggestion = installation end Bundler.ui.warn "The latest bundler is #{latest}, but you are currently running #{current}.\n#{suggestion}" rescue RuntimeError nil end