# class Chef::Provider::Package::Macports

### Public Instance Methods

current_installed_version() click to toggle source

    # File lib/chef/provider/package/macports.rb, line 23
    def current_installed_version
      command = "port installed #{@new_resource.package_name}"
      output = get_response_from_command(command)

      response = nil
      output.each_line do |line|
        match = line.match(/^.+ @([^\s]+) \(active\)$/)
        response = match[1] if match
      end
      response
    end

install_package(name, version) click to toggle source

    # File lib/chef/provider/package/macports.rb, line 44
    def install_package(name, version)
      unless @current_resource.version == version
        command = "port#{expand_options(@new_resource.options)} install #{name}"
        command << " @#{version}" if version and !version.empty?
        run_command_with_systems_locale(
          :command => command
        )
      end
    end

load_current_resource() click to toggle source

    # File lib/chef/provider/package/macports.rb, line 5
    def load_current_resource
      @current_resource = Chef::Resource::Package.new(@new_resource.name)
      @current_resource.package_name(@new_resource.package_name)

      @current_resource.version(current_installed_version)
      Chef::Log.debug("#{@new_resource} current version is #{@current_resource.version}") if @current_resource.version

      @candidate_version = macports_candidate_version

      if !@new_resource.version and !@candidate_version
        raise Chef::Exceptions::Package, "Could not get a candidate version for this package -- #{@new_resource.name} does not seem to be a valid package!"
      end

      Chef::Log.debug("#{@new_resource} candidate version is #{@candidate_version}") if @candidate_version

      @current_resource
    end

macports_candidate_version() click to toggle source

    # File lib/chef/provider/package/macports.rb, line 35
    def macports_candidate_version
      command = "port info --version #{@new_resource.package_name}"
      output = get_response_from_command(command)

      match = output.match(/^version: (.+)$/)

      match ? match[1] : nil
    end

purge_package(name, version) click to toggle source

    # File lib/chef/provider/package/macports.rb, line 54
    def purge_package(name, version)
      command = "port#{expand_options(@new_resource.options)} uninstall #{name}"
      command << " @#{version}" if version and !version.empty?
      run_command_with_systems_locale(
        :command => command
      )
    end

remove_package(name, version) click to toggle source

    # File lib/chef/provider/package/macports.rb, line 62
    def remove_package(name, version)
      command = "port#{expand_options(@new_resource.options)} deactivate #{name}"
      command << " @#{version}" if version and !version.empty?

      run_command_with_systems_locale(
        :command => command
      )
    end

upgrade_package(name, version) click to toggle source

    # File lib/chef/provider/package/macports.rb, line 71
    def upgrade_package(name, version)
      # Saving this to a variable -- weird rSpec behavior
      # happens otherwise...
      current_version = @current_resource.version

      if current_version.nil? or current_version.empty?
        # Macports doesn't like when you upgrade a package
        # that hasn't been installed.
        install_package(name, version)
      elsif current_version != version
        run_command_with_systems_locale(
          :command => "port#{expand_options(@new_resource.options)} upgrade #{name} @#{version}"
        )
      end
    end