diff options
-rwxr-xr-x | lib/puppet/provider/package/apt.rb | 29 | ||||
-rw-r--r-- | lib/puppet/type/package.rb | 9 | ||||
-rwxr-xr-x | test/ral/providers/package/apt.rb | 17 |
3 files changed, 31 insertions, 24 deletions
diff --git a/lib/puppet/provider/package/apt.rb b/lib/puppet/provider/package/apt.rb index 79a9e5f8e..cf69b4468 100755 --- a/lib/puppet/provider/package/apt.rb +++ b/lib/puppet/provider/package/apt.rb @@ -76,32 +76,13 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg do # What's the latest package version available? def latest - output = aptcache :showpkg, @model[:name] + output = aptcache :policy, @model[:name] - if output =~ /Versions:\s*\n((\n|.)+)^$/ - versions = $1 - available_versions = versions.split(/\n/).collect { |version| - if version =~ /^([^\(]+)\(/ - $1 - else - self.warning "Could not match version '%s'" % version - nil - end - }.reject { |vers| vers.nil? }.sort { |a,b| - versioncmp(a,b) - } - - if available_versions.length == 0 - self.debug "No latest version" - if Puppet[:debug] - print output - end - end - - # Get the latest and greatest version number - return available_versions.pop + if output =~ /\*\*\*\s+(\S+)\s/ + return $1 else - self.err "Could not match string" + self.err "Could not find latest version" + return nil end end diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb index 959520e1f..107acc20d 100644 --- a/lib/puppet/type/package.rb +++ b/lib/puppet/type/package.rb @@ -163,6 +163,15 @@ module Puppet def retrieve @is = @parent.retrieve end + + # Provide a bit more information when logging upgrades. + def should_to_s + if @latest + @latest.to_s + else + super + end + end end newparam(:name) do diff --git a/test/ral/providers/package/apt.rb b/test/ral/providers/package/apt.rb index 37a4736e5..c1bdcd1ca 100755 --- a/test/ral/providers/package/apt.rb +++ b/test/ral/providers/package/apt.rb @@ -69,4 +69,21 @@ class AptPackageProviderTest < PuppetTest::TestCase pkg.evaluate.each { |state| state.transaction = self; state.forward } end + + def test_latest + pkg = @type.create :name => 'ssh', :provider => :apt + + assert(pkg, "did not create pkg") + status = pkg.provider.query + assert(status, "ssh is not installed") + assert(status[:ensure] != :absent, "ssh is not installed") + + latest = nil + assert_nothing_raised("Could not call latest") do + latest = pkg.provider.latest + end + assert(latest, "Could not get latest value from apt") + end end + +# $Id$ |