Pistos-emerge-gem 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/emerge-gem.rb +38 -15
  2. metadata +1 -1
data/lib/emerge-gem.rb CHANGED
@@ -18,7 +18,7 @@ class EmergeGem
18
18
  @gems = []
19
19
  @emerge_options = []
20
20
  portage_base_dir = '/usr/local/portage'
21
- portage_path = 'dev-ruby'
21
+ @portage_path = 'dev-ruby'
22
22
 
23
23
  collecting_emerge_options = false
24
24
  while argv.any?
@@ -33,7 +33,7 @@ class EmergeGem
33
33
  when '--portage-base-dir'
34
34
  portage_base_dir = arg
35
35
  when '--portage-path'
36
- portage_path = arg
36
+ @portage_path = arg
37
37
  when '-v', '--verbose'
38
38
  @verbose = true
39
39
  puts "(verbose mode)"
@@ -50,7 +50,7 @@ class EmergeGem
50
50
  print_usage_and_exit
51
51
  end
52
52
 
53
- @ebuild_dest ||= "#{portage_base_dir}/#{portage_path}"
53
+ @ebuild_dest ||= "#{portage_base_dir}/#{@portage_path}"
54
54
 
55
55
  @eix_installed = system( 'which eix > /dev/null' )
56
56
  if @eix_installed
@@ -67,27 +67,50 @@ class EmergeGem
67
67
  end
68
68
 
69
69
  def check_local_gems
70
+ return if ! @eix_installed
70
71
  @gems.each do |gem|
71
72
  inform "Checking installation of #{gem}"
72
- next if ! EmergeGem.gem_installed?( gem ) || ! @eix_installed
73
+ gem_versions = EmergeGem.gem_versions_installed( gem )
74
+ next if gem_versions.empty?
73
75
  inform "#{gem} gem installed"
74
76
 
75
- next if EmergeGem.package_installed? gem
76
- inform "#{gem} package not installed with Portage"
77
-
78
- puts "#{gem} seems to be installed via gem and not Portage."
79
- puts "Uninstall the #{gem} gem before emerging? [y/n]"
80
- answer = $stdin.gets.strip
81
- if answer =~ /^y/i
82
- shell "gem uninstall #{gem}"
77
+ package_version = EmergeGem.portage_version_installed( gem )
78
+ if package_version
79
+ next if gem_versions.include?( package_version )
80
+
81
+ puts "Portage version of #{gem} is #{package_version} but Rubygems reports version(s):"
82
+ puts gem_versions.join( ', ' )
83
+ puts "Sync Rubygem installation with Portage's version? [y/n]"
84
+ answer = $stdin.gets.strip
85
+ if answer =~ /^y/i
86
+ shell "gem uninstall -a -x -I #{gem}"
87
+ shell "gem install -v #{package_version} #{gem}"
88
+ else
89
+ puts "(retaining differing gem installation of #{gem})"
90
+ end
83
91
  else
84
- puts "(not uninstalling #{gem} gem)"
92
+ puts "#{gem} seems to be installed via gem and not Portage."
93
+ puts "Uninstall the #{gem} gem before emerging? [y/n]"
94
+ answer = $stdin.gets.strip
95
+ if answer =~ /^y/i
96
+ shell "gem uninstall #{gem}"
97
+ else
98
+ puts "(not uninstalling #{gem} gem)"
99
+ end
85
100
  end
86
101
  end
87
102
  end
88
103
 
104
+ def self.gem_versions_installed( gem_name )
105
+ Gem.source_index.find_name( gem_name ).map { |gem| gem.version.to_s }
106
+ end
107
+
89
108
  def self.gem_installed?( gem_name )
90
- system "gem list -l #{gem_name} | egrep '^#{gem_name} ' > /dev/null"
109
+ gem_versions_installed( gem_name ).any?
110
+ end
111
+
112
+ def self.portage_version_installed( gem_name )
113
+ `eix -Ien* --format '<installedversionsshort>' #{gem_name}`[ /([0-9.]+)/, 1 ]
91
114
  end
92
115
 
93
116
  def self.package_installed?( package_name )
@@ -128,7 +151,7 @@ class EmergeGem
128
151
  end
129
152
 
130
153
  def emerge
131
- ebuild_names = @ebuilds.values.map { |e| e.name }.join( ' ' )
154
+ ebuild_names = @ebuilds.values.map { |e| "#{@portage_path}/#{e.name}" }.join( ' ' )
132
155
  command = "emerge #{@emerge_options.join( ' ' )} #{ebuild_names}"
133
156
  if @no_emerge
134
157
  puts "(would execute: #{command})"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Pistos-emerge-gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pistos