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

90 lines
1.9 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
# Only add a dependency for an absolute path.
# Otherwise we would wait on the file "tmpfs" for tmpfs, and such.
if source.match(%{^/})
add_dependency(:Devices, source)
end
2019-12-23 22:04:43 +03:00
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
def name()
super + "(#{@mount_point})"
end
def pretty_name()
"Mounting '#{@mount_point}'"
end
end
end