summaryrefslogtreecommitdiff
path: root/src/buildstream/_artifactcache.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildstream/_artifactcache.py')
-rw-r--r--src/buildstream/_artifactcache.py15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/buildstream/_artifactcache.py b/src/buildstream/_artifactcache.py
index c1e87b6dc..46fc5fbfb 100644
--- a/src/buildstream/_artifactcache.py
+++ b/src/buildstream/_artifactcache.py
@@ -541,26 +541,27 @@ class ArtifactCache(BaseCache):
keys = list(utils._deduplicate([artifact_proto.strong_key, artifact_proto.weak_key]))
- # Check whether the artifact is on the server
+ pushed = False
+
for key in keys:
try:
- remote.get_artifact(element.get_artifact_name(key=key))
+ remote_artifact = remote.get_artifact(element.get_artifact_name(key=key))
+ # Skip push if artifact is already on the server
+ if remote_artifact == artifact_proto:
+ continue
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.NOT_FOUND:
raise ArtifactError(
"Error checking artifact cache with status {}: {}".format(e.code().name, e.details())
)
- else:
- return False
- # If not, we send the artifact proto
- for key in keys:
try:
remote.update_artifact(element.get_artifact_name(key=key), artifact_proto)
+ pushed = True
except grpc.RpcError as e:
raise ArtifactError("Failed to push artifact with status {}: {}".format(e.code().name, e.details()))
- return True
+ return pushed
# _pull_artifact_storage():
#