summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoel Rosdahl <joel@rosdahl.net>2022-12-23 19:03:13 +0100
committerJoel Rosdahl <joel@rosdahl.net>2022-12-23 19:21:41 +0100
commit63a988d5deae415ca436c7327dec729c16961b12 (patch)
tree03f9a2384a5066523a0cbb2563ad079cbfa0cbbd /src
parenta68cae9021a445550afdcd1bcce3cb3352c3c8f9 (diff)
downloadccache-63a988d5deae415ca436c7327dec729c16961b12.tar.gz
fix: Only use original umask when retrieving result
This fixes a problem where the original umask would be used when storing a remote cache result in the local cache in from_cache. Fixes #1235.
Diffstat (limited to 'src')
-rw-r--r--src/ccache.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/ccache.cpp b/src/ccache.cpp
index 8f71e2a2..5179d8d3 100644
--- a/src/ccache.cpp
+++ b/src/ccache.cpp
@@ -2040,8 +2040,6 @@ enum class FromCacheCallMode { direct, cpp };
static nonstd::expected<bool, Failure>
from_cache(Context& ctx, FromCacheCallMode mode, const Digest& result_key)
{
- UmaskScope umask_scope(ctx.original_umask);
-
// The user might be disabling cache hits.
if (ctx.config.recache()) {
return false;
@@ -2080,6 +2078,7 @@ from_cache(Context& ctx, FromCacheCallMode mode, const Digest& result_key)
cache_entry.verify_checksum();
core::Result::Deserializer deserializer(cache_entry.payload());
core::ResultRetriever result_retriever(ctx, result_key);
+ UmaskScope umask_scope(ctx.original_umask);
deserializer.visit(result_retriever);
} catch (core::ResultRetriever::WriteError& e) {
LOG("Write error when retrieving result from {}: {}",