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, #current_resource, #logger, #new_resource, #recipe_name, #run_context
Instance Method Summary collapse
- #action_checkout ⇒ Object
- #action_export ⇒ Object
- #action_force_export ⇒ Object
- #action_sync ⇒ Object
- #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_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, #node, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use_inline_resources, #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::ShellOut
apply_default_env, maybe_add_timeout, #shell_out, #shell_out!
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 Mixin::PowershellExec
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::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 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
Constructor Details
This class inherits a constructor from Chef::Provider
Instance Method Details
#action_checkout ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/chef/provider/subversion.rb', line 58 def action_checkout if target_dir_non_existent_or_empty? converge_by("perform checkout of #{new_resource.repository} into #{new_resource.destination}") do shell_out!(checkout_command, ) end else logger.trace "#{new_resource} checkout destination #{new_resource.destination} already exists or is a non-empty directory - nothing to do" end end |
#action_export ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/chef/provider/subversion.rb', line 68 def action_export if target_dir_non_existent_or_empty? action_force_export else logger.trace "#{new_resource} export destination #{new_resource.destination} already exists or is a non-empty directory - nothing to do" end end |
#action_force_export ⇒ Object
76 77 78 79 80 |
# File 'lib/chef/provider/subversion.rb', line 76 def action_force_export converge_by("export #{new_resource.repository} into #{new_resource.destination}") do shell_out!(export_command, ) end end |
#action_sync ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/chef/provider/subversion.rb', line 82 def action_sync assert_target_directory_valid! if ::File.exist?(::File.join(new_resource.destination, ".svn")) current_rev = find_current_revision logger.trace "#{new_resource} current revision: #{current_rev} target revision: #{revision_int}" unless current_revision_matches_target_revision? converge_by("sync #{new_resource.destination} from #{new_resource.repository}") do shell_out!(sync_command, ) logger.info "#{new_resource} updated to revision: #{revision_int}" end end else action_checkout end end |
#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
147 148 149 |
# File 'lib/chef/provider/subversion.rb', line 147 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 { ::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
138 139 140 141 142 143 144 145 |
# File 'lib/chef/provider/subversion.rb', line 138 def find_current_revision return nil unless ::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 133 134 |
# File 'lib/chef/provider/subversion.rb', line 123 def revision_int @revision_int ||= begin if new_resource.revision =~ /^\d+$/ 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 end |
#run_options(run_opts = {}) ⇒ Object
151 152 153 154 155 156 |
# File 'lib/chef/provider/subversion.rb', line 151 def (run_opts = {}) run_opts[:user] = new_resource.user if new_resource.user run_opts[:group] = new_resource.group if new_resource.group run_opts[:timeout] = new_resource.timeout if new_resource.timeout 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 |