summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlib/puppet/provider/package/apt.rb29
-rw-r--r--lib/puppet/type/package.rb9
-rwxr-xr-xtest/ral/providers/package/apt.rb17
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$