Class: Chef::Provider::Subversion
Constant Summary
collapse
- SVN_INFO_PATTERN =
/^([\w\s]+): (.+)$/
Mixin::ShellOut::DEPRECATED_OPTIONS
Instance Attribute Summary
#action, #cookbook_name, #current_resource, #new_resource, #recipe_name, #run_context
Instance Method Summary
collapse
#chdir_or_tmpdir, #handle_command_failures, #output_of_command, #run_command, #run_command_and_return_stdout_stderr, #run_command_with_systems_locale
#popen4
#popen4
#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?
#provided_as, #provides, #provides?
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
#const_missing, #register_deprecated_lwrp_class
#powershell_out, #powershell_out!
#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
#run_command_compatible_options, #shell_out, #shell_out!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
Constructor Details
This class inherits a constructor from Chef::Provider
Instance Method Details
#action_checkout ⇒ Object
62
63
64
65
66
67
68
69
70
|
# File 'lib/chef/provider/subversion.rb', line 62
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, run_options)
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
72
73
74
75
76
77
78
|
# File 'lib/chef/provider/subversion.rb', line 72
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
80
81
82
83
84
|
# File 'lib/chef/provider/subversion.rb', line 80
def action_force_export
converge_by("export #{@new_resource.repository} into #{@new_resource.destination}") do
shell_out!(export_command, run_options)
end
end
|
#action_sync ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/chef/provider/subversion.rb', line 86
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, run_options)
Chef::Log.info "#{@new_resource} updated to revision: #{revision_int}"
end
end
else
action_checkout
end
end
|
#checkout_command ⇒ Object
108
109
110
111
112
113
|
# File 'lib/chef/provider/subversion.rb', line 108
def checkout_command
c = scm :checkout, @new_resource.svn_arguments, verbose, authentication,
"-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
150
151
152
|
# File 'lib/chef/provider/subversion.rb', line 150
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
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/chef/provider/subversion.rb', line 50
def define_resource_requirements
requirements.assert(:all_actions) do |a|
parent_directory = ::File.dirname(@new_resource.destination)
a.assertion { ::File.directory?(parent_directory) }
a.failure_message(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
115
116
117
118
119
120
121
122
|
# File 'lib/chef/provider/subversion.rb', line 115
def export_command
args = ["--force"]
args << @new_resource.svn_arguments << verbose << authentication <<
"-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
142
143
144
145
146
147
148
|
# File 'lib/chef/provider/subversion.rb', line 142
def find_current_revision
return nil unless ::File.exist?(::File.join(@new_resource.destination, ".svn"))
command = scm(:info)
svn_info = shell_out!(command, run_options(:cwd => cwd, :returns => [0, 1])).stdout
(svn_info)
end
|
#load_current_resource ⇒ Object
40
41
42
43
44
45
46
47
48
|
# File 'lib/chef/provider/subversion.rb', line 40
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.
127
128
129
130
131
132
133
134
135
136
137
138
|
# File 'lib/chef/provider/subversion.rb', line 127
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, run_options(:cwd => cwd, :returns => [0, 1])).stdout
(svn_info)
end
end
end
|
#run_options(run_opts = {}) ⇒ Object
154
155
156
157
158
159
|
# File 'lib/chef/provider/subversion.rb', line 154
def run_options(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
102
103
104
105
106
|
# File 'lib/chef/provider/subversion.rb', line 102
def sync_command
c = scm :update, @new_resource.svn_arguments, verbose, authentication, "-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
36
37
38
|
# File 'lib/chef/provider/subversion.rb', line 36
def whyrun_supported?
true
end
|