summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2020-04-07 17:06:24 +0200
committerbst-marge-bot <marge-bot@buildstream.build>2020-04-08 06:57:57 +0000
commit937253e1ce249b6713b15fe95c61248b0f920e63 (patch)
tree7cd74d97703ec955d7cac7e54dbcec8a67299cad
parentdaccb77b6192cbb5f5aa472781697a26d2b271fd (diff)
downloadbuildstream-937253e1ce249b6713b15fe95c61248b0f920e63.tar.gz
_casbaseddirectory.py: Fix encoding in open_file() for binary files
Python doesn't ignore `encoding` for binary files, it must be `None`.
-rw-r--r--src/buildstream/storage/_casbaseddirectory.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/buildstream/storage/_casbaseddirectory.py b/src/buildstream/storage/_casbaseddirectory.py
index d6c4a7813..ed6fe206c 100644
--- a/src/buildstream/storage/_casbaseddirectory.py
+++ b/src/buildstream/storage/_casbaseddirectory.py
@@ -736,18 +736,23 @@ class CasBasedDirectory(Directory):
if mode not in ["r", "rb", "w", "wb", "x", "xb"]:
raise ValueError("Unsupported mode: `{}`".format(mode))
+ if "b" in mode:
+ encoding = None
+ else:
+ encoding = "utf-8"
+
if "r" in mode:
if not entry:
raise FileNotFoundError("{} not found in {}".format(path[-1], str(subdir)))
# Read-only access, allow direct access to CAS object
- with open(self.cas_cache.objpath(entry.digest), mode, encoding="utf-8") as f:
+ with open(self.cas_cache.objpath(entry.digest), mode, encoding=encoding) as f:
yield f
else:
if "x" in mode and entry:
raise FileExistsError("{} already exists in {}".format(path[-1], str(subdir)))
- with utils._tempnamedfile(mode, encoding="utf-8", dir=self.cas_cache.tmpdir) as f:
+ with utils._tempnamedfile(mode, encoding=encoding, dir=self.cas_cache.tmpdir) as f:
yield f
# Import written temporary file into CAS
f.flush()