summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/ccache.cpp3
-rw-r--r--test/suites/remote_file.bash16
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"