diff options
Diffstat (limited to 'rtemsspec/reposubset.py')
-rw-r--r-- | rtemsspec/reposubset.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/rtemsspec/reposubset.py b/rtemsspec/reposubset.py new file mode 100644 index 00000000..bc3a20d0 --- /dev/null +++ b/rtemsspec/reposubset.py @@ -0,0 +1,66 @@ +# 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()) |