1
1
mirror of https://github.com/NixOS/mobile-nixos.git synced 2024-12-18 13:31:36 +03:00
mobile-nixos/boot/init/tasks/mount.rb
Samuel Dionne-Riel bdee7cf0e0 boot/init: Removes SingletonTask special dependency
Instead, rely on targets.

Additionally removes the "Boot" special dependency which only made sense
when it was expected that having no dependency was an error.
2020-02-03 16:19:10 -05:00

71 lines
1.5 KiB
Ruby

# Mounts mount point
class Tasks::Mount < Task
attr_reader :source
attr_reader :mount_point
class ExistingMountTask < StandardError
end
def self.normalize_mountpoint(path)
path = path.split("/").join("/")
path = "/" if path == ""
path
end
def self.register(mount_point, instance)
mount_point = normalize_mountpoint(mount_point)
@registry ||= {}
unless @registry[mount_point].nil? then
raise ExistingMountTask.new("Mount point task for '#{mount_point}' already exists.")
end
@registry[mount_point] = instance
end
def self.registry()
@registry
end
def initialize(source, mount_point=nil, **named)
@named = named
if mount_point
@source = source
@mount_point = mount_point
add_dependency(:Files, source)
else
@source = named[:type]
@mount_point = source
end
add_dependency(:Target, :Environment)
self.class.register(@mount_point, self)
end
def run()
FileUtils.mkdir_p(mount_point)
System.mount(source, mount_point, **@named)
end
def type
@named[:type]
end
def name()
"#{super}(#{source}, #{mount_point}, #{@named.inspect})"
end
end
module Dependencies
class Mount < BaseDependency
def initialize(mount_point)
@mount_point = Tasks::Mount.normalize_mountpoint(mount_point)
end
def fulfilled?()
task = Tasks::Mount.registry[@mount_point]
unless task
$logger.warn("Missing Mount task for mount point #{@mount_point}")
end
task && task.ran
end
end
end