summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan van Berkom <tristan@codethink.co.uk>2020-12-01 20:37:17 +0900
committerTristan van Berkom <tristan@codethink.co.uk>2020-12-07 17:51:46 +0900
commit965da0ad04af8649f48cfeffd90174e147052494 (patch)
tree411fc37d0f8aa5b8a2fa92ee2e170d0496c301d6
parent548b23d767e11f4ea49f4934a5d9d99ce41342f3 (diff)
downloadbuildstream-965da0ad04af8649f48cfeffd90174e147052494.tar.gz
_artifact.py: Store additional metadata on the artifact
This commit enriches the metadata we store on artifacts in the new detatched low/high diversity metadata files: * The SandboxConfig is now stored in the artifact, allowing one to perform activities such as launching sandboxes on artifacts downloaded via artifact name (without backing project data). * The environment variables is now stored in the artifact, similarly allowing one to shell into a downloaded artifacts which are unrelated to a loaded project. * The element variables are now stored in the artifact, allowing more flexibility in what the core can do with a downloaded ArtifactElement * The element's strict key All of these of course can additionally enhance traceability in the UI with commands such as `bst artifact show`. Summary of changes: * _artifact.py: - Store new data in the new proto digests. - Added new accessors to extract these new aspects from loaded artifacts. - Bump the proto version number for compatibility * _artifactcache.py: Adjusted to push and pull the new blobs and digests. * element.py: - Call Artifact.cache() with new parameters - Expect the strict key from Artifact.get_meta_keys() - Always specify the strict key when constructing an Artifact instance which will later be used to cache the artifact (i.e. the self.__artifact Artifact). * _versions.py: Bump the global artifact version number, as this breaks the artifact format. * tests/cachekey: Updated cache key test for new keys.
-rw-r--r--src/buildstream/_artifact.py128
-rw-r--r--src/buildstream/_artifactcache.py8
-rw-r--r--src/buildstream/_versions.py2
-rw-r--r--src/buildstream/element.py25
-rw-r--r--tests/cachekey/project/elements/build1.expected2
-rw-r--r--tests/cachekey/project/elements/build2.expected2
-rw-r--r--tests/cachekey/project/elements/build3.expected2
-rw-r--r--tests/cachekey/project/elements/compose1.expected2
-rw-r--r--tests/cachekey/project/elements/compose2.expected2
-rw-r--r--tests/cachekey/project/elements/compose3.expected2
-rw-r--r--tests/cachekey/project/elements/compose4.expected2
-rw-r--r--tests/cachekey/project/elements/compose5.expected2
-rw-r--r--tests/cachekey/project/elements/import1.expected2
-rw-r--r--tests/cachekey/project/elements/import2.expected2
-rw-r--r--tests/cachekey/project/elements/import3.expected2
-rw-r--r--tests/cachekey/project/elements/script1.expected2
-rw-r--r--tests/cachekey/project/sources/bzr1.expected2
-rw-r--r--tests/cachekey/project/sources/git1.expected2
-rw-r--r--tests/cachekey/project/sources/git2.expected2
-rw-r--r--tests/cachekey/project/sources/git3.expected2
-rw-r--r--tests/cachekey/project/sources/local1.expected2
-rw-r--r--tests/cachekey/project/sources/local2.expected2
-rw-r--r--tests/cachekey/project/sources/patch1.expected2
-rw-r--r--tests/cachekey/project/sources/patch2.expected2
-rw-r--r--tests/cachekey/project/sources/patch3.expected2
-rw-r--r--tests/cachekey/project/sources/pip1.expected2
-rw-r--r--tests/cachekey/project/sources/remote1.expected2
-rw-r--r--tests/cachekey/project/sources/remote2.expected2
-rw-r--r--tests/cachekey/project/sources/tar1.expected2
-rw-r--r--tests/cachekey/project/sources/tar2.expected2
-rw-r--r--tests/cachekey/project/sources/zip1.expected2
-rw-r--r--tests/cachekey/project/sources/zip2.expected2
-rw-r--r--tests/cachekey/project/target.expected2
33 files changed, 174 insertions, 47 deletions
diff --git a/src/buildstream/_artifact.py b/src/buildstream/_artifact.py
index c110e57f0..1cea03092 100644
--- a/src/buildstream/_artifact.py
+++ b/src/buildstream/_artifact.py
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2019 Codethink Limited
+# Copyright (C) 2020 Codethink Limited
# Copyright (C) 2019 Bloomberg Finance LP
#
# This program is free software; you can redistribute it and/or
@@ -29,13 +29,16 @@ artifact composite interaction away from Element class
"""
import os
+from typing import Dict, Tuple
from ._protos.buildstream.v2.artifact_pb2 import Artifact as ArtifactProto
from . import _yaml
from . import utils
+from .node import Node
from .types import _Scope
from .storage._casbaseddirectory import CasBasedDirectory
-
+from .sandbox._config import SandboxConfig
+from ._variables import Variables
# An Artifact class to abstract artifact operations
# from the Element class
@@ -44,23 +47,25 @@ from .storage._casbaseddirectory import CasBasedDirectory
# element (Element): The Element object
# context (Context): The BuildStream context
# strong_key (str): The elements strong cache key, dependent on context
+# strict_key (str): The elements strict cache key
# weak_key (str): The elements weak cache key
#
class Artifact:
- version = 0
+ version = 1
- def __init__(self, element, context, *, strong_key=None, weak_key=None):
+ def __init__(self, element, context, *, strong_key=None, strict_key=None, weak_key=None):
self._element = element
self._context = context
self._cache_key = strong_key
+ self._strict_key = strict_key
self._weak_cache_key = weak_key
self._artifactdir = context.artifactdir
self._cas = context.get_cascache()
self._tmpdir = context.tmpdir
self._proto = None
- self._metadata_keys = None # Strong and weak key tuple extracted from the artifact
+ self._metadata_keys = None # Strong, strict and weak key tuple extracted from the artifact
self._metadata_dependencies = None # Dictionary of dependency strong keys from the artifact
self._metadata_workspaced = None # Boolean of whether it's a workspaced artifact
self._metadata_workspaced_dependencies = None # List of which dependencies are workspaced from the artifact
@@ -137,11 +142,25 @@ class Artifact:
# sourcesvdir (Directory): Virtual Directoy object for the staged sources
# buildresult (tuple): bool, short desc and detailed desc of result
# publicdata (dict): dict of public data to commit to artifact metadata
+ # variables (Variables): The element's Variables
+ # environment (dict): dict of the element's environment variables
+ # sandboxconfig (SandboxConfig): The element's SandboxConfig
#
# Returns:
# (int): The size of the newly cached artifact
#
- def cache(self, sandbox_build_dir, collectvdir, sourcesvdir, buildresult, publicdata):
+ def cache(
+ self,
+ *,
+ sandbox_build_dir,
+ collectvdir,
+ sourcesvdir,
+ buildresult,
+ publicdata,
+ variables,
+ environment,
+ sandboxconfig,
+ ):
context = self._context
element = self._element
@@ -161,6 +180,7 @@ class Artifact:
# Store keys
artifact.strong_key = self._cache_key
+ artifact.strict_key = self._strict_key
artifact.weak_key = self._weak_cache_key
artifact.was_workspaced = bool(element._get_workspace())
@@ -180,6 +200,34 @@ class Artifact:
artifact.public_data.CopyFrom(public_data_digest)
size += public_data_digest.size_bytes
+ # Store low diversity metadata, this metadata must have a high
+ # probability of deduplication, such as environment variables
+ # and SandboxConfig.
+ #
+ with utils._tempnamedfile_name(dir=self._tmpdir) as tmpname:
+ sandbox_dict = sandboxconfig.to_dict()
+ low_diversity_dict = {"environment": environment, "sandbox-config": sandbox_dict}
+ low_diversity_node = Node.from_dict(low_diversity_dict)
+
+ _yaml.roundtrip_dump(low_diversity_node, tmpname)
+ low_diversity_meta_digest = self._cas.add_object(path=tmpname, link_directly=True)
+ artifact.low_diversity_meta.CopyFrom(low_diversity_meta_digest)
+ size += low_diversity_meta_digest.size_bytes
+
+ # Store high diversity metadata, this metadata is expected to diverge
+ # for every element and as such cannot be deduplicated.
+ #
+ with utils._tempnamedfile_name(dir=self._tmpdir) as tmpname:
+ # The Variables object supports being converted directly to a dictionary
+ variables_dict = dict(variables)
+ high_diversity_dict = {"variables": variables_dict}
+ high_diversity_node = Node.from_dict(high_diversity_dict)
+
+ _yaml.roundtrip_dump(high_diversity_node, tmpname)
+ high_diversity_meta_digest = self._cas.add_object(path=tmpname, link_directly=True)
+ artifact.high_diversity_meta.CopyFrom(high_diversity_meta_digest)
+ size += high_diversity_meta_digest.size_bytes
+
# store build dependencies
for e in element._dependencies(_Scope.BUILD):
new_build = artifact.build_deps.add()
@@ -282,6 +330,64 @@ class Artifact:
return data
+ # load_sandbox_config():
+ #
+ # Loads the sandbox configuration from the cached artifact
+ #
+ # Returns:
+ # The stored SandboxConfig object
+ #
+ def load_sandbox_config(self) -> SandboxConfig:
+
+ # Load the sandbox data from the artifact
+ artifact = self._get_proto()
+ meta_file = self._cas.objpath(artifact.low_diversity_meta)
+ data = _yaml.load(meta_file, shortname="low-diversity-meta.yaml")
+
+ # Extract the sandbox data
+ config = data.get_mapping("sandbox-config")
+
+ # Return a SandboxConfig
+ return SandboxConfig.new_from_node(config)
+
+ # load_environment():
+ #
+ # Loads the environment variables from the cached artifact
+ #
+ # Returns:
+ # The environment variables
+ #
+ def load_environment(self) -> Dict[str, str]:
+
+ # Load the sandbox data from the artifact
+ artifact = self._get_proto()
+ meta_file = self._cas.objpath(artifact.low_diversity_meta)
+ data = _yaml.load(meta_file, shortname="low-diversity-meta.yaml")
+
+ # Extract the environment
+ config = data.get_mapping("environment")
+
+ # Return the environment
+ return config.strip_node_info()
+
+ # load_variables():
+ #
+ # Loads the element variables from the cached artifact
+ #
+ # Returns:
+ # The element variables
+ #
+ def load_variables(self) -> Variables:
+
+ # Load the sandbox data from the artifact
+ artifact = self._get_proto()
+ meta_file = self._cas.objpath(artifact.high_diversity_meta)
+ data = _yaml.load(meta_file, shortname="high-diversity-meta.yaml")
+
+ # Extract the variables node and return the new Variables instance
+ variables_node = data.get_mapping("variables")
+ return Variables(variables_node)
+
# load_build_result():
#
# Load the build result from the cached artifact
@@ -303,10 +409,11 @@ class Artifact:
# Retrieve the strong and weak keys from the given artifact.
#
# Returns:
- # (str): The strong key
- # (str): The weak key
+ # The strong key
+ # The strict key
+ # The weak key
#
- def get_metadata_keys(self):
+ def get_metadata_keys(self) -> Tuple[str, str, str]:
if self._metadata_keys is not None:
return self._metadata_keys
@@ -315,9 +422,10 @@ class Artifact:
artifact = self._get_proto()
strong_key = artifact.strong_key
+ strict_key = artifact.strict_key
weak_key = artifact.weak_key
- self._metadata_keys = (strong_key, weak_key)
+ self._metadata_keys = (strong_key, strict_key, weak_key)
return self._metadata_keys
diff --git a/src/buildstream/_artifactcache.py b/src/buildstream/_artifactcache.py
index 5ccdf8fd8..c3d96166c 100644
--- a/src/buildstream/_artifactcache.py
+++ b/src/buildstream/_artifactcache.py
@@ -404,7 +404,7 @@ class ArtifactCache(AssetCache):
except FileNotFoundError:
pass
- digests = [artifact_digest]
+ digests = [artifact_digest, artifact_proto.low_diversity_meta, artifact_proto.high_diversity_meta]
if str(artifact_proto.public_data):
digests.append(artifact_proto.public_data)
@@ -470,7 +470,9 @@ class ArtifactCache(AssetCache):
if artifact_proto.sources:
referenced_directories.append(artifact_proto.sources)
- referenced_blobs = [log_file.digest for log_file in artifact_proto.logs]
+ referenced_blobs = [artifact_proto.low_diversity_meta, artifact_proto.high_diversity_meta] + [
+ log_file.digest for log_file in artifact_proto.logs
+ ]
try:
remote.push_blob(
@@ -530,7 +532,7 @@ class ArtifactCache(AssetCache):
if pull_buildtrees and str(artifact.buildtree):
__pull_digest(artifact.buildtree)
- digests = []
+ digests = [artifact.low_diversity_meta, artifact.high_diversity_meta]
if str(artifact.public_data):
digests.append(artifact.public_data)
diff --git a/src/buildstream/_versions.py b/src/buildstream/_versions.py
index f97560b4d..37a7a0acd 100644
--- a/src/buildstream/_versions.py
+++ b/src/buildstream/_versions.py
@@ -24,4 +24,4 @@
# or if buildstream was changed in a way which can cause
# the same cache key to produce something that is no longer
# the same.
-BST_CORE_ARTIFACT_VERSION = 9
+BST_CORE_ARTIFACT_VERSION = 10
diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index 595017052..c09bb2d18 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -1840,7 +1840,16 @@ class Element(Plugin):
assert self.__artifact._cache_key is not None
with self.timed_activity("Caching artifact"):
- artifact_size = self.__artifact.cache(sandbox_build_dir, collectvdir, sourcesvdir, buildresult, publicdata)
+ artifact_size = self.__artifact.cache(
+ sandbox_build_dir=sandbox_build_dir,
+ collectvdir=collectvdir,
+ sourcesvdir=sourcesvdir,
+ buildresult=buildresult,
+ publicdata=publicdata,
+ variables=self.__variables,
+ environment=self.__environment,
+ sandboxconfig=self.__sandbox_config,
+ )
if collect is not None and collectvdir is None:
raise ElementError(
@@ -3208,11 +3217,19 @@ class Element(Plugin):
context = self._get_context()
- strict_artifact = Artifact(self, context, strong_key=self.__strict_cache_key, weak_key=self.__weak_cache_key)
+ strict_artifact = Artifact(
+ self,
+ context,
+ strong_key=self.__strict_cache_key,
+ strict_key=self.__strict_cache_key,
+ weak_key=self.__weak_cache_key,
+ )
if context.get_strict() or strict_artifact.cached():
self.__artifact = strict_artifact
else:
- self.__artifact = Artifact(self, context, weak_key=self.__weak_cache_key)
+ self.__artifact = Artifact(
+ self, context, strict_key=self.__strict_cache_key, weak_key=self.__weak_cache_key
+ )
if not context.get_strict() and self.__artifact.cached():
# In non-strict mode, strong cache key becomes available when
@@ -3247,7 +3264,7 @@ class Element(Plugin):
pass
elif self._cached():
# Load the strong cache key from the artifact
- strong_key, _ = self.__artifact.get_metadata_keys()
+ strong_key, _, _ = self.__artifact.get_metadata_keys()
self.__cache_key = strong_key
elif self.__assemble_scheduled or self.__assemble_done:
# Artifact will or has been built, not downloaded
diff --git a/tests/cachekey/project/elements/build1.expected b/tests/cachekey/project/elements/build1.expected
index 8939fe401..1692f54d7 100644
--- a/tests/cachekey/project/elements/build1.expected
+++ b/tests/cachekey/project/elements/build1.expected
@@ -1 +1 @@
-2529ccdc2fb103a69562bd022616ddb19cf6e9de84d8cfbc7840153f4ddc0731 \ No newline at end of file
+a31f513b77c99f40444f60a9cf95b2b127b2fc6f11074eab952e442002eaac1f \ No newline at end of file
diff --git a/tests/cachekey/project/elements/build2.expected b/tests/cachekey/project/elements/build2.expected
index db52547e3..ab5a9aa93 100644
--- a/tests/cachekey/project/elements/build2.expected
+++ b/tests/cachekey/project/elements/build2.expected
@@ -1 +1 @@
-1b8ebfc60feb2cdb72997c67114b60e54fb16f9ac32ee1d244ecd3adede4f435 \ No newline at end of file
+7edfaf2fe00b46d7e92808f666df37f04834b51b8672fb898a0e041be9080c96 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/build3.expected b/tests/cachekey/project/elements/build3.expected
index 868549ae6..01f7bb1eb 100644
--- a/tests/cachekey/project/elements/build3.expected
+++ b/tests/cachekey/project/elements/build3.expected
@@ -1 +1 @@
-b2ec847601220bead3bff667a9b059156f4cb4c0a057afbc0598b9d93f8ded55 \ No newline at end of file
+1792a11e64ee1a5c981ead2f7a4a05695b503d700ce6d3e50c8373a1f08e1210 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/compose1.expected b/tests/cachekey/project/elements/compose1.expected
index cc7f7d427..65078c9a7 100644
--- a/tests/cachekey/project/elements/compose1.expected
+++ b/tests/cachekey/project/elements/compose1.expected
@@ -1 +1 @@
-7c814c5c137e1792da1a3d039ead391a755aa158b18298efe67fa71f70ace2ca \ No newline at end of file
+51e162d4f09e7b0f47f709ccd0bf0084fd6cface26bbbad484869fc49df6e5ec \ No newline at end of file
diff --git a/tests/cachekey/project/elements/compose2.expected b/tests/cachekey/project/elements/compose2.expected
index c01eb0f8d..f12841808 100644
--- a/tests/cachekey/project/elements/compose2.expected
+++ b/tests/cachekey/project/elements/compose2.expected
@@ -1 +1 @@
-1da1fc95645027f8bd30e26b73639f1cc0b196a4ed96e745b96ae923b84b7929 \ No newline at end of file
+b95eee0297a2d8ffd11f9c351a9a5a9b4243d806df4734b39100207044b91a0e \ No newline at end of file
diff --git a/tests/cachekey/project/elements/compose3.expected b/tests/cachekey/project/elements/compose3.expected
index 7dd15f6a2..c5009c40b 100644
--- a/tests/cachekey/project/elements/compose3.expected
+++ b/tests/cachekey/project/elements/compose3.expected
@@ -1 +1 @@
-5529233330d798bc39b898b90d20b2763d6512b76ec2215081b3f1083fd5d2b5 \ No newline at end of file
+0774629ece7ea4e21bddf47fa7fabc2ff5efa4dcc58509006f8fdc96d7d1c900 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/compose4.expected b/tests/cachekey/project/elements/compose4.expected
index e70405388..a70f70768 100644
--- a/tests/cachekey/project/elements/compose4.expected
+++ b/tests/cachekey/project/elements/compose4.expected
@@ -1 +1 @@
-b4785d3aea6c4218420c582487a0fcb1fe988b898b96c01693fe5645c24f054a \ No newline at end of file
+0d31c6742239b4eed81ea89a2fe4dd66bb327794641f58c62b76b0f93f07d22e \ No newline at end of file
diff --git a/tests/cachekey/project/elements/compose5.expected b/tests/cachekey/project/elements/compose5.expected
index ebcbac9af..04c396045 100644
--- a/tests/cachekey/project/elements/compose5.expected
+++ b/tests/cachekey/project/elements/compose5.expected
@@ -1 +1 @@
-8d0cb89fc95dd7114a64a35ff47228f16b039484da688854f21a8651e0fefa4b \ No newline at end of file
+c1f03c1b1b4bf0141f9014ffe527758c36721ec0fe3d87abd1ec700e2da3e891 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/import1.expected b/tests/cachekey/project/elements/import1.expected
index c7fac5326..10ebbda21 100644
--- a/tests/cachekey/project/elements/import1.expected
+++ b/tests/cachekey/project/elements/import1.expected
@@ -1 +1 @@
-a5914d072494e9a592a44ceb97a553c0473c15b239d1a827aca796a1a0fe51f1 \ No newline at end of file
+92d3ad5fa90c754fa63ee93a3b6fcf383c1b447cf37628d571054e52a2df50c2 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/import2.expected b/tests/cachekey/project/elements/import2.expected
index 715006230..8416eb27a 100644
--- a/tests/cachekey/project/elements/import2.expected
+++ b/tests/cachekey/project/elements/import2.expected
@@ -1 +1 @@
-b2a6e4d687832bacd7b00765813d8392153902e34df3d91e3926189c81fea42e \ No newline at end of file
+9104a767449b0a7d9c2bbe341548f3bea6c4ef6556059b3b6b1869909b372f88 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/import3.expected b/tests/cachekey/project/elements/import3.expected
index 5d925d248..a4ccd52ca 100644
--- a/tests/cachekey/project/elements/import3.expected
+++ b/tests/cachekey/project/elements/import3.expected
@@ -1 +1 @@
-365b4af1b444bd113a3641fa7b22268040fb448c42ef351ecf8d9a09fa702262 \ No newline at end of file
+ba652fcab4d8ac7fe2e1930768b80e5494b0d5ca0c25a5f713070b5431134709 \ No newline at end of file
diff --git a/tests/cachekey/project/elements/script1.expected b/tests/cachekey/project/elements/script1.expected
index 1f6579ffd..b817085c5 100644
--- a/tests/cachekey/project/elements/script1.expected
+++ b/tests/cachekey/project/elements/script1.expected
@@ -1 +1 @@
-5346f804ba9ac6fc642971c5673a2f5520c52706cfa1e698de7a94ffe361df84 \ No newline at end of file
+73d09c3efcb2a2787737b3fc33fd6eefd0635fe3b26fda59ca3d43e5c39f9028 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/bzr1.expected b/tests/cachekey/project/sources/bzr1.expected
index 6d194a24a..36db84e37 100644
--- a/tests/cachekey/project/sources/bzr1.expected
+++ b/tests/cachekey/project/sources/bzr1.expected
@@ -1 +1 @@
-4ee74db778d7d1ad83ce680320961ffa08655c87e8316aee369d8f943a56286d \ No newline at end of file
+61809980b80872ace2a83b5d16b698b6526002d2364adccc2836e8f75d2c5b88 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/git1.expected b/tests/cachekey/project/sources/git1.expected
index 8d9e051e6..f5f3227cb 100644
--- a/tests/cachekey/project/sources/git1.expected
+++ b/tests/cachekey/project/sources/git1.expected
@@ -1 +1 @@
-8f3da148eb9fcd637537094ea309fc187767d375e87c5e585da49e40efbeb6e8 \ No newline at end of file
+5ff9575c5ecfb760e2a683fe88361ee55314b854a70e338a5caba55dbe8c57d9 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/git2.expected b/tests/cachekey/project/sources/git2.expected
index abed12ce6..414d8a39f 100644
--- a/tests/cachekey/project/sources/git2.expected
+++ b/tests/cachekey/project/sources/git2.expected
@@ -1 +1 @@
-5a1a828102a76fc1ec84b9d012b578320e17267e6b0104f2b3f79490d5081d04 \ No newline at end of file
+2ba0fedf30942a4641a51f7ad5e5bcd38732e3ea798afe64fe37aa1a0b6ce532 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/git3.expected b/tests/cachekey/project/sources/git3.expected
index 27dc857c5..31d262fc8 100644
--- a/tests/cachekey/project/sources/git3.expected
+++ b/tests/cachekey/project/sources/git3.expected
@@ -1 +1 @@
-9ace68b14a015497e88d0cee916145e0109dc406188ab4d2f7f69942e4081d82 \ No newline at end of file
+7ef53f28840b94a86d34eab03e2a1c9f6e607cc36527844de5dde44ee7d3aa82 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/local1.expected b/tests/cachekey/project/sources/local1.expected
index 387231668..cddb0f312 100644
--- a/tests/cachekey/project/sources/local1.expected
+++ b/tests/cachekey/project/sources/local1.expected
@@ -1 +1 @@
-4881a9a467073e35f94b01fef5b3a30292d1a9501a9872f94873c2ce7a411fb4 \ No newline at end of file
+3ddeb2984e64c885cfc03e09be4d0efdb665250fd1d8a7ebbec7aa847e74055e \ No newline at end of file
diff --git a/tests/cachekey/project/sources/local2.expected b/tests/cachekey/project/sources/local2.expected
index 5f29fcc76..7983c7c0f 100644
--- a/tests/cachekey/project/sources/local2.expected
+++ b/tests/cachekey/project/sources/local2.expected
@@ -1 +1 @@
-2f4fd0b15ca13e30acd846eb842e7c4fccc77111a29c19133edc91a5e2c22731 \ No newline at end of file
+ef2801ff5349d5d2c319fbda60e19e23f6b92cee10c7449f6e0c2c503cb955cc \ No newline at end of file
diff --git a/tests/cachekey/project/sources/patch1.expected b/tests/cachekey/project/sources/patch1.expected
index d542f5027..709c36d1c 100644
--- a/tests/cachekey/project/sources/patch1.expected
+++ b/tests/cachekey/project/sources/patch1.expected
@@ -1 +1 @@
-d8ff899dff9b951bea1fb57cecd9e9e0beff8d7ab84c9855394d0ba911e1bd78 \ No newline at end of file
+d02dfb7fd25c7a3bbdc99f72f990baea14c0075233e40b6e8907e150b0d6d2bf \ No newline at end of file
diff --git a/tests/cachekey/project/sources/patch2.expected b/tests/cachekey/project/sources/patch2.expected
index 00a5565de..a52ef5a88 100644
--- a/tests/cachekey/project/sources/patch2.expected
+++ b/tests/cachekey/project/sources/patch2.expected
@@ -1 +1 @@
-7717f45302278888f90c7ffd51b5507bb170856bb1100c53fe17b5ed36716fc8 \ No newline at end of file
+3ca9a6fdff99300db164b892fb7e592d7e75ac548f70c9aaef7cd86542702639 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/patch3.expected b/tests/cachekey/project/sources/patch3.expected
index 07caeeec4..55d951747 100644
--- a/tests/cachekey/project/sources/patch3.expected
+++ b/tests/cachekey/project/sources/patch3.expected
@@ -1 +1 @@
-aea86d3b816e30cb388e5632ca6ae4b308084a35b9311197bc879c9c8f4bc01b \ No newline at end of file
+32855fe6027fb27cdf71251d6c3022866de602b1377aa8c99613120db3bb7427 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/pip1.expected b/tests/cachekey/project/sources/pip1.expected
index 7b06ef700..5dd2317a7 100644
--- a/tests/cachekey/project/sources/pip1.expected
+++ b/tests/cachekey/project/sources/pip1.expected
@@ -1 +1 @@
-d78eaa9658a21b207b972a4876f52b4119ec5418b1a2894156fab7961bb06630 \ No newline at end of file
+0399ffb1d3430b59af6f75ef2f663ba93bace7dd5204aea9a314b7b6fe656aa5 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/remote1.expected b/tests/cachekey/project/sources/remote1.expected
index ff778e162..2cbb432bf 100644
--- a/tests/cachekey/project/sources/remote1.expected
+++ b/tests/cachekey/project/sources/remote1.expected
@@ -1 +1 @@
-ea79defd2b026dfd76579b44c45795f02e71fa21ad86fa37b6f718d8570b5c17 \ No newline at end of file
+c685ece0668aebe63b5605849942e40593a2dc143c42e742f660253908539def \ No newline at end of file
diff --git a/tests/cachekey/project/sources/remote2.expected b/tests/cachekey/project/sources/remote2.expected
index 3b4dcf1e2..ae1af22cf 100644
--- a/tests/cachekey/project/sources/remote2.expected
+++ b/tests/cachekey/project/sources/remote2.expected
@@ -1 +1 @@
-57c59523777f5da561809a5707c76d3bbc667b3f5d21cb262abdfc70e9679589 \ No newline at end of file
+745a7073f383cb486ff7667b5d326a7fa02e8025942f802f17cd60f381dd849b \ No newline at end of file
diff --git a/tests/cachekey/project/sources/tar1.expected b/tests/cachekey/project/sources/tar1.expected
index cf970120d..0e0d249b3 100644
--- a/tests/cachekey/project/sources/tar1.expected
+++ b/tests/cachekey/project/sources/tar1.expected
@@ -1 +1 @@
-b43e8a77bf8f89febcf4f40c3cde01155201fdb9ce08fa02d8b9d7b0a6538d1f \ No newline at end of file
+1e132d0b4c54416f6a1bf39a7214b6c12a6929104075ab2976d706fc8dec7a5f \ No newline at end of file
diff --git a/tests/cachekey/project/sources/tar2.expected b/tests/cachekey/project/sources/tar2.expected
index 5bf390493..dcafbbf2a 100644
--- a/tests/cachekey/project/sources/tar2.expected
+++ b/tests/cachekey/project/sources/tar2.expected
@@ -1 +1 @@
-ca1385011d42e2ede76d3f7a6e88ca1bd972ab2a35ce0d30a74f5260ac066731 \ No newline at end of file
+89b7b576615887651a316abac300b02ea242c581643426d34ad9afb1eab435b4 \ No newline at end of file
diff --git a/tests/cachekey/project/sources/zip1.expected b/tests/cachekey/project/sources/zip1.expected
index a8bf1143b..ac3d09fd6 100644
--- a/tests/cachekey/project/sources/zip1.expected
+++ b/tests/cachekey/project/sources/zip1.expected
@@ -1 +1 @@
-8c154d2d9cb7c2dd9228c79f04fc15e3e4554698b44bf9d01de28b712aad13b4 \ No newline at end of file
+462801e978cf3cc6f69a403ae033a7e4bd8a05cf5d7be357c9f91f03af1edbed \ No newline at end of file
diff --git a/tests/cachekey/project/sources/zip2.expected b/tests/cachekey/project/sources/zip2.expected
index 18b1ac850..4f35a72c5 100644
--- a/tests/cachekey/project/sources/zip2.expected
+++ b/tests/cachekey/project/sources/zip2.expected
@@ -1 +1 @@
-a38037f5ac8658d8a2174e78be822a9e04083441759bbdb1dd18a2009ae9e256 \ No newline at end of file
+828994c07f34eb468456b038744e41422ef53d30a047a4335e32e9d62218f291 \ No newline at end of file
diff --git a/tests/cachekey/project/target.expected b/tests/cachekey/project/target.expected
index 91c58491e..3fa0aea19 100644
--- a/tests/cachekey/project/target.expected
+++ b/tests/cachekey/project/target.expected
@@ -1 +1 @@
-6f21fe36670a3a6e09597f12797fc7a42567a437c598b36d0c7792471929d57c \ No newline at end of file
+788da21e7c1b5818b7e7b60f7eb75841057ff7e45d362cc223336c606fe47f27 \ No newline at end of file