Class: Chef::Knife::List
- Inherits:
-
ChefFS::Knife
- Object
- Chef::Knife
- ChefFS::Knife
- Chef::Knife::List
- Defined in:
- lib/chef/knife/list.rb
Instance Attribute Summary collapse
-
#exit_code ⇒ Object
Returns the value of attribute exit_code.
Attributes inherited from Chef::Knife
Instance Method Summary collapse
- #add_dir_result(result) ⇒ Object
- #maybe_add_slash(path, is_dir) ⇒ Object
- #print_result_paths(results, indent = "") ⇒ Object
- #print_results(results, indent) ⇒ Object
- #run ⇒ Object
Methods inherited from ChefFS::Knife
#chef_fs, #configure_chef, #create_chef_fs, #create_local_fs, deps, #discover_repo_dir, #format_path, inherited, #local_fs, #parallelize, #pattern_arg_from, #pattern_args, #pattern_args_from
Methods inherited from Chef::Knife
#api_key, #apply_computed_config, category, chef_config_dir, common_name, #config_file_settings, config_loader, #configure_chef, #create_object, #delete_object, dependency_loaders, deps, #format_rest_error, guess_category, #humanize_exception, #humanize_http_exception, inherited, #initialize, load_commands, load_config, load_deps, #maybe_setup_fips, #merge_configs, msg, #noauth_rest, #parse_options, reset_config_loader!, reset_subcommands!, #rest, run, #run_with_pretty_exceptions, #server_url, #show_usage, snake_case_name, subcommand_category, subcommand_class_from, subcommand_files, subcommand_loader, subcommands, subcommands_by_category, #test_mandatory_field, ui, unnamed?, use_separate_defaults?, #username
Methods included from Mixin::ConvertToClassName
#constantize, #convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #normalize_snake_case_name, #snake_case_basename
Methods included from Mixin::PathSanity
Constructor Details
This class inherits a constructor from Chef::Knife
Instance Attribute Details
#exit_code ⇒ Object
Returns the value of attribute exit_code.
41 42 43 |
# File 'lib/chef/knife/list.rb', line 41 def exit_code @exit_code end |
Instance Method Details
#add_dir_result(result) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/chef/knife/list.rb', line 103 def add_dir_result(result) begin children = result.children.sort_by { |child| child.name } rescue Chef::ChefFS::FileSystem::NotFoundError => e ui.error "#{format_path(e.entry)}: No such file or directory" return [] end result = [ [ result, children ] ] if config[:recursive] child_dirs = children.select { |child| child.dir? } result += parallelize(child_dirs) { |child| add_dir_result(child) }.flatten(1).to_a end result end |
#maybe_add_slash(path, is_dir) ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/chef/knife/list.rb', line 147 def maybe_add_slash(path, is_dir) if config[:trailing_slashes] && is_dir "#{path}/" else path end end |
#print_result_paths(results, indent = "") ⇒ Object
119 120 121 |
# File 'lib/chef/knife/list.rb', line 119 def print_result_paths(results, indent = "") print_results(results.map { |result| maybe_add_slash(format_path(result), result.dir?) }, indent) end |
#print_results(results, indent) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/chef/knife/list.rb', line 123 def print_results(results, indent) return if results.length == 0 print_space = results.map { |result| result.length }.max + 2 if config[:one_column] || !stdout.isatty columns = 0 else columns = HighLine::SystemExtensions.terminal_size[0] end current_line = "" results.each do |result| if current_line.length > 0 && current_line.length + print_space > columns output current_line.rstrip current_line = "" end if current_line.length == 0 current_line << indent end current_line << result current_line << (" " * (print_space - result.length)) end output current_line.rstrip if current_line.length > 0 end |
#run ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/chef/knife/list.rb', line 43 def run patterns = name_args.length == 0 ? [""] : name_args # Get the top-level matches all_results = parallelize(pattern_args_from(patterns)) do |pattern| pattern_results = Chef::ChefFS::FileSystem.list(config[:local] ? local_fs : chef_fs, pattern).to_a if pattern_results.first && !pattern_results.first.exists? && pattern.exact_path ui.error "#{format_path(pattern_results.first)}: No such file or directory" self.exit_code = 1 end pattern_results end.flatten(1).to_a # Process directories if !config[:bare_directories] dir_results = parallelize(all_results.select { |result| result.dir? }) do |result| add_dir_result(result) end.flatten(1) else dir_results = [] end # Process all other results results = all_results.select { |result| result.exists? && (!result.dir? || config[:bare_directories]) }.to_a # Flatten out directory results if necessary if config[:flat] dir_results.each do |result, children| results += children end dir_results = [] end # Sort by path for happy output results = results.sort_by { |result| result.path } dir_results = dir_results.sort_by { |result| result[0].path } # Print! if results.length == 0 && dir_results.length == 1 results = dir_results[0][1] dir_results = [] end print_result_paths results printed_something = results.length > 0 dir_results.each do |result, children| if printed_something output "" else printed_something = true end output "#{format_path(result)}:" print_results(children.map { |result| maybe_add_slash(result.display_name, result.dir?) }.sort, "") end exit self.exit_code if self.exit_code end |