You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by no...@apache.org on 2020/12/29 12:58:21 UTC
[buildstream] 03/06: _artifact: use _TempTextBuffer instead of tmp
file
This is an automated email from the ASF dual-hosted git repository.
not-in-ldap pushed a commit to branch aevri/win32_temptext
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit d97f9095597b05d669db3f81c5a6b51bca62392c
Author: Angelos Evripiotis <je...@bloomberg.net>
AuthorDate: Thu Jun 6 16:28:10 2019 +0100
_artifact: use _TempTextBuffer instead of tmp file
When adding public data to CAS, save on file I/O by passing an in-memory
buffer to _cas.add_object() instead of a filename to read. This means
that we avoid reading back the file from disk when hashing it, we still
only write it to disk once.
This also side-steps a win32 compatability issue, the 'name' member of
tempfile.NamedTemporaryFile cannot be opened on Windows NT or later, as
per the Python docs:
https://docs.python.org/3/library/tempfile.html#tempfile.NamedTemporaryFile
---
src/buildstream/_artifact.py | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/buildstream/_artifact.py b/src/buildstream/_artifact.py
index 90d25b4..b0db06d 100644
--- a/src/buildstream/_artifact.py
+++ b/src/buildstream/_artifact.py
@@ -29,7 +29,6 @@ artifact composite interaction away from Element class
"""
import os
-import tempfile
from ._protos.buildstream.v2.artifact_pb2 import Artifact as ArtifactProto
from . import _yaml
@@ -148,9 +147,9 @@ class Artifact():
size += filesvdir.get_size()
# Store public data
- with tempfile.NamedTemporaryFile(dir=self._tmpdir) as tmp:
- _yaml.dump(_yaml.node_sanitize(publicdata), tmp.name)
- public_data_digest = self._cas.add_object(path=tmp.name, link_directly=True)
+ with utils._TempTextBuffer() as tmp:
+ _yaml.dump(_yaml.node_sanitize(publicdata), tmp.stream)
+ public_data_digest = self._cas.add_object(buffer=tmp.get_bytes_copy())
artifact.public_data.CopyFrom(public_data_digest)
size += public_data_digest.size_bytes