test: make server-side tests robust against SCCACHE_CLIENT_SIDE_COMPILE
Mark test_server_unsupported_compiler and test_server_compile with
#[serial] and explicitly unset SCCACHE_CLIENT_SIDE_COMPILE so they
exercise the server-side compilation path regardless of the environment.
test: make server-side tests robust against SCCACHE_CLIENT_SIDE_COMPILE
Mark test_server_unsupported_compiler and test_server_compile with
#[serial] and explicitly unset SCCACHE_CLIENT_SIDE_COMPILE so they
exercise the server-side compilation path regardless of the environment.
feat: add file_clone option for reflink-based disk cache
Add a new `file_clone` configuration option for disk cache that stores
cache entries as uncompressed directory structures and uses APFS
clonefile/reflink when restoring files on cache hit.
Configuration:
- `[cache.disk] file_clone = true` in config file
- `SCCACHE_FILE_CLONE=true` environment variable
- Default: disabled
When enabled, cache entries are stored as directories containing raw
object files instead of compressed ZIP archives. On cache hit, files are
restored via reflink (copy-on-write clone), which is near-instantaneous
and shares physical disk blocks with the cache.
If the filesystem doesn't support reflink, the feature automatically
falls back to the original compressed ZIP+zstd storage format.
Key implementation details:
- Mixed format reading: both compressed and uncompressed entries can be
read regardless of current mode
- Directory entries use a .sccache_dir_entry marker file for identification
and as an atomic write-complete signal
- LRU eviction is directory-aware (evicts entire directory entries)
- Cache size is ~2.8x larger than compressed (expected for uncompressed)
Uses the reflink-copy crate for cross-platform reflink support.