class Simp::Build::ReleaseMapper
Attributes
do_checksums[RW]
verbose[RW]
Public Class Methods
new( target_release, mappings_file, do_checksums = false )
click to toggle source
# File lib/simp/build/release_mapper.rb, line 8 def initialize( target_release, mappings_file, do_checksums = false ) @target_release = target_release @mappings_file = mappings_file @release_mappings = YAML.load_file( mappings_file ) @target_data = get_release_mappings_for_target( @target_release, @release_mappings ) @do_checksums = do_checksums @verbose = false end
Public Instance Methods
autoscan_unpack_list( paths_string )
click to toggle source
# File lib/simp/build/release_mapper.rb, line 105 def autoscan_unpack_list( paths_string ) iso_paths = sanitize_iso_list( paths_string ) if iso_paths.empty? raise SIMPBuildException, 'ERROR: No suitable ISOs found for target release ' + "'#{@target_release}' in '#{paths_string}'.\n\n" + "## Recognized SIMP ISOs for '#{@target_release}:\n\n" + @target_data.fetch('flavors') .map{|flavor,data| " ### #{flavor}\n\n" + data['isos'].map{|x| " - #{x['name']}"}.join("\n") + "\n\n" }.join + "\n\n" end unpack_files = get_flavor( iso_paths ) if unpack_files.nil? max_iso_name_size = [@target_data['flavors'].map{|k,v| v['isos']}].flatten.map{|x| x['name'].size}.max raise SIMPBuildException, "ERROR: No flavors for target release '#{@target_release}' found in '#{paths_string}'.\n\n" + "## Recognized SIMP ISOs for '#{@target_release}:\n\n" + @target_data.fetch('flavors') .map{|flavor,data| " ### #{flavor}\n\n" + data['isos'].map{|x| " - #{x['name'].ljust(max_iso_name_size)}\n" + " - size: #{x['size']}\n" + " - checksum: #{x['checksum']}"}.join("\n") + "\n\n" }.join + "\n\n" end unpack_files end
get_flavor( isos )
click to toggle source
Given a list of isos: see if any match the complete set of ISOs for one of the target_release's flavors. the target release. If it matches, return a Hash containing the flavor and the matched ISOs. If they didn't match any known distros, return nil
Some of the `isos` lists might be superfluous
# File lib/simp/build/release_mapper.rb, line 64 def get_flavor( isos ) iso_sizes = Hash[isos.map{|iso| [iso,File.size(iso)]}.sort] result = false result_isos = [] @target_data['flavors'].each do |flavor,data| sizes = data['isos'].map{|x| x['size']}.sort next unless sizes.uniq == sizes & iso_sizes.values matched_isos = iso_sizes.select{|k,v| sizes.include?(v) }.keys result_isos = matched_isos if @do_checksums || (sizes.uniq.size != sizes.size) result_isos = [] checksums = data['isos'].map{|x| x['checksum']} iso_checksums = Hash[matched_isos.map do |iso| puts "=== getting checksum of '#{iso}'" if @verbose sum = `sha256sum "#{iso}"`.split(/ +/).first [iso,sum] end] matched_isos = iso_checksums.select{|k,v| checksums.include?(v) } if ( matched_isos.values.map{|sum| checksums.include? sum } .all?{|x| x.class == TrueClass } ) && ( matched_isos.values.uniq.size == checksums.uniq.size ) result = flavor result_isos = matched_isos.keys.dup break end end result = flavor break end if result @target_data['flavors'][result] .merge({'flavor' => result}) .merge({'isos' =>result_isos}) else nil end end
get_release_mappings_for_target( target_release, release_mappings )
click to toggle source
# File lib/simp/build/release_mapper.rb, line 18 def get_release_mappings_for_target( target_release, release_mappings ) unless target_data = release_mappings .fetch('simp_releases') .fetch( target_release, false ) raise SIMPBuildException, "'#{target_release}' is not a recognized SIMP release." + "\n\n## Recognized SIMP releases:\n" + release_mappings.fetch('simp_releases') .keys .map{|x| " - #{x}\n"} .join + "\n\n" end target_data end
sanitize_iso_list( paths_string )
click to toggle source
given a path string of files or directories, return a list of .iso files
- if all paths are bad, the result is an empty arrays - directories are scanned for .iso files
# File lib/simp/build/release_mapper.rb, line 38 def sanitize_iso_list( paths_string ) paths_string.split(':') .map do |path| if File.exists?( path ) if File.directory? path Dir[File.join(path, '*.iso')] elsif File.file? path path else [] end else [] end end .flatten .sort .uniq end