Class: Bundler::CLI
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Thor
|
|
Instance Chain:
|
|
Inherits: |
Bundler::Thor
|
Defined in: | lib/bundler/cli.rb, lib/bundler/cli/gem.rb |
Constant Summary
-
AUTO_INSTALL_CMDS =
# File 'lib/bundler/cli.rb', line 11%w[show binstubs outdated exec open console licenses clean].freeze
-
COMMAND_ALIASES =
# File 'lib/bundler/cli.rb', line 15{ "check" => "c", "install" => "i", "plugin" => "", "list" => "ls", "exec" => ["e", "ex", "exe"], "cache" => ["package", "pack"], "version" => ["-v", "--version"], }.freeze
-
EXTENSIONS =
# File 'lib/bundler/cli.rb', line 13["c", "rust"].freeze
-
PARSEABLE_COMMANDS =
# File 'lib/bundler/cli.rb', line 12%w[check config help exec platform show version].freeze
Thor
- Inherited
AmbiguousTaskError, Correctable, DynamicTask, HELP_MAPPINGS, HiddenTask, TEMPLATE_EXTNAME, THOR_RESERVED_WORDS, Task, UndefinedTaskError, VERSION
Thor::Actions
- Included
Class Method Summary
- .aliases_for(command_name)
- .all_aliases
- .check_deprecated_ext_option(arguments)
- .deprecated_ext_value?(arguments) ⇒ Boolean
- .dispatch
- .handle_no_command_error(command, has_namespace = $thor_runner)
- .new(*args) ⇒ CLI constructor
-
.reformatted_help_args(args)
Reformat the arguments passed to bundle that include a –help flag into the corresponding
bundle help #{command}
call. - .source_root
- .start
Thor
- Inherited
.check_unknown_options! | Extend check unknown options to accept a hash of conditions. |
.command_help | Prints help information for the given command. |
.default_command | Sets the default command when thor is executed without an explicit command to be called. |
.default_task | Alias for Thor.default_command. |
.desc | Defines the usage and the description of the next command. |
.disable_required_check! | Disable the check for required options for the given commands. |
.help | Prints help information for this class. |
.long_desc | Defines the long description of the next command. |
.map | Maps an input to a command. |
.method_option | Adds an option to the set of method options. |
.method_options | Declares the options for the next command to be declared. |
.option | Alias for Thor.method_option. |
.options | Alias for Thor.method_options. |
.package_name | Allows for custom “Command” package naming. |
.printable_commands | Returns commands ready to be printed. |
.printable_tasks | Alias for Thor.printable_commands. |
.register | Registers another |
.stop_on_unknown_option! | Stop parsing of options as soon as an unknown option or a regular argument is encountered. |
.subcommand, .subcommand_classes, .subcommands, | |
.subtask | Alias for Thor.subcommand. |
.subtasks | Alias for Thor.subcommands. |
.task_help | Alias for Thor.command_help. |
.banner | The banner for this class. |
.create_task | Alias for Thor.create_command. |
.find_command_possibilities | this is the logic that takes the command name passed in by the user and determines whether it is an unambiguous substrings of a command or alias name. |
.find_task_possibilities | Alias for Thor.find_command_possibilities. |
.normalize_task_name | Alias for Thor.normalize_command_name. |
.retrieve_task_name | Alias for Thor.retrieve_command_name. |
.subcommand_help, | |
.subtask_help | Alias for Thor.subcommand_help. |
.check_unknown_options? | Overwrite check_unknown_options? to take subcommands and options into account. |
.deprecation_warning, .disable_required_check?, .stop_on_unknown_option?, .baseclass, .create_command, | |
.disable_required_check | help command has the required check disabled by default. |
.dispatch | The method responsible for dispatching given the args. |
.dynamic_command_class, .initialize_added, | |
.normalize_command_name | receives a (possibly nil) command name and returns a name that is in the commands hash. |
.retrieve_command_name | Retrieve the command name from given args. |
.stop_on_unknown_option |
Instance Attribute Summary
Thor::Actions
- Included
#behavior, | |
#destination_root | Returns the root for this thor class (also aliased as destination root). |
#destination_root= | Sets the root for this thor class. |
#output_buffer |
Thor::Base
- Included
Instance Method Summary
- #add(*gems)
- #binstubs(*gems)
- #cache
- #check
- #clean
- #cli_help
- #console(group = nil)
- #doctor
- #env
- #exec(*args)
- #fund
- #help(cli = nil)
- #info(gem_name)
- #init
- #inject(name, version)
- #install
- #issue
- #licenses
- #list
- #lock
- #open(name)
- #outdated(*gems)
- #platform
- #pristine(*gems)
- #remove(*gems)
- #show(gem_name = nil)
- #update(*gems)
- #version
- #viz
- #auto_install private
- #current_command private
- #flag_deprecation(name, flag_name, option) private
- #gem(name) private
- #print_command private
- #remembered_flag_deprecation(name) private
- #remembered_negative_flag_deprecation(name) private
- #warn_on_outdated_bundler private
Thor::Actions
- Included
#add_file | Alias for Thor::Actions#create_file. |
#add_link | Alias for Thor::Actions#create_link. |
#append_file | Alias for Thor::Actions#append_to_file. |
#append_to_file | Append text to a file. |
#apply | Loads an external file and execute it in the instance binding. |
#chmod | Changes the mode of the given file or directory. |
#comment_lines | Comment all lines matching a given regex. |
#copy_file | Examples. |
#create_file | Create a new file relative to the destination root with the given data, which is the return value of a block or a data string. |
#create_link | Create a new file relative to the destination root from the given source. |
#directory | Copies recursively the files from source directory to root directory. |
#empty_directory | Creates an empty directory. |
#find_in_source_paths | Receives a file or directory and search for it in the source paths. |
#get | Gets the content at the given address and places it at the given relative destination. |
#gsub_file | Run a regular expression replacement on a file. |
#in_root | Goes to the root and execute the given block. |
#initialize | Extends initializer to add more configuration options. |
#inject_into_class | Injects text right after the class definition. |
#inject_into_file | Alias for Thor::Actions#insert_into_file. |
#inject_into_module | Injects text right after the module definition. |
#insert_into_file, | |
#inside | Do something in the root or on a provided subfolder. |
#link_file | Links the file from the relative source to the relative destination. |
#prepend_file | Alias for Thor::Actions#prepend_to_file. |
#prepend_to_file | Prepend text to a file. |
#relative_to_original_destination_root | Returns the given path relative to the absolute root (ie, root where the script started). |
#remove_dir | Alias for Thor::Actions#remove_file. |
#remove_file | Removes a file at the given location. |
#run | Executes a command returning the contents of the command. |
#run_ruby_script | Executes a ruby script (taking into account WIN32 platform quirks). |
#source_paths | Holds source paths in instance so they can be manipulated. |
#template | Gets an ERB template at the relative source, executes it and makes a copy at the relative destination. |
#thor | Run a thor command. |
#uncomment_lines | Uncomment all lines matching a given regex. |
#capture, #concat, | |
#action | Wraps an action object and call it accordingly to the thor class behavior. |
#_cleanup_options_and_set, | |
#_shared_configuration | Allow current root to be shared between invocations. |
#with_output_buffer |
Thor
- Inherited
Thor::Base
- Included
#initialize | It receives arguments in an Array and two hashes, one for options and other for configuration. |
Constructor Details
.new(*args) ⇒ CLI
# File 'lib/bundler/cli.rb', line 58
def initialize(*args) super custom_gemfile = [:gemfile] || Bundler.settings[:gemfile] if custom_gemfile && !custom_gemfile.empty? Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", File. (custom_gemfile) Bundler.reset_settings_and_root! end Bundler.self_manager.restart_with_locked_bundler_if_needed Bundler.settings.set_command_option_if_given :retry, [:retry] current_cmd = args.last[:current_command].name auto_install if AUTO_INSTALL_CMDS.include?(current_cmd) rescue UnknownArgumentError => e raise InvalidOption, e. ensure self. ||= {} unprinted_warnings = Bundler.ui.unprinted_warnings Bundler.ui = UI::Shell.new( ) Bundler.ui.level = "debug" if ["verbose"] unprinted_warnings.each {|w| Bundler.ui.warn(w) } end
Class Method Details
.aliases_for(command_name)
[ GitHub ]# File 'lib/bundler/cli.rb', line 54
def self.aliases_for(command_name) COMMAND_ALIASES.select {|k, _| k == command_name }.invert end
.all_aliases
[ GitHub ]# File 'lib/bundler/cli.rb', line 40
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)
[ GitHub ]# File 'lib/bundler/cli.rb', line 763
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) SharedHelpers.major_deprecation 2, "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." arguments[arguments.index("--ext")] = "--ext=c" end end
.deprecated_ext_value?(arguments) ⇒ Boolean
# File 'lib/bundler/cli.rb', line 772
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
[ GitHub ]# File 'lib/bundler/cli.rb', line 33
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)
[ GitHub ]# File 'lib/bundler/cli.rb', line 142
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)
Reformat the arguments passed to bundle that include a –help flag into the corresponding bundle help #{command}
call
# File 'lib/bundler/cli.rb', line 736
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
.source_root
[ GitHub ]# File 'lib/bundler/cli.rb', line 622
def self.source_root File. ("templates", __dir__) end
.start
[ GitHub ]# File 'lib/bundler/cli.rb', line 25
def self.start(*) check_deprecated_ext_option(ARGV) if ARGV.include?("--ext") super ensure Bundler::SharedHelpers.print_major_deprecations! end
Instance Method Details
#add(*gems)
[ GitHub ]#auto_install (private)
Automatically invoke bundle install
and resume if ::Bundler
.settings exists. This is set through config cmd bundle config set --global 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.
#binstubs(*gems)
[ GitHub ]#cache
[ GitHub ]# File 'lib/bundler/cli.rb', line 459
def cache SharedHelpers.major_deprecation 2, "The `--all` 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 cache_all true`, " \ "and stop using this flag" if ARGV.include?("--all") SharedHelpers.major_deprecation 2, "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" if ARGV.include?("--path") require_relative "cli/cache" Cache.new( ).run end
#check
[ GitHub ]# File 'lib/bundler/cli.rb', line 177
def check remembered_flag_deprecation("path") require_relative "cli/check" Check.new( ).run end
#clean
[ GitHub ]#cli_help
[ GitHub ]# File 'lib/bundler/cli.rb', line 87
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, | 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(:, shell) end
#console(group = nil)
[ GitHub ]#current_command (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 817
def current_command _, _, config = @_initializer config[:current_command] end
#doctor
[ GitHub ]#env
[ GitHub ]#exec(*args)
[ GitHub ]# File 'lib/bundler/cli.rb', line 486
def exec(*args) if ARGV.include?("--no-keep-file-descriptors") SharedHelpers.major_deprecation(2, "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") end require_relative "cli/exec" Exec.new(, args).run end
#flag_deprecation(name, flag_name, option) (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 880
def flag_deprecation(name, flag_name, option) name_index = ARGV.find {|arg| flag_name == arg.split("=")[0] } return unless name_index value = [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 --local #{name.tr("-", "_")} " \ "'#{value}'`, and stop using this flag" end
#fund
[ GitHub ]#gem(name) (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 597
def gem(name) end
#help(cli = nil)
[ GitHub ]# File 'lib/bundler/cli.rb', line 116
def help(cli = nil) case cli when "gemfile" then command = "gemfile" when nil then command = "bundle" else command = "bundle-#{cli}" end man_path = File. ("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 !~ %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)
[ GitHub ]#init
[ GitHub ]#inject(name, version)
[ GitHub ]# File 'lib/bundler/cli.rb', line 649
def inject(name, version) SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command" require_relative "cli/inject" Inject.new( .dup, name, version).run end
#install
[ GitHub ]# File 'lib/bundler/cli.rb', line 250
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 system without with].each do |option| remembered_flag_deprecation(option) end remembered_negative_flag_deprecation("no-deployment") require_relative "cli/install" Bundler.settings.temporary(:no_install => false) do Install.new( .dup).run end end
#issue
[ GitHub ]#licenses
[ GitHub ]#list
[ GitHub ]#lock
[ GitHub ]#open(name)
[ GitHub ]#outdated(*gems)
[ GitHub ]#platform
[ GitHub ]#print_command (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 822
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 = .dup .delete_if do |k, v| next unless o = cmd. [k] o.default == v end command << Thor::Options.to_switches( .sort_by(&:first)).strip command.reject!(&:empty?) Bundler.ui.info "Running `#{command * " "}` with bundler #{Bundler::VERSION}" end
#pristine(*gems)
[ GitHub ]#remembered_flag_deprecation(name) (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 873
def remembered_flag_deprecation(name) option = current_command. [name] flag_name = option.switch_name flag_deprecation(name, flag_name, option) end
#remembered_negative_flag_deprecation(name) (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 865
def remembered_negative_flag_deprecation(name) positive_name = name.gsub(/\Ano-/, "") option = current_command. [positive_name] flag_name = "--no-" + option.switch_name.gsub(/\A--/, "") flag_deprecation(positive_name, flag_name, option) end
#remove(*gems)
[ GitHub ]# File 'lib/bundler/cli.rb', line 192
def remove(*gems) SharedHelpers.major_deprecation(2, "The `--install` flag has been deprecated. `bundle install` is triggered by default.") if ARGV.include?("--install") require_relative "cli/remove" Remove.new(gems, ).run end
#show(gem_name = nil)
[ GitHub ]# File 'lib/bundler/cli.rb', line 324
def show(gem_name = nil) SharedHelpers.major_deprecation(2, "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement") if ARGV.include?("--outdated") require_relative "cli/show" Show.new(, gem_name).run end
#update(*gems)
[ GitHub ]# File 'lib/bundler/cli.rb', line 307
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(, gems).run end end
#version
[ GitHub ]# File 'lib/bundler/cli.rb', line 528
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
[ GitHub ]# File 'lib/bundler/cli.rb', line 569
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( .dup).run end
#warn_on_outdated_bundler (private)
[ GitHub ]# File 'lib/bundler/cli.rb', line 838
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 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