24: def self.prefetch(packages)
25: raise Puppet::Error, "The aix provider can only be used by root" if Process.euid != 0
26:
27: return unless packages.detect { |name, package| package.should(:ensure) == :latest }
28:
29: sources = packages.collect { |name, package| package[:source] }.uniq
30:
31: updates = {}
32: sources.each do |source|
33: execute(self.srclistcmd(source)).each do |line|
34: if line =~ /^[^#][^:]*:([^:]*):([^:]*)/
35: current = {}
36: current[:name] = $1
37: current[:version] = $2
38: current[:source] = source
39:
40: if updates.key?(current[:name])
41: previous = updates[current[:name]]
42:
43: updates[ current[:name] ] = current unless Puppet::Util::Package.versioncmp(previous[:version], current[:version]) == 1
44:
45: else
46: updates[current[:name]] = current
47: end
48: end
49: end
50: end
51:
52: packages.each do |name, package|
53: if info = updates[package[:name]]
54: package.provider.latest_info = info[0]
55: end
56: end
57: end