28: def latest
29: cmd = ["-v", @resource[:name]]
30:
31: begin
32: output = portversion(*cmd)
33: rescue Puppet::ExecutionFailure
34: raise Puppet::Error.new(output)
35: end
36: line = output.split("\n").pop
37:
38: unless line =~ /^(\S+)\s+(\S)\s+(.+)$/
39:
40: return :latest
41: end
42:
43: pkgstuff = $1
44: match = $2
45: info = $3
46:
47: unless pkgstuff =~ /^(\S+)-([^-\s]+)$/
48: raise Puppet::Error,
49: "Could not match package info '#{pkgstuff}'"
50: end
51:
52: name, version = $1, $2
53:
54: if match == "=" or match == ">"
55:
56: return version
57: end
58:
59:
60:
61: unless info =~ /\((\w+) has (.+)\)/
62: raise Puppet::Error,
63: "Could not match version info '#{info}'"
64: end
65:
66: source, newversion = $1, $2
67:
68: debug "Newer version in #{source}"
69: newversion
70: end