blob: 5b44d6e4c870d882c077647ddb0fdf7f2179c863 [file] [log] [blame]
# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import recipe_api
class MinfsApi(recipe_api.RecipeApi):
"""MinfsApi provides support for Fuchia's MinFS tool.
Currently this module can only be used with a Zircon build, which produces
the local minfs binary.
"""
def __init__(self, *args, **kwargs):
super(MinfsApi, self).__init__(*args, **kwargs)
# The path to the minfs command.
self._minfs = None
def __call__(self, *args, **kwargs):
assert self._minfs
name = kwargs.pop('name', 'minfs ' + args[1])
cmd = [self._minfs]
return self.m.step(name, cmd + list(args), **kwargs)
@property
def minfs_path(self):
"""The path to the minfs command."""
return self._minfs
@minfs_path.setter
def minfs_path(self, path):
"""The path to the minfs command."""
self._minfs = path
def cp(self, from_path, to_path, image, **kwargs):
"""
Copies a file or directory from an image.
Paths inside of the MinFS image are prefixed with '::', so '::'
refers to the root of the MinFS image.
Args:
from_path (str or Path): The path to copy from.
to_path (str or Path): The path to copy to.
image (str or Path): The path to the MinFS image.
Returns:
A step to perform the copy.
"""
cmd = [
image,
'cp',
from_path,
to_path,
]
return self(*cmd, **kwargs)
def create(self, path, size='100M', **kwargs):
"""
Creates a MinFS image at the given path.
Args:
path (str): The path at which to create the image.
size (str): The size of the image, number followed by unit. Defaults to 100M.
Returns:
A step to perform the creation.
"""
return self(str(path) + '@' + size, 'create', **kwargs)
def copy_image(self, step_name, image_path, out_dir):
"""
Copies everything from a minfs image into a local directory.
Args:
step_name (str): The name of the step under which to copy the minfs files.
image_path (Path): Full path to the minfs image.
out_dir (Path): Full path to the directory to copy files into.
Returns:
A step to perform the copy.
"""
return self.cp(
# Paths inside of the MinFS image are prefixed with '::', so '::'
# refers to the root of the MinFS image.
'::',
out_dir,
image_path,
name=step_name,
)