# SPDX-License-Identifier: BSD-2-Clause """ Build step to create a subset of a repository. """ # Copyright (C) 2021 EDISOFT (https://www.edisoft.pt/) # Copyright (C) 2020, 2023 embedded brains GmbH & Co. KG # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import logging from typing import List from rtemsspec.build import gather_files from rtemsspec.directorystate import DirectoryState from rtemsspec.packagebuild import BuildItem class RepositorySubset(BuildItem): """ Creates a directory containing only the specified subset of the repository. """ def gather_files(self) -> List[str]: """ Gathers the files of the repository subset. """ variant = self.input("variant") logging.info("%s: gather repository subset", self.uid) config = { "bsp": variant["bsp"], "arch": variant["arch"], "extra-files": self["extra-files"], "enabled": self.enabled_set + self["enabled"], "build-uids": self["build-uids"] } return gather_files(config, self.item.cache) def run(self): source = self.input("source") assert isinstance(source, DirectoryState) destination = self.output("destination") assert isinstance(destination, DirectoryState) destination.clear() logging.info("%s: copy gathered files", self.uid) destination.copy_files(source.directory, self.gather_files())