diff options
author | Jim MacArthur <jim.macarthur@codethink.co.uk> | 2018-12-06 12:21:15 +0000 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2019-02-18 11:29:25 +0100 |
commit | 3832c0d1ff7ec7458e04899873bde574066f7f23 (patch) | |
tree | a1fcdd89fd9601947a20067740d75360c08fe48f | |
parent | 3b881efc9ea5ca440d08e3bd901bec5ebdfc5581 (diff) | |
download | buildstream-3832c0d1ff7ec7458e04899873bde574066f7f23.tar.gz |
element.py: Alter _cache_artifact to use CasBasedDirectory
-rw-r--r-- | buildstream/_artifactcache.py | 7 | ||||
-rw-r--r-- | buildstream/element.py | 28 |
2 files changed, 21 insertions, 14 deletions
diff --git a/buildstream/_artifactcache.py b/buildstream/_artifactcache.py index bc0032bec..b72b20fda 100644 --- a/buildstream/_artifactcache.py +++ b/buildstream/_artifactcache.py @@ -588,13 +588,16 @@ class ArtifactCache(): # # Args: # element (Element): The Element commit an artifact for - # content (str): The element's content directory + # content (Directory): The element's content directory # keys (list): The cache keys to use # def commit(self, element, content, keys): refs = [element.get_artifact_name(key) for key in keys] - self.cas.commit(refs, content) + tree = content._get_digest() + + for ref in refs: + self.cas.set_ref(ref, tree) # diff(): # diff --git a/buildstream/element.py b/buildstream/element.py index bb98ce6b3..8fc491204 100644 --- a/buildstream/element.py +++ b/buildstream/element.py @@ -103,6 +103,7 @@ from .types import _KeyStrength, CoreWarnings from .storage.directory import Directory from .storage._filebaseddirectory import FileBasedDirectory +from .storage._casbaseddirectory import CasBasedDirectory from .storage.directory import VirtualDirectoryError @@ -1681,22 +1682,22 @@ class Element(Plugin): context = self._get_context() + assemblevdir = CasBasedDirectory(cas_cache=context.artifactcache.cas, ref=None) + logsvdir = assemblevdir.descend("logs", create=True) + metavdir = assemblevdir.descend("meta", create=True) + buildtreevdir = assemblevdir.descend("buildtree", create=True) + # Create artifact directory structure assembledir = os.path.join(rootdir, 'artifact') - filesdir = os.path.join(assembledir, 'files') logsdir = os.path.join(assembledir, 'logs') metadir = os.path.join(assembledir, 'meta') - buildtreedir = os.path.join(assembledir, 'buildtree') os.mkdir(assembledir) - if collect is not None and collectvdir is not None: - os.mkdir(filesdir) os.mkdir(logsdir) os.mkdir(metadir) - os.mkdir(buildtreedir) - # Hard link files from collect dir to files directory if collect is not None and collectvdir is not None: - collectvdir.export_files(filesdir, can_link=True) + filesvdir = assemblevdir.descend("files", create=True) + filesvdir.import_files(collectvdir) cache_buildtrees = context.cache_buildtrees build_success = self.__build_result[0] @@ -1708,18 +1709,18 @@ class Element(Plugin): # with an empty buildtreedir regardless of this configuration. if cache_buildtrees == 'always' or (cache_buildtrees == 'failure' and not build_success): + sandbox_vroot = sandbox.get_virtual_directory() try: - sandbox_vroot = sandbox.get_virtual_directory() sandbox_build_dir = sandbox_vroot.descend( self.get_variable('build-root').lstrip(os.sep).split(os.sep)) - # Hard link files from build-root dir to buildtreedir directory - sandbox_build_dir.export_files(buildtreedir) + buildtreevdir.import_files(sandbox_build_dir) except VirtualDirectoryError: # Directory could not be found. Pre-virtual # directory behaviour was to continue silently # if the directory could not be found. pass + # Write some logs out to normal directories: logsdir and metadir # Copy build log log_filename = context.get_log_filename() self._build_log_path = os.path.join(logsdir, 'build.log') @@ -1762,8 +1763,11 @@ class Element(Plugin): ] }), os.path.join(metadir, 'workspaced-dependencies.yaml')) - artifact_size = utils._get_dir_size(assembledir) - self.__artifacts.commit(self, assembledir, self.__get_cache_keys_for_commit()) + metavdir.import_files(metadir) + logsvdir.import_files(logsdir) + + artifact_size = assemblevdir.get_size() + self.__artifacts.commit(self, assemblevdir, self.__get_cache_keys_for_commit()) if collect is not None and collectvdir is None: raise ElementError( |