# class Chef::Provider::Subversion

### Constants

SVN_INFO_PATTERN

### Public Instance Methods

action_checkout() click to toggle source

    # File lib/chef/provider/subversion.rb, line 61
    def action_checkout
      if target_dir_non_existent_or_empty?
        converge_by("perform checkout of #{@new_resource.repository} into #{@new_resource.destination}") do
          run_command(run_options(:command => 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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 71
    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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 79
    def action_force_export
      converge_by("export #{@new_resource.repository} into #{@new_resource.destination}") do
        run_command(run_options(:command => export_command))
      end
    end

action_sync() click to toggle source

    # File lib/chef/provider/subversion.rb, line 85
    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
            run_command(run_options(:command => sync_command))
            Chef::Log.info "#{@new_resource} updated to revision: #{revision_int}"
          end
        end
      else
        action_checkout
      end
    end

checkout_command() click to toggle source

    # File lib/chef/provider/subversion.rb, line 107
    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?() click to toggle source

    # 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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 49
    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.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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 114
    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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 141
    def find_current_revision
      return nil unless ::File.exist?(::File.join(@new_resource.destination, ".svn"))
      command = scm(:info)
      status, svn_info, error_message = output_of_command(command, run_options(:cwd => cwd))

      unless [0,1].include?(status.exitstatus)
        handle_command_failures(status, "STDOUT: #{svn_info}\nSTDERR: #{error_message}")
      end
      extract_revision_info(svn_info)
    end

load_current_resource() click to toggle source

    # File lib/chef/provider/subversion.rb, line 39
    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() click to toggle source

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.

    # File lib/chef/provider/subversion.rb, line 126
    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}")
          status, svn_info, error_message = output_of_command(command, run_options)
          handle_command_failures(status, "STDOUT: #{svn_info}\nSTDERR: #{error_message}")
          extract_revision_info(svn_info)
        end
      end
    end

Also aliased as: revision_slug
revision_slug()
Alias for: revision_int
run_options(run_opts={}) click to toggle source

    # File lib/chef/provider/subversion.rb, line 156
    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() click to toggle source

    # File lib/chef/provider/subversion.rb, line 101
    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?() click to toggle source

    # File lib/chef/provider/subversion.rb, line 35
    def whyrun_supported?
      true
    end