summaryrefslogtreecommitdiff
path: root/rtemsspec/reposubset.py
diff options
context:
space:
mode:
Diffstat (limited to 'rtemsspec/reposubset.py')
-rw-r--r--rtemsspec/reposubset.py66
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())