Commit f73eda1a authored by Jim MacArthur's avatar Jim MacArthur
Browse files

plugins/elements/import.py: Convert to virtual directories

parent 47d04e83
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ The empty configuration is as such:
"""

import os
import shutil
from buildstream import Element, BuildElement, ElementError


@@ -39,6 +38,9 @@ from buildstream import Element, BuildElement, ElementError
class ImportElement(BuildElement):
    # pylint: disable=attribute-defined-outside-init

    # This plugin has been modified to avoid the use of Sandbox.get_directory
    BST_VIRTUAL_DIRECTORY = True

    def configure(self, node):
        self.source = self.node_subst_member(node, 'source')
        self.target = self.node_subst_member(node, 'target')
@@ -68,27 +70,22 @@ class ImportElement(BuildElement):
        # Do not mount workspaces as the files are copied from outside the sandbox
        self._stage_sources_in_sandbox(sandbox, 'input', mount_workspaces=False)

        rootdir = sandbox.get_directory()
        inputdir = os.path.join(rootdir, 'input')
        outputdir = os.path.join(rootdir, 'output')
        rootdir = sandbox.get_virtual_directory()
        inputdir = rootdir.descend(['input'])
        outputdir = rootdir.descend(['output'], create=True)

        # The directory to grab
        inputdir = os.path.join(inputdir, self.source.lstrip(os.sep))
        inputdir = inputdir.rstrip(os.sep)
        inputdir = inputdir.descend(self.source.strip(os.sep).split(os.sep))

        # The output target directory
        outputdir = os.path.join(outputdir, self.target.lstrip(os.sep))
        outputdir = outputdir.rstrip(os.sep)

        # Ensure target directory parent
        os.makedirs(os.path.dirname(outputdir), exist_ok=True)
        outputdir = outputdir.descend(self.target.strip(os.sep).split(os.sep), create=True)

        if not os.path.exists(inputdir):
        if inputdir.is_empty():
            raise ElementError("{}: No files were found inside directory '{}'"
                               .format(self, self.source))

        # Move it over
        shutil.move(inputdir, outputdir)
        outputdir.import_files(inputdir)

        # And we're done
        return '/output'