class Chef::Knife::Rehash

Public Instance Methods

generate_hash() click to toggle source
# File lib/chef/knife/rehash.rb, line 44
def generate_hash
  output = if Chef::Knife::SubcommandLoader.plugin_manifest?
             Chef::Knife::SubcommandLoader.plugin_manifest
           else
             { Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY => {} }
           end
  output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_paths"] = Chef::Knife.subcommand_files
  output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_by_category"] = Chef::Knife.subcommands_by_category
  output
end
reload_plugins() click to toggle source
# File lib/chef/knife/rehash.rb, line 37
def reload_plugins
  # The subcommand_loader for this knife command should _always_ be the GemGlobLoader.  The GemGlobLoader loads
  # plugins from disc and ensures the hash we write is always correct.  By this point it should also already have
  # loaded plugins and `load_commands` shouldn't have an effect.
  Chef::Knife.subcommand_loader.load_commands
end
run() click to toggle source
# File lib/chef/knife/rehash.rb, line 27
def run
  if ! Chef::Knife::SubcommandLoader.autogenerated_manifest?
    ui.msg "Using knife-rehash will speed up knife's load time by caching the location of subcommands on disk."
    ui.msg "However, you will need to update the cache by running `knife rehash` anytime you install a new knife plugin."
  else
    reload_plugins
  end
  write_hash(generate_hash)
end
write_hash(data) click to toggle source
# File lib/chef/knife/rehash.rb, line 55
def write_hash(data)
  plugin_manifest_dir = File.expand_path("..", Chef::Knife::SubcommandLoader.plugin_manifest_path)
  FileUtils.mkdir_p(plugin_manifest_dir) unless File.directory?(plugin_manifest_dir)
  File.open(Chef::Knife::SubcommandLoader.plugin_manifest_path, "w") do |f|
    f.write(Chef::JSONCompat.to_json_pretty(data))
    ui.msg "Knife subcommands are cached in #{Chef::Knife::SubcommandLoader.plugin_manifest_path}. Delete this file to disable the caching."
  end
end