class Bundler::CLI
Constants
- AUTO_INSTALL_CMDS
- COMMAND_ALIASES
- EXTENSIONS
- PARSEABLE_COMMANDS
Public Class Methods
aliases_for(command_name)
click to toggle source
# File bundler/cli.rb, line 55 def self.aliases_for(command_name) COMMAND_ALIASES.select {|k, _| k == command_name }.invert end
all_aliases()
click to toggle source
# File bundler/cli.rb, line 41 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
check_deprecated_ext_option(arguments)
click to toggle source
# File bundler/cli.rb, line 710 def self.check_deprecated_ext_option(arguments) # when deprecated version of `--ext` is called # print out deprecation warning and pretend `--ext=c` was provided if deprecated_ext_value?(arguments) message = "Extensions can now be generated using C or Rust, so `--ext` with no arguments has been deprecated. Please select a language, e.g. `--ext=rust` to generate a Rust extension. This gem will now be generated as if `--ext=c` was used." removed_message = "Extensions can now be generated using C or Rust, so `--ext` with no arguments has been removed. Please select a language, e.g. `--ext=rust` to generate a Rust extension." SharedHelpers.major_deprecation 2, message, removed_message: removed_message arguments[arguments.index("--ext")] = "--ext=c" end end
deprecated_ext_value?(arguments)
click to toggle source
# File bundler/cli.rb, line 721 def self.deprecated_ext_value?(arguments) index = arguments.index("--ext") next_argument = arguments[index + 1] # it is ok when --ext is followed with valid extension value # for example `bundle gem hello --ext c` return false if EXTENSIONS.include?(next_argument) # deprecated call when --ext is called with no value in last position # for example `bundle gem hello_gem --ext` return true if next_argument.nil? # deprecated call when --ext is followed by other parameter # for example `bundle gem --ext --no-ci hello_gem` return true if next_argument.start_with?("-") # deprecated call when --ext is followed by gem name # for example `bundle gem --ext hello_gem` return true if next_argument false end
dispatch(*)
click to toggle source
Calls superclass method
# File bundler/cli.rb, line 34 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 bundler/cli.rb, line 145 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 bundler/cli.rb, line 59 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_settings_and_root! end Bundler.auto_switch Bundler.settings.set_command_option_if_given :retry, options[:retry] current_cmd = args.last[:current_command].name Bundler.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) } 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 bundler/cli.rb, line 684 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 } 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 bundler/cli.rb, line 590 def self.source_root File.expand_path("templates", __dir__) end
start(*)
click to toggle source
Calls superclass method
# File bundler/cli.rb, line 26 def self.start(*) check_deprecated_ext_option(ARGV) if ARGV.include?("--ext") super ensure Bundler::SharedHelpers.print_major_deprecations! end
Public Instance Methods
add(*gems)
click to toggle source
# File bundler/cli.rb, line 359 def add(*gems) require_relative "cli/add" Add.new(options.dup, gems).run end
binstubs(*gems)
click to toggle source
# File bundler/cli.rb, line 337 def binstubs(*gems) require_relative "cli/binstubs" Binstubs.new(options, gems).run end
cache()
click to toggle source
# File bundler/cli.rb, line 419 def cache print_remembered_flag_deprecation("--all", "cache_all", "true") if ARGV.include?("--all") if ARGV.include?("--path") message = "The `--path` flag is deprecated because its semantics are unclear. " \ "Use `bundle config cache_path` to configure the path of your cache of gems, " \ "and `bundle config path` to configure the path where your gems are installed, " \ "and stop using this flag" removed_message = "The `--path` flag has been removed because its semantics were unclear. " \ "Use `bundle config cache_path` to configure the path of your cache of gems, " \ "and `bundle config path` to configure the path where your gems are installed." SharedHelpers.major_deprecation 2, message, removed_message: removed_message end require_relative "cli/cache" Cache.new(options).run end
check()
click to toggle source
# File bundler/cli.rb, line 177 def check remembered_flag_deprecation("path") require_relative "cli/check" Check.new(options).run end
clean()
click to toggle source
# File bundler/cli.rb, line 597 def clean require_relative "cli/clean" Clean.new(options.dup).run end
cli_help()
click to toggle source
# File bundler/cli.rb, line 88 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
console(group = nil)
click to toggle source
# File bundler/cli.rb, line 486 def console(group = nil) require_relative "cli/console" Console.new(options, group).run end
doctor()
click to toggle source
# File bundler/cli.rb, line 652 def doctor require_relative "cli/doctor" Doctor.new(options).run end
env()
click to toggle source
# File bundler/cli.rb, line 640 def env Env.write($stdout) end
exec(*args)
click to toggle source
# File bundler/cli.rb, line 449 def exec(*args) if ARGV.include?("--no-keep-file-descriptors") message = "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to" removed_message = "The `--no-keep-file-descriptors` has been removed. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to" SharedHelpers.major_deprecation(2, message, removed_message: removed_message) end require_relative "cli/exec" Exec.new(options, args).run end
fund()
click to toggle source
# File bundler/cli.rb, line 396 def fund require_relative "cli/fund" Fund.new(options).run end
help(cli = nil)
click to toggle source
Calls superclass method
# File bundler/cli.rb, line 117 def help(cli = nil) cli = self.class.all_aliases[cli] if self.class.all_aliases[cli] case cli when "gemfile" then command = "gemfile" when nil then command = "bundle" else command = "bundle-#{cli}" end man_path = File.expand_path("man", __dir__) 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) man_page = man_pages[command] if Bundler.which("man") && !man_path.match?(%r{^file:/.+!/META-INF/jruby.home/.+}) Kernel.exec("man", man_page) else puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") 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 bundler/cli.rb, line 320 def info(gem_name) require_relative "cli/info" Info.new(options, gem_name).run end
init()
click to toggle source
# File bundler/cli.rb, line 163 def init require_relative "cli/init" Init.new(options.dup).run end
inject(name, version)
click to toggle source
# File bundler/cli.rb, line 612 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
install()
click to toggle source
# File bundler/cli.rb, line 236 def install SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force") %w[clean deployment frozen no-prune path shebang without with].each do |option| remembered_flag_deprecation(option) end print_remembered_flag_deprecation("--system", "path.system", "true") if ARGV.include?("--system") remembered_negative_flag_deprecation("no-deployment") require_relative "cli/install" Bundler.settings.temporary(no_install: false) do Install.new(options.dup).run end end
issue()
click to toggle source
# File bundler/cli.rb, line 658 def issue require_relative "cli/issue" Issue.new.run end
licenses()
click to toggle source
# File bundler/cli.rb, line 509 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 bundler/cli.rb, line 310 def list require_relative "cli/list" List.new(options).run end
lock()
click to toggle source
# File bundler/cli.rb, line 634 def lock require_relative "cli/lock" Lock.new(options).run end
open(name)
click to toggle source
# File bundler/cli.rb, line 479 def open(name) require_relative "cli/open" Open.new(options, name).run end
outdated(*gems)
click to toggle source
# File bundler/cli.rb, line 389 def outdated(*gems) require_relative "cli/outdated" Outdated.new(options, gems).run end
platform()
click to toggle source
# File bundler/cli.rb, line 604 def platform require_relative "cli/platform" Platform.new(options).run end
pristine(*gems)
click to toggle source
# File bundler/cli.rb, line 669 def pristine(*gems) require_relative "cli/pristine" Bundler.settings.temporary(no_install: false) do Pristine.new(gems).run end end
remove(*gems)
click to toggle source
# File bundler/cli.rb, line 191 def remove(*gems) if ARGV.include?("--install") message = "The `--install` flag has been deprecated. `bundle install` is triggered by default." removed_message = "The `--install` flag has been removed. `bundle install` is triggered by default." SharedHelpers.major_deprecation(2, message, removed_message: removed_message) end require_relative "cli/remove" Remove.new(gems, options).run end
show(gem_name = nil)
click to toggle source
# File bundler/cli.rb, line 295 def show(gem_name = nil) if ARGV.include?("--outdated") message = "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement" removed_message = "the `--outdated` flag to `bundle show` was undocumented and has been removed without replacement" SharedHelpers.major_deprecation(2, message, removed_message: removed_message) end require_relative "cli/show" Show.new(options, gem_name).run end
update(*gems)
click to toggle source
# File bundler/cli.rb, line 278 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
version()
click to toggle source
# File bundler/cli.rb, line 493 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 bundler/cli.rb, line 534 def viz SharedHelpers.major_deprecation 2, "The `viz` command has been renamed to `graph` and moved to a plugin. See https://github.com/rubygems/bundler-graph" require_relative "cli/viz" Viz.new(options.dup).run end
Private Instance Methods
current_command()
click to toggle source
# File bundler/cli.rb, line 746 def current_command _, _, config = @_initializer config[:current_command] end
flag_deprecation(name, flag_name, option)
click to toggle source
# File bundler/cli.rb, line 806 def flag_deprecation(name, flag_name, option) name_index = ARGV.find {|arg| flag_name == arg.split("=")[0] } return unless name_index value = options[name] value = value.join(" ").to_s if option.type == :array value = "'#{value}'" unless option.type == :boolean print_remembered_flag_deprecation(flag_name, name.tr("-", "_"), value) end
gem(name)
click to toggle source
# File bundler/cli.rb, line 565 def gem(name) end
print_command()
click to toggle source
# File bundler/cli.rb, line 751 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
print_remembered_flag_deprecation(flag_name, option_name, option_value)
click to toggle source
# File bundler/cli.rb, line 817 def print_remembered_flag_deprecation(flag_name, option_name, option_value) message = "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 #{option_name} " \ "#{option_value}`, and stop using this flag" removed_message = "The `#{flag_name}` flag has been removed because it relied on being " \ "remembered across bundler invocations, which bundler will no longer " \ "do. Instead please use `bundle config set #{option_name} " \ "#{option_value}`, and stop using this flag" Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message end
remembered_flag_deprecation(name)
click to toggle source
# File bundler/cli.rb, line 799 def remembered_flag_deprecation(name) option = current_command.options[name] flag_name = option.switch_name flag_deprecation(name, flag_name, option) end
remembered_negative_flag_deprecation(name)
click to toggle source
# File bundler/cli.rb, line 791 def remembered_negative_flag_deprecation(name) positive_name = name.gsub(/\Ano-/, "") option = current_command.options[positive_name] flag_name = "--no-" + option.switch_name.gsub(/\A--/, "") flag_deprecation(positive_name, flag_name, option) end
warn_on_outdated_bundler()
click to toggle source
# File bundler/cli.rb, line 767 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? require_relative "vendored_uri" remote = Source::Rubygems::Remote.new(Gem::URI("https://rubygems.org")) cache_path = Bundler.user_cache.join("compact_index", remote.cache_slug) latest = Bundler::CompactIndexClient.new(cache_path).latest_version("bundler") return unless latest current = Gem::Version.new(VERSION) return if current >= latest Bundler.ui.warn \ "The latest bundler is #{latest}, but you are currently running #{current}.\n" \ "To update to the most recent version, run `bundle update --bundler`" rescue RuntimeError nil end