mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-18 13:31:36 +03:00
bdee7cf0e0
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.
71 lines
1.5 KiB
Ruby
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
|