@@ -28,22 +28,22 @@ class Portage < Chef::Provider::Package
2828 def load_current_resource
2929 @current_resource = Chef ::Resource ::Package . new ( @new_resource . name )
3030 @current_resource . package_name ( @new_resource . package_name )
31-
32- status = popen4 ( "emerge --color n --nospinner --search #{ @new_resource . package_name . split ( '/' ) . last } " ) do |pid , stdin , stdout , stderr |
33- available , installed = parse_emerge ( @new_resource . package_name , stdout . read )
34-
35- if installed == "[ Not Installed ]"
36- @current_resource . version ( nil )
37- else
38- @current_resource . version ( installed )
39- end
40- @candidate_version = available
41- end
4231
43- unless status . exitstatus == 0
44- raise Chef ::Exceptions ::Package , "emerge --search failed - #{ status . inspect } !"
32+ category = @new_resource . package_name . split ( '/' ) . first
33+ pkg = @new_resource . package_name . split ( '/' ) . last
34+
35+ @current_resource . version ( nil )
36+
37+ if ( ::File . exists? ( "/var/db/pkg/#{ category } " ) )
38+ Dir . entries ( "/var/db/pkg/#{ category } " ) . each do |entry |
39+ if ( entry =~ /^#{ pkg } -(.+)/ )
40+ @current_resource . version ( $1)
41+ Chef ::Log . debug ( "Got current version #{ $1} " )
42+ break
43+ end
44+ end
4545 end
46-
46+
4747 @current_resource
4848 end
4949
@@ -65,6 +65,22 @@ def parse_emerge(package, txt)
6565 available = installed unless available
6666 [ available , installed ]
6767 end
68+
69+ def candidate_version
70+ return @candidate_version if @candidate_version
71+
72+ status = popen4 ( "emerge --color n --nospinner --search #{ @new_resource . package_name . split ( '/' ) . last } " ) do |pid , stdin , stdout , stderr |
73+ available , installed = parse_emerge ( @new_resource . package_name , stdout . read )
74+ @candidate_version = available
75+ end
76+
77+ unless status . exitstatus == 0
78+ raise Chef ::Exceptions ::Package , "emerge --search failed - #{ status . inspect } !"
79+ end
80+
81+ @candidate_version
82+
83+ end
6884
6985
7086 def install_package ( name , version )
0 commit comments