Class: EmergeGem
- Inherits:
-
Object
- Object
- EmergeGem
- Defined in:
- lib/emerge-gem.rb
Class Method Summary collapse
- .gem_installed?(gem_name) ⇒ Boolean
- .gem_versions_installed(gem_name) ⇒ Object
- .package_installed?(package_name) ⇒ Boolean
- .portage_version_installed(gem_name) ⇒ Object
Instance Method Summary collapse
- #check_local_gems ⇒ Object
- #digest_ebuilds ⇒ Object
- #emerge ⇒ Object
- #gather_ebuilds ⇒ Object
- #inform(message) ⇒ Object
-
#initialize(argv) ⇒ EmergeGem
constructor
A new instance of EmergeGem.
- #print_usage_and_exit ⇒ Object
- #run ⇒ Object
- #shell(command) ⇒ Object
- #write_ebuilds ⇒ Object
Constructor Details
#initialize(argv) ⇒ EmergeGem
Returns a new instance of EmergeGem.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/emerge-gem.rb', line 17 def initialize( argv ) @gems = [] @emerge_options = [] portage_base_dir = '/usr/local/portage' @portage_path = 'dev-ruby' = false while argv.any? arg = argv.shift case arg when '--' = true when '-h', '--help' print_usage_and_exit when '--no-emerge' @no_emerge = true when '--portage-base-dir' portage_base_dir = arg when '--portage-path' @portage_path = arg when '-v', '--verbose' @verbose = true puts "(verbose mode)" else if @emerge_options << arg else @gems << arg end end end if @gems.empty? print_usage_and_exit end @ebuild_dest ||= "#{portage_base_dir}/#{@portage_path}" @eix_installed = system( 'which eix > /dev/null' ) if @eix_installed inform "eix detected" end end |
Class Method Details
.gem_installed?(gem_name) ⇒ Boolean
108 109 110 |
# File 'lib/emerge-gem.rb', line 108 def self.gem_installed?( gem_name ) gem_versions_installed( gem_name ).any? end |
.gem_versions_installed(gem_name) ⇒ Object
104 105 106 |
# File 'lib/emerge-gem.rb', line 104 def self.gem_versions_installed( gem_name ) Gem.source_index.find_name( gem_name ).map { |gem| gem.version.to_s } end |
.package_installed?(package_name) ⇒ Boolean
116 117 118 |
# File 'lib/emerge-gem.rb', line 116 def self.package_installed?( package_name ) system "eix -Ie --only-names #{package_name} | egrep '#{package_name}$' > /dev/null" end |
.portage_version_installed(gem_name) ⇒ Object
112 113 114 |
# File 'lib/emerge-gem.rb', line 112 def self.portage_version_installed( gem_name ) `eix -Ien* --format '<installedversionsshort>' #{gem_name}`[ /([0-9.]+)/, 1 ] end |
Instance Method Details
#check_local_gems ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/emerge-gem.rb', line 69 def check_local_gems return if ! @eix_installed @gems.each do |gem| inform "Checking installation of #{gem}" gem_versions = EmergeGem.gem_versions_installed( gem ) next if gem_versions.empty? inform "#{gem} gem installed" package_version = EmergeGem.portage_version_installed( gem ) if package_version next if gem_versions.include?( package_version ) puts "Portage version of #{gem} is #{package_version} but Rubygems reports version(s):" puts gem_versions.join( ', ' ) puts "Sync Rubygem installation with Portage's version? [y/n]" answer = $stdin.gets.strip if answer =~ /^y/i shell "gem uninstall -a -x -I #{gem}" shell "gem install -v #{package_version} #{gem}" else puts "(retaining differing gem installation of #{gem})" end else puts "#{gem} seems to be installed via gem and not Portage." puts "Uninstall the #{gem} gem before emerging? [y/n]" answer = $stdin.gets.strip if answer =~ /^y/i shell "gem uninstall #{gem}" else puts "(not uninstalling #{gem} gem)" end end end end |
#digest_ebuilds ⇒ Object
147 148 149 150 151 |
# File 'lib/emerge-gem.rb', line 147 def digest_ebuilds @ebuilds.each do |name, ebuild| shell "ebuild #{ebuild.local_path} digest" end end |
#emerge ⇒ Object
153 154 155 156 157 158 159 160 161 |
# File 'lib/emerge-gem.rb', line 153 def emerge ebuild_names = @ebuilds.values.map { |e| "#{@portage_path}/#{e.name}" }.join( ' ' ) command = "emerge #{@emerge_options.join( ' ' )} #{ebuild_names}" if @no_emerge puts "(would execute: #{command})" else shell command end end |
#gather_ebuilds ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/emerge-gem.rb', line 120 def gather_ebuilds @ebuilds = {} gems = @gems.dup while gems.any? next_package = gems.shift if ! @ebuilds[ next_package ] inform "Gathering info about #{next_package} gem..." @ebuilds[ next_package ] = Ebuild.create_from_spec_lookup( next_package ) end @ebuilds[ next_package ].spec.dependencies.each do |dependency| next if @ebuilds[ dependency.name ] inform " Looking up dependency #{dependency.name}" gems.push dependency.name @gems.push dependency.name end end end |
#inform(message) ⇒ Object
169 170 171 172 |
# File 'lib/emerge-gem.rb', line 169 def inform( ) return if ! @verbose puts end |
#print_usage_and_exit ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'lib/emerge-gem.rb', line 7 def print_usage_and_exit puts "#{$0} [options] <gem name> [gem name...] [-- <emerge options>]" puts " -h --help show usage" puts " --no-emerge don't actually execute any emerge commands" puts " --portage-base-dir (default /usr/local/portage)" puts " --portage-path relative to portage base dir (default dev-ruby)" puts " --verbose print more details about work being done" exit 1 end |
#run ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/emerge-gem.rb', line 61 def run gather_ebuilds check_local_gems write_ebuilds digest_ebuilds emerge end |
#shell(command) ⇒ Object
163 164 165 166 167 |
# File 'lib/emerge-gem.rb', line 163 def shell( command ) puts "\033[1m#{command}\033[0m" system( command ) or exit $? end |
#write_ebuilds ⇒ Object
140 141 142 143 144 145 |
# File 'lib/emerge-gem.rb', line 140 def write_ebuilds @ebuilds.each do |name, ebuild| inform "Writing out #{ebuild.filename}" ebuild.write @ebuild_dest end end |