diff options
author | Joel Rosdahl <joel@rosdahl.net> | 2022-12-23 19:03:13 +0100 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2022-12-23 19:21:41 +0100 |
commit | 63a988d5deae415ca436c7327dec729c16961b12 (patch) | |
tree | 03f9a2384a5066523a0cbb2563ad079cbfa0cbbd | |
parent | a68cae9021a445550afdcd1bcce3cb3352c3c8f9 (diff) | |
download | ccache-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.
-rw-r--r-- | src/ccache.cpp | 3 | ||||
-rw-r--r-- | test/suites/remote_file.bash | 16 |
2 files changed, 16 insertions, 3 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 {}: {}", diff --git a/test/suites/remote_file.bash b/test/suites/remote_file.bash index 39184884..e64afda5 100644 --- a/test/suites/remote_file.bash +++ b/test/suites/remote_file.bash @@ -274,7 +274,8 @@ SUITE_remote_file() { export CCACHE_UMASK=042 CCACHE_REMOTE_STORAGE="file://$PWD/remote|umask=024" - rm -rf remote + + # local -> remote, cache miss $CCACHE_COMPILE -c test.c expect_perm remote drwxr-x-wx # 777 & 024 expect_perm remote/CACHEDIR.TAG -rw-r---w- # 666 & 024 @@ -282,12 +283,25 @@ SUITE_remote_file() { expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042 expect_perm "${result_file}" -rw--w-r-- # 666 & 042 + # local -> remote, local cache hit CCACHE_REMOTE_STORAGE="file://$PWD/remote|umask=026" $CCACHE -C >/dev/null rm -rf remote $CCACHE_COMPILE -c test.c expect_perm remote drwxr-x--x # 777 & 026 expect_perm remote/CACHEDIR.TAG -rw-r----- # 666 & 026 + result_file=$(find $CCACHE_DIR -name '*R') + expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042 + expect_perm "${result_file}" -rw--w-r-- # 666 & 042 + + # remote -> local, remote cache hit + $CCACHE -C >/dev/null + $CCACHE_COMPILE -c test.c + expect_perm remote drwxr-x--x # 777 & 026 + expect_perm remote/CACHEDIR.TAG -rw-r----- # 666 & 026 + result_file=$(find $CCACHE_DIR -name '*R') + expect_perm "$(dirname "${result_file}")" drwx-wxr-x # 777 & 042 + expect_perm "${result_file}" -rw--w-r-- # 666 & 042 # ------------------------------------------------------------------------- TEST "Sharding" |