class Bundler::CLI
Constants
- AUTO_INSTALL_CMDS
- COMMAND_ALIASES
- PARSEABLE_COMMANDS
Public Class Methods
# File lib/bundler/cli.rb, line 50
def self.aliases_for(command_name)
COMMAND_ALIASES.select {|k, _| k == command_name }.invert
end # File lib/bundler/cli.rb, line 36
def self.all_aliases
@all_aliases ||= begin
command_aliases = {}
COMMAND_ALIASES.each do |name, aliases|
Array(aliases).each do |one_alias|
command_aliases[one_alias] = name
end
end
command_aliases
end
end # File lib/bundler/cli.rb, line 29
def self.dispatch(*)
super do |i|
i.send(:print_command)
i.send(:warn_on_outdated_bundler)
end
end Calls superclass method
# File lib/bundler/cli.rb, line 143
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 Calls superclass method
# File lib/bundler/cli.rb, line 54
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 Calls superclass method
Bundler::Thor::Actions::new # File lib/bundler/cli.rb, line 707
def self.reformatted_help_args(args)
bundler_commands = (COMMAND_ALIASES.keys + COMMAND_ALIASES.values).flatten
help_flags = %w[--help -h]
exec_commands = ["exec"] + COMMAND_ALIASES["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 }
command = all_aliases[command] if all_aliases[command]
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 Reformat the arguments passed to bundle that include a –help flag into the corresponding `bundle help #{command}` call
# File lib/bundler/cli.rb, line 597 def self.source_root File.expand_path(File.join(File.dirname(__FILE__), "templates")) end
# File lib/bundler/cli.rb, line 23 def self.start(*) super ensure Bundler::SharedHelpers.print_major_deprecations! end
Calls superclass method
Public Instance Methods
# File lib/bundler/cli.rb, line 396 def add(*gems) require_relative "cli/add" Add.new(options.dup, gems).run end
# File lib/bundler/cli.rb, line 378 def binstubs(*gems) require_relative "cli/binstubs" Binstubs.new(options, gems).run end
# File lib/bundler/cli.rb, line 459 def cache require_relative "cli/cache" Cache.new(options).run end
# File lib/bundler/cli.rb, line 177
def check
remembered_flag_deprecation("path")
require_relative "cli/check"
Check.new(options).run
end # File lib/bundler/cli.rb, line 606 def clean require_relative "cli/clean" Clean.new(options.dup).run end
# File lib/bundler/cli.rb, line 89
def cli_help
version
Bundler.ui.info "\n"
primary_commands = ["install", "update", "cache", "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 # File lib/bundler/cli.rb, line 504 def console(group = nil) require_relative "cli/console" Console.new(options, group).run end
# File lib/bundler/cli.rb, line 677 def doctor require_relative "cli/doctor" Doctor.new(options).run end
# File lib/bundler/cli.rb, line 663 def env Env.write($stdout) end
# File lib/bundler/cli.rb, line 474 def exec(*args) require_relative "cli/exec" Exec.new(options, args).run end
# File lib/bundler/cli.rb, line 118
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 Calls superclass method
# File lib/bundler/cli.rb, line 357 def info(gem_name) require_relative "cli/info" Info.new(options, gem_name).run end
# File lib/bundler/cli.rb, line 160 def init require_relative "cli/init" Init.new(options.dup).run end
# File lib/bundler/cli.rb, line 624 def inject(name, version) SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command" require_relative "cli/inject" Inject.new(options.dup, name, version).run end
# File lib/bundler/cli.rb, line 247
def install
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
%w[clean deployment frozen no-cache no-prune path shebang system without with].each do |option|
remembered_flag_deprecation(option)
end
require_relative "cli/install"
Bundler.settings.temporary(:no_install => false) do
Install.new(options.dup).run
end
end # File lib/bundler/cli.rb, line 683 def issue require_relative "cli/issue" Issue.new.run end
# File lib/bundler/cli.rb, line 527
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 # File lib/bundler/cli.rb, line 348 def list require_relative "cli/list" List.new(options).run end
# File lib/bundler/cli.rb, line 657 def lock require_relative "cli/lock" Lock.new(options).run end
# File lib/bundler/cli.rb, line 497 def open(name) require_relative "cli/open" Open.new(options, name).run end
# File lib/bundler/cli.rb, line 432 def outdated(*gems) require_relative "cli/outdated" Outdated.new(options, gems).run end
# File lib/bundler/cli.rb, line 614 def platform require_relative "cli/platform" Platform.new(options).run end
# File lib/bundler/cli.rb, line 694 def pristine(*gems) require_relative "cli/pristine" Pristine.new(gems).run end
# File lib/bundler/cli.rb, line 192 def remove(*gems) require_relative "cli/remove" Remove.new(gems, options).run end
# File lib/bundler/cli.rb, line 318
def show(gem_name = nil)
if ARGV[0] == "show"
rest = ARGV[1..-1]
if flag = rest.find{|arg| ["--verbose", "--outdated"].include?(arg) }
Bundler::SharedHelpers.major_deprecation(2, "the `#{flag}` flag to `bundle show` was undocumented and will be removed without replacement")
else
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
end
require_relative "cli/show"
Show.new(options, gem_name).run
end # File lib/bundler/cli.rb, line 300
def update(*gems)
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
require_relative "cli/update"
Bundler.settings.temporary(:no_install => false) do
Update.new(options, gems).run
end
end # File lib/bundler/cli.rb, line 511
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 # File lib/bundler/cli.rb, line 552 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_relative "cli/viz" Viz.new(options.dup).run end
Private Instance Methods
# File lib/bundler/cli.rb, line 743
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 Automatically invoke `bundle install` and resume if Bundler.settings exists. This is set through config cmd `bundle config set 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 756 def current_command _, _, config = @_initializer config[:current_command] end
# File lib/bundler/cli.rb, line 572 def gem(name) end
# File lib/bundler/cli.rb, line 761
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 # File lib/bundler/cli.rb, line 811
def remembered_flag_deprecation(name)
option = current_command.options[name]
flag_name = option.switch_name
name_index = ARGV.find {|arg| flag_name == arg }
return unless name_index
value = options[name]
value = value.join(" ").to_s if option.type == :array
Bundler::SharedHelpers.major_deprecation 2,\
"The `#{flag_name}` flag is deprecated because it relies on being " \
"remembered across bundler invocations, which bundler will no longer " \
"do in future versions. Instead please use `bundle config set #{name} " \
"'#{value}'`, and stop using this flag"
end # File lib/bundler/cli.rb, line 777
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(Bundler::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
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.