Class: Chef::Provider::Subversion
- Inherits:
-
Chef::Provider
- Object
- Chef::Provider
- Chef::Provider::Subversion
- Includes:
- ChefConfig::Mixin::FuzzyHostnameMatcher
- Defined in:
- lib/chef/provider/subversion.rb
Constant Summary collapse
- SVN_INFO_PATTERN =
/^([\w\s]+): (.+)$/.freeze
Instance Attribute Summary
Attributes inherited from Chef::Provider
#action, #after_resource, #current_resource, #logger, #new_resource, #run_context
Instance Method Summary collapse
- #checkout_command ⇒ Object
- #current_revision_matches_target_revision? ⇒ Boolean
- #define_resource_requirements ⇒ Object
- #export_command ⇒ Object
- #find_current_revision ⇒ Object
- #load_current_resource ⇒ Object
-
#revision_int ⇒ Object
(also: #revision_slug)
If the specified revision isn't an integer ("HEAD" for example), look up the revision id by asking the server If the specified revision is an integer, trust it.
- #run_options(run_opts = {}) ⇒ Object
- #sync_command ⇒ Object
Methods inherited from Chef::Provider
action, action_description, action_descriptions, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #description, #events, include_resource_dsl?, include_resource_dsl_module, #initialize, #introduced, #load_after_resource, #node, #process_resource_requirements, provides, provides?, #recipe_name, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use, use_inline_resources, #validate_required_properties!, #whyrun_mode?, #whyrun_supported?
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from DSL::Secret
#default_secret_config, #default_secret_service, #secret, #with_secret_config, #with_secret_service
Methods included from DSL::RenderHelpers
#render_json, #render_toml, #render_yaml
Methods included from DSL::ReaderHelpers
#parse_file, #parse_json, #parse_toml, #parse_yaml
Methods included from DSL::Powershell
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::ChefVault
#chef_vault, #chef_vault_item, #chef_vault_item_for_environment
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search, #tagged?
Methods included from EncryptedDataBagItem::CheckEncrypted
Methods included from DSL::PlatformIntrospection
#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from DSL::Recipe
#exec, #have_resource_class_for?, #resource_class_for
Methods included from DSL::Definitions
add_definition, #evaluate_resource_definition, #has_resource_definition?
Methods included from DSL::Resources
add_resource_dsl, remove_resource_dsl
Methods included from DSL::Cheffish
Methods included from DSL::RebootPending
Methods included from DSL::IncludeRecipe
Methods included from Mixin::NotifyingBlock
#notifying_block, #subcontext_block
Methods included from DSL::DeclareResource
#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context
Methods included from DSL::Compliance
#include_input, #include_profile, #include_waiver
Constructor Details
This class inherits a constructor from Chef::Provider
Instance Method Details
#checkout_command ⇒ Object
104 105 106 107 108 109 |
# File 'lib/chef/provider/subversion.rb', line 104 def checkout_command c = scm :checkout, new_resource.svn_arguments, verbose, authentication, proxy, "-r#{revision_int}", new_resource.repository, new_resource.destination logger.info "#{new_resource} checked out #{new_resource.repository} at revision #{new_resource.revision} to #{new_resource.destination}" c end |
#current_revision_matches_target_revision? ⇒ Boolean
145 146 147 |
# File 'lib/chef/provider/subversion.rb', line 145 def current_revision_matches_target_revision? (!current_resource.revision.nil?) && (revision_int.strip.to_i == current_resource.revision.strip.to_i) end |
#define_resource_requirements ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/chef/provider/subversion.rb', line 46 def define_resource_requirements requirements.assert(:all_actions) do |a| # Make sure the parent dir exists, or else fail. # for why run, print a message explaining the potential error. parent_directory = ::File.dirname(new_resource.destination) a.assertion { ::TargetIO::File.directory?(parent_directory) } a.(Chef::Exceptions::MissingParentDirectory, "Cannot clone #{new_resource} to #{new_resource.destination}, the enclosing directory #{parent_directory} does not exist") a.whyrun("Directory #{parent_directory} does not exist, assuming it would have been created") end end |
#export_command ⇒ Object
111 112 113 114 115 116 117 118 |
# File 'lib/chef/provider/subversion.rb', line 111 def export_command args = ["--force"] args << new_resource.svn_arguments << verbose << authentication << proxy << "-r#{revision_int}" << new_resource.repository << new_resource.destination c = scm :export, *args logger.info "#{new_resource} exported #{new_resource.repository} at revision #{new_resource.revision} to #{new_resource.destination}" c end |
#find_current_revision ⇒ Object
136 137 138 139 140 141 142 143 |
# File 'lib/chef/provider/subversion.rb', line 136 def find_current_revision return nil unless ::TargetIO::File.exist?(::File.join(new_resource.destination, ".svn")) command = scm(:info) svn_info = shell_out!(command, **(cwd: cwd, returns: [0, 1])).stdout extract_revision_info(svn_info) end |
#load_current_resource ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'lib/chef/provider/subversion.rb', line 36 def load_current_resource @current_resource = Chef::Resource::Subversion.new(new_resource.name) unless %i{export force_export}.include?(Array(new_resource.action).first) if current_revision = find_current_revision current_resource.revision current_revision end end end |
#revision_int ⇒ Object Also known as: revision_slug
If the specified revision isn't an integer ("HEAD" for example), look up the revision id by asking the server If the specified revision is an integer, trust it.
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/chef/provider/subversion.rb', line 123 def revision_int @revision_int ||= if /^\d+$/.match?(new_resource.revision) new_resource.revision else command = scm(:info, new_resource.repository, new_resource.svn_info_args, authentication, "-r#{new_resource.revision}") svn_info = shell_out!(command, **(cwd: cwd, returns: [0, 1])).stdout extract_revision_info(svn_info) end end |
#run_options(run_opts = {}) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/chef/provider/subversion.rb', line 149 def (run_opts = {}) env = {} if new_resource.user run_opts[:user] = new_resource.user env["HOME"] = get_homedir(new_resource.user) end run_opts[:group] = new_resource.group if new_resource.group run_opts[:timeout] = new_resource.timeout if new_resource.timeout env.merge!(new_resource.environment) if new_resource.environment run_opts[:environment] = env unless env.empty? run_opts end |
#sync_command ⇒ Object
98 99 100 101 102 |
# File 'lib/chef/provider/subversion.rb', line 98 def sync_command c = scm :update, new_resource.svn_arguments, verbose, authentication, proxy, "-r#{revision_int}", new_resource.destination logger.trace "#{new_resource} updated working copy #{new_resource.destination} to revision #{new_resource.revision}" c end |