[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. puppet-0.24.5-rc3-1601-gf8c1b08

James Turnbull james at lovedthanlost.net
Fri Jan 15 09:07:20 UTC 2010


The following commit has been merged in the upstream branch:
commit 48beabadb6f234e6486cf32eebc389e8faba13f0
Author: Benedikt Böhm <bb at xnull.de>
Date:   Tue Nov 10 10:25:55 2009 +0100

    simplify and fix portage provider
    
    * use easily parsable format string (fixes #1872)
    * only query stable packages, anything else cannot be installed anyway
    * fix withenv usage in class method self.instances
    * code cleanup & consistency

diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb
index e920580..2a8654c 100644
--- a/lib/puppet/provider/package/portage.rb
+++ b/lib/puppet/provider/package/portage.rb
@@ -1,7 +1,6 @@
 require 'puppet/provider/package'
 
 Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Package do
-    include Puppet::Util::Execution
     desc "Provides packaging support for Gentoo's portage system."
 
     has_feature :versionable
@@ -13,33 +12,32 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
     defaultfor :operatingsystem => :gentoo
 
     def self.instances
-        result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
-        result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
+        result_format = /(\S+) (\S+) \[(\S+)\] \[(\S+)\] (\S+) (.*)/
+        result_fields = [:category, :name, :ensure, :version_available, :vendor, :description]
 
-        version_format = "<version>{!last} {}"
-        search_format = "<category> <name> [<installedversions:SPLITVERSIONS>] [<bestversion:SPLITVERSIONS>] <homepage> <description>"
+        version_format = "{last}<version>{}"
+        search_format = "<category> <name> [<installedversions:LASTVERSION>] [<bestversion:LASTVERSION>] <homepage> <description>\n"
 
         begin
             if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
                 update_eix
             end
+
             search_output = nil
-            withenv :SPLITVERSIONS => version_format do
-                search_output = eix "--nocolor", "--pure-packages", "--installed", "--format", search_format
+            Puppet::Util::Execution.withenv :LASTVERSION => version_format do
+                search_output = eix "--nocolor", "--pure-packages", "--stable", "--installed", "--format", search_format
             end
 
             packages = []
             search_output.each do |search_result|
-                match = result_format.match( search_result )
+                match = result_format.match(search_result)
 
                 if match
                     package = {}
-                    result_fields.zip(match.captures) { |field, value|
+                    result_fields.zip(match.captures) do |field, value|
                         package[field] = value unless !value or value.empty?
-                    }
+                    end
                     package[:provider] = :portage
-                    package[:ensure] = package[:ensure].split.last
-
                     packages << new(package)
                 end
             end
@@ -74,36 +72,35 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
     end
 
     def query
-        result_format = /(\S+) (\S+) \[(?:([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\([^\)]+\))?(?:\[([^\]]+)\])?[ ]*)*\] \[(?:(?:\{M\})?(?:\([~*]+\))?([0-9.a-zA-Z]+(?:_(?:alpha|beta|pre|rc|p)[0-9]*)*(?:-r[0-9]*)?)(?:\(([^\)]+)\))?(?:![mf])*(?:\[([^\]]+)\])?)?\] ([\S]*) (.*)/
-        result_fields = [:category, :name, :ensure, :ensure_overlay, :version_available, :slot, :overlay, :vendor, :description]
+        result_format = /(\S+) (\S+) \[(\S+)\] \[(\S+)\] (\S+) (.*)/
+        result_fields = [:category, :name, :ensure, :version_available, :vendor, :description]
+
+        version_format = "{last}<version>{}"
+        search_format = "<category> <name> [<installedversions:LASTVERSION>] [<bestversion:LASTVERSION>] <homepage> <description>\n"
 
         search_field = package_name.count('/') > 0 ? "--category-name" : "--name"
         search_value = package_name
 
-        version_format = "<version>{!last} {}"
-        search_format = "<category> <name> [<installedversions:FORMAT_PVERSION>] [<bestversion:FORMAT_PVERSION>] <homepage> <description>"
-
         begin
             if !FileUtils.uptodate?("/var/cache/eix", %w(/usr/bin/eix /usr/portage/metadata/timestamp))
                 update_eix
             end
+
             search_output = nil
-            withenv :SPLITVERSIONS => version_format do
-                search_output = eix "--nocolor", "--pure-packages", "--format", search_format, "--exact", search_field, search_value
+            Puppet::Util::Execution.withenv :LASTVERSION => version_format do
+                search_output = eix "--nocolor", "--pure-packages", "--stable", "--format", search_format, "--exact", search_field, search_value
             end
 
             packages = []
             search_output.each do |search_result|
-                match = result_format.match( search_result )
+                match = result_format.match(search_result)
 
-                if( match )
+                if match
                     package = {}
-                    result_fields.zip( match.captures ) { |field, value| package[field] = value unless !value or value.empty? }
-                    if package[:ensure]
-                        package[:ensure] = package[:ensure].split.last
-                    else
-                        package[:ensure] = :absent
+                    result_fields.zip(match.captures) do |field, value|
+                        package[field] = value unless !value or value.empty?
                     end
+                    package[:ensure] = package[:ensure] ? package[:ensure] : :absent
                     packages << package
                 end
             end
@@ -126,4 +123,3 @@ Puppet::Type.type(:package).provide :portage, :parent => Puppet::Provider::Packa
         return self.query[:version_available]
     end
 end
-

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list