Class: Chef::Provider::Subversion
- Inherits:
-
Chef::Provider
- Object
- Chef::Provider
- Chef::Provider::Subversion
- Includes:
- Mixin::Command, ChefConfig::Mixin::FuzzyHostnameMatcher
- Defined in:
- lib/chef/provider/subversion.rb
Constant Summary collapse
- SVN_INFO_PATTERN =
/^([\w\s]+): (.+)$/
Constants included from Mixin::ShellOut
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary
Attributes inherited from Chef::Provider
#action, #cookbook_name, #current_resource, #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
- #whyrun_supported? ⇒ Boolean
Methods included from Mixin::Command
#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_and_return_stdout_stderr, #run_command_with_systems_locale
Methods included from Mixin::Command::Windows
Methods included from Mixin::Command::Unix
Methods inherited from Chef::Provider
#action_nothing, #check_resource_semantics!, #cleanup_after_converge, #converge_by, #converge_if_changed, #events, include_resource_dsl, include_resource_dsl_module, #initialize, #node, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use_inline_resources, #whyrun_mode?
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 DeprecatedLWRPClass
#const_missing, #deprecated_constants, #register_deprecated_lwrp_class
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
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!, #with_run_context
Methods included from Mixin::ShellOut
#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
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::PlatformIntrospection
#docker?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Constructor Details
This class inherits a constructor from Chef::Provider
Instance Method Details
#action_checkout ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/chef/provider/subversion.rb', line 64 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 Chef::Log.debug "#{@new_resource} checkout destination #{@new_resource.destination} already exists or is a non-empty directory - nothing to do" end end |
#action_export ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/chef/provider/subversion.rb', line 74 def action_export if target_dir_non_existent_or_empty? action_force_export else Chef::Log.debug "#{@new_resource} export destination #{@new_resource.destination} already exists or is a non-empty directory - nothing to do" end end |
#action_force_export ⇒ Object
82 83 84 85 86 |
# File 'lib/chef/provider/subversion.rb', line 82 def action_force_export converge_by("export #{@new_resource.repository} into #{@new_resource.destination}") do shell_out!(export_command, ) end end |
#action_sync ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/chef/provider/subversion.rb', line 88 def action_sync assert_target_directory_valid! if ::File.exist?(::File.join(@new_resource.destination, ".svn")) current_rev = find_current_revision Chef::Log.debug "#{@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, ) Chef::Log.info "#{@new_resource} updated to revision: #{revision_int}" end end else action_checkout end end |
#checkout_command ⇒ Object
110 111 112 113 114 115 |
# File 'lib/chef/provider/subversion.rb', line 110 def checkout_command c = scm :checkout, @new_resource.svn_arguments, verbose, authentication, proxy, "-r#{revision_int}", @new_resource.repository, @new_resource.destination Chef::Log.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
152 153 154 |
# File 'lib/chef/provider/subversion.rb', line 152 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
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/chef/provider/subversion.rb', line 52 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
117 118 119 120 121 122 123 124 |
# File 'lib/chef/provider/subversion.rb', line 117 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 Chef::Log.info "#{@new_resource} exported #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}" c end |
#find_current_revision ⇒ Object
144 145 146 147 148 149 150 |
# File 'lib/chef/provider/subversion.rb', line 144 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
42 43 44 45 46 47 48 49 50 |
# File 'lib/chef/provider/subversion.rb', line 42 def load_current_resource @current_resource = Chef::Resource::Subversion.new(@new_resource.name) unless [: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.
129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/chef/provider/subversion.rb', line 129 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
156 157 158 159 160 161 |
# File 'lib/chef/provider/subversion.rb', line 156 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
104 105 106 107 108 |
# File 'lib/chef/provider/subversion.rb', line 104 def sync_command c = scm :update, @new_resource.svn_arguments, verbose, authentication, proxy, "-r#{revision_int}", @new_resource.destination Chef::Log.debug "#{@new_resource} updated working copy #{@new_resource.destination} to revision #{@new_resource.revision}" c end |
#whyrun_supported? ⇒ Boolean
38 39 40 |
# File 'lib/chef/provider/subversion.rb', line 38 def whyrun_supported? true end |