1
1
mirror of https://github.com/NixOS/mobile-nixos.git synced 2024-12-18 21:41:53 +03:00
mobile-nixos/boot/init/tasks/mount.rb

78 lines
1.6 KiB
Ruby
Raw Normal View History

2019-12-23 06:32:34 +03:00
# Mounts mount point
class Tasks::Mount < Task
2019-12-23 22:04:43 +03:00
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
2019-12-23 22:04:43 +03:00
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)
2019-12-23 06:32:34 +03:00
end
def run()
2019-12-23 22:04:43 +03:00
FileUtils.mkdir_p(mount_point)
System.mount(source, mount_point, **@named)
end
def type
@named[:type]
2019-12-23 06:32:34 +03:00
end
def name()
2019-12-23 22:04:43 +03:00
"#{super}(#{source}, #{mount_point}, #{@named.inspect})"
2019-12-23 06:32:34 +03:00
end
end
module Dependencies
class Mount < BaseDependency
def initialize(mount_point)
@mount_point = Tasks::Mount.normalize_mountpoint(mount_point)
end
def fulfilled?()
unless task
$logger.warn("Missing Mount task for mount point #{@mount_point}")
end
task && task.ran
end
def depends_on?(other)
task.depends_on?(other)
end
def task()
Tasks::Mount.registry[@mount_point]
end
end
end