|
|
|
@ -108,8 +108,18 @@ module LinuxUpdate
|
|
|
|
|
|
|
|
|
|
class Fetched
|
|
|
|
|
attr_reader :dir
|
|
|
|
|
def initialize dir
|
|
|
|
|
@dir = Pathname.new dir
|
|
|
|
|
def initialize( dir) @dir = Pathname.new dir end
|
|
|
|
|
def config() dir + '.config' end
|
|
|
|
|
def <=>( other) version <=> other.version end
|
|
|
|
|
def info( text) STDERR.puts "[#{version}] #{text}" end
|
|
|
|
|
|
|
|
|
|
def linux_sources?
|
|
|
|
|
begin
|
|
|
|
|
version
|
|
|
|
|
true
|
|
|
|
|
rescue Base::MakeFailed
|
|
|
|
|
false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def make *opts, &block
|
|
|
|
@ -138,17 +148,11 @@ module LinuxUpdate
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def config
|
|
|
|
|
dir + '.config'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def configured?
|
|
|
|
|
return @configured if @configured
|
|
|
|
|
@configured = config.exist?
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def <=>( other) version <=> other.version end
|
|
|
|
|
|
|
|
|
|
def to_s
|
|
|
|
|
r = "#{dir}"
|
|
|
|
|
r += " #{version}" if @version
|
|
|
|
@ -165,7 +169,9 @@ module LinuxUpdate
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def import_config_from_io( io) open_config('w') {|c| io.each_line {|l| c.print l } } end
|
|
|
|
|
def import_config_from_io io
|
|
|
|
|
open_config('w') {|c| io.each_line {|l| c.print l } }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def import_config file_or_io_or_fetched
|
|
|
|
|
info "Import config #{file_or_io_or_fetched}"
|
|
|
|
@ -194,12 +200,8 @@ module LinuxUpdate
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def install
|
|
|
|
|
info 'make modules_install install'
|
|
|
|
|
make 'modules_install', 'install'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def info text
|
|
|
|
|
STDERR.puts "[#{version}] #{text}"
|
|
|
|
|
info 'make firmware_install modules_install install'
|
|
|
|
|
make 'firmware_install', 'modules_install', 'install'
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -207,6 +209,18 @@ module LinuxUpdate
|
|
|
|
|
class Error <Exception
|
|
|
|
|
end
|
|
|
|
|
class InvalidVersionType <Error
|
|
|
|
|
attr_reader :get
|
|
|
|
|
def initialize get
|
|
|
|
|
@get = get
|
|
|
|
|
super "I know Fetched, Versionomy, Release and String, but what is #{get.class}?"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
class NoLinuxSource <Error
|
|
|
|
|
attr_reader :get
|
|
|
|
|
def initialize get
|
|
|
|
|
@get = get
|
|
|
|
|
super "Linux sources in #{get} not found."
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
class MakeFailed <Error
|
|
|
|
|
end
|
|
|
|
@ -254,20 +268,33 @@ module LinuxUpdate
|
|
|
|
|
@fetched ||= Dir[ @sources_base_dir + 'linux-*'].
|
|
|
|
|
map( &Pathname.method( :new)).
|
|
|
|
|
select( &:directory?).
|
|
|
|
|
map {|d| Fetched.new d }
|
|
|
|
|
map {|d| Fetched.new d }.
|
|
|
|
|
select( &:linux_sources?)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def configured() fetched.select &:configured? end
|
|
|
|
|
def unconfigured() fetched.reject &:configured? end
|
|
|
|
|
|
|
|
|
|
def find_fetched_version version
|
|
|
|
|
try =
|
|
|
|
|
lambda do |&e|
|
|
|
|
|
begin e.call
|
|
|
|
|
rescue NoLinuxSource
|
|
|
|
|
false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
case version
|
|
|
|
|
when Fetched then version
|
|
|
|
|
when Fetched
|
|
|
|
|
raise NoLinuxSource, version unless version.linux_sources?
|
|
|
|
|
version
|
|
|
|
|
when Versionomy::Value then fetched.find {|f| version == f.version }
|
|
|
|
|
when Release then find_fetched_version version.version
|
|
|
|
|
when String then find_fetched_version Versionomy.parse( version)
|
|
|
|
|
when Pathname then find_fetched_version Fetched.new( version)
|
|
|
|
|
when String
|
|
|
|
|
try.() { find_fetched_version Pathname.new version } or
|
|
|
|
|
find_fetched_version Versionomy.parse( version)
|
|
|
|
|
when nil, false then fetched.max
|
|
|
|
|
else raise InvalidVersionType, "I know Fetched, Versionomy, Release and String, but what is #{version.class}?"
|
|
|
|
|
else raise InvalidVersionType, version
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|