Skip to content

fix: handle directories in dep-info source file hashing#2676

Merged
sylvestre merged 2 commits into
mozilla:mainfrom
vercel:upstream-pr/fix-dir-dep-info
Apr 28, 2026
Merged

fix: handle directories in dep-info source file hashing#2676
sylvestre merged 2 commits into
mozilla:mainfrom
vercel:upstream-pr/fix-dir-dep-info

Conversation

@mmastrac
Copy link
Copy Markdown
Contributor

@mmastrac mmastrac commented Apr 17, 2026

This patch has been in testing in the vercel/sccache fork for a number of weeks.

When proc_macro::tracked::path() registers a directory as a dependency, rustc's dep-info output includes the directory path. sccache previously crashed with "Is a directory" when trying to hash these paths.

Now recursively hashes all files within the directory (sorted for determinism), using relative paths as delimiters. This correctly captures directory dependencies so cache invalidation works when any file in the tracked directory changes.

Note that proc_macro_tracked_path is a nightly-only feature, but this nightly feature is being used by an include_dirs fork used by the next.js team. The hashing falls back to the same file-specific hash as before in all other cases.

Fixes: #2653

@mmastrac mmastrac force-pushed the upstream-pr/fix-dir-dep-info branch from 5e7caa4 to 0e3a517 Compare April 17, 2026 17:52
When proc_macro::tracked::path() registers a directory as a dependency,
rustc's dep-info output includes the directory path. sccache previously
crashed with "Is a directory" when trying to hash these paths.

Now recursively hashes all files within the directory (sorted for
determinism), using relative paths as delimiters. This correctly
captures directory dependencies so cache invalidation works when
any file in the tracked directory changes.

Fixes: mozilla#2653
@mmastrac mmastrac force-pushed the upstream-pr/fix-dir-dep-info branch from 0e3a517 to 3a3f315 Compare April 17, 2026 18:20
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 23, 2026

Codecov Report

❌ Patch coverage is 95.65217% with 5 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.25%. Comparing base (d11e2e0) to head (b19aa5e).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
src/util.rs 95.65% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2676      +/-   ##
==========================================
+ Coverage   74.17%   74.25%   +0.08%     
==========================================
  Files          70       70              
  Lines       39207    39325     +118     
==========================================
+ Hits        29083    29202     +119     
+ Misses      10124    10123       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented Apr 24, 2026

Merging this PR will not alter performance

✅ 60 untouched benchmarks
⏩ 4 skipped benchmarks1


Comparing vercel:upstream-pr/fix-dir-dep-info (b19aa5e) with main (b81fdbb)

Open in CodSpeed

Footnotes

  1. 4 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@sylvestre sylvestre merged commit 00c8126 into mozilla:main Apr 28, 2026
52 checks passed
@sylvestre
Copy link
Copy Markdown
Collaborator

thanks

eleboucher pushed a commit to eleboucher/towonel that referenced this pull request May 22, 2026
….0) (#40)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [mozilla/sccache](https://github.com/mozilla/sccache) | minor | `0.14.0` → `0.15.0` |

---

### Release Notes

<details>
<summary>mozilla/sccache (mozilla/sccache)</summary>

### [`v0.15.0`](https://github.com/mozilla/sccache/releases/tag/v0.15.0)

[Compare Source](mozilla/sccache@v0.14.0...v0.15.0)

##### sccache 0.15.0

##### Summary

sccache 0.15.0 brings several notable improvements:

- **Multi-tier caching**: New support for layered caches with fallback and automatic backfilling between tiers ([#&#8203;2581](mozilla/sccache#2581)).
- **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#&#8203;2516](mozilla/sccache#2516)).
- **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#&#8203;2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#&#8203;2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#&#8203;2621](mozilla/sccache#2621)).
- **New platforms**: loongarch64 support ([#&#8203;2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#&#8203;2683](mozilla/sccache#2683)).
- **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#&#8203;2524](mozilla/sccache#2524)).
- **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#&#8203;2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#&#8203;2676](mozilla/sccache#2676)).
- **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#&#8203;2647](mozilla/sccache#2647)).
- **Reliability fixes**: GCS initialization ([#&#8203;2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#&#8203;2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#&#8203;2677](mozilla/sccache#2677)).

This release also includes a large round of clippy-driven cleanups and several CI fixes. Welcome to 7 new contributors!

##### Features

- Avoid double-caching when ccache is installed in PATH by [@&#8203;avikivity](https://github.com/avikivity) in [#&#8203;2524](mozilla/sccache#2524)
- partial c++20 module support by [@&#8203;TroyKomodo](https://github.com/TroyKomodo) in [#&#8203;2516](mozilla/sccache#2516)
- Add support for `d1nodatetime` & `await:strict` MSVC flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2617](mozilla/sccache#2617)
- msvc: Append the default .pdb extension for the /Fd argument by [@&#8203;ikolomiko](https://github.com/ikolomiko) in [#&#8203;2621](mozilla/sccache#2621)
- msvc: add support for Y-, YI, Zf flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2663](mozilla/sccache#2663)
- Implement multiple tiers caching with fallback and backfilling by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2581](mozilla/sccache#2581)
- feat: Add loongarch64 support by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2669](mozilla/sccache#2669)
- Add cargo-binstall metadata for prebuilt binary installation by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2647](mozilla/sccache#2647)

##### Fixes

- fix: add Win32\_Security feature to windows-sys dependency by [@&#8203;JulienCote](https://github.com/JulienCote) in [#&#8203;2627](mozilla/sccache#2627)
- Fix GCS initialization by [@&#8203;msuozzo](https://github.com/msuozzo) in [#&#8203;2637](mozilla/sccache#2637)
- fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@&#8203;weihanglo](https://github.com/weihanglo) in [#&#8203;2651](mozilla/sccache#2651)
- fix: handle directories in dep-info source file hashing by [@&#8203;mmastrac](https://github.com/mmastrac) in [#&#8203;2676](mozilla/sccache#2676)

##### CI

- Revert "actions: add security audit workflow" by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2603](mozilla/sccache#2603)
- ci: fix artifact\_failure action when target dir does not exist by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2635](mozilla/sccache#2635)
- ci: set crt-static for riscv64 musl targets by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2683](mozilla/sccache#2683)
- Add retry for dists docker image build by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2677](mozilla/sccache#2677)

##### Clippy & cleanup

- clippy: fix cloned\_ref\_to\_slice\_refs lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2602](mozilla/sccache#2602)
- clippy: fix semicolon\_if\_nothing\_returned lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2601](mozilla/sccache#2601)
- clippy: fix cloned\_instead\_of\_copied lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2605](mozilla/sccache#2605)
- clippy: fix explicit\_into\_iter\_loop lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2616](mozilla/sccache#2616)
- clippy: fix unnecessary\_semicolon lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2615](mozilla/sccache#2615)
- clippy: fix manual\_string\_new lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2609](mozilla/sccache#2609)
- clippy: fix ptr\_as\_ptr lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2611](mozilla/sccache#2611)
- clippy: fix ref\_option lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2608](mozilla/sccache#2608)
- clippy: fix from\_iter\_instead\_of\_collect lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2614](mozilla/sccache#2614)
- Move PreprocessorCacheModeConfig to src/config.rs by [@&#8203;xis19](https://github.com/xis19) in [#&#8203;2604](mozilla/sccache#2604)
- Remove benchmark normalize\_win\_path\_utf8 by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2634](mozilla/sccache#2634)
- Move cmake-modules to integration tests by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2649](mozilla/sccache#2649)

##### Docs

- docs(Rust.md): Add caveats from README by [@&#8203;TheJanzap](https://github.com/TheJanzap) in [#&#8203;2684](mozilla/sccache#2684)

##### Dependencies

- chore: switch thirtyfour\_sync to thirtyfour by [@&#8203;tottoto](https://github.com/tottoto) in [#&#8203;2613](mozilla/sccache#2613)
- build(deps): bump actions/upload-artifact from 4 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2632](mozilla/sccache#2632)
- build(deps): bump actions/download-artifact from 5 to 8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2631](mozilla/sccache#2631)
- chore(deps): update rust crate quinn-proto to v0.11.14 by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2645](mozilla/sccache#2645)

##### New Contributors

- [@&#8203;ikolomiko](https://github.com/ikolomiko) made their first contribution in [#&#8203;2621](mozilla/sccache#2621)
- [@&#8203;JulienCote](https://github.com/JulienCote) made their first contribution in [#&#8203;2627](mozilla/sccache#2627)
- [@&#8203;msuozzo](https://github.com/msuozzo) made their first contribution in [#&#8203;2637](mozilla/sccache#2637)
- [@&#8203;weihanglo](https://github.com/weihanglo) made their first contribution in [#&#8203;2651](mozilla/sccache#2651)
- [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#&#8203;2669](mozilla/sccache#2669)
- [@&#8203;TheJanzap](https://github.com/TheJanzap) made their first contribution in [#&#8203;2684](mozilla/sccache#2684)
- [@&#8203;mmastrac](https://github.com/mmastrac) made their first contribution in [#&#8203;2676](mozilla/sccache#2676)

**Full Changelog**: <mozilla/sccache@v0.14.0...v0.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/40
eleboucher pushed a commit to eleboucher/towonel that referenced this pull request May 22, 2026
….0) (#40)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [mozilla/sccache](https://github.com/mozilla/sccache) | minor | `0.14.0` → `0.15.0` |

---

### Release Notes

<details>
<summary>mozilla/sccache (mozilla/sccache)</summary>

### [`v0.15.0`](https://github.com/mozilla/sccache/releases/tag/v0.15.0)

[Compare Source](mozilla/sccache@v0.14.0...v0.15.0)

##### sccache 0.15.0

##### Summary

sccache 0.15.0 brings several notable improvements:

- **Multi-tier caching**: New support for layered caches with fallback and automatic backfilling between tiers ([#&#8203;2581](mozilla/sccache#2581)).
- **C++20 modules**: Initial (partial) support for compiling C++20 modules ([#&#8203;2516](mozilla/sccache#2516)).
- **Expanded MSVC support**: New flags handled including `d1nodatetime`, `await:strict` ([#&#8203;2617](mozilla/sccache#2617)), `Y-`, `YI`, `Zf` ([#&#8203;2663](mozilla/sccache#2663)), and the default `.pdb` extension for `/Fd` ([#&#8203;2621](mozilla/sccache#2621)).
- **New platforms**: loongarch64 support ([#&#8203;2669](mozilla/sccache#2669)) and `crt-static` for riscv64 musl targets ([#&#8203;2683](mozilla/sccache#2683)).
- **ccache interop**: Avoid double-caching when ccache is also installed in `PATH` ([#&#8203;2524](mozilla/sccache#2524)).
- **Cargo integration**: `CARGO_ENCODED_RUSTFLAGS` is now excluded from the env var hash to prevent spurious cache misses ([#&#8203;2651](mozilla/sccache#2651)), and dep-info handling correctly skips directories ([#&#8203;2676](mozilla/sccache#2676)).
- **Distribution**: cargo-binstall metadata for prebuilt binary installation ([#&#8203;2647](mozilla/sccache#2647)).
- **Reliability fixes**: GCS initialization ([#&#8203;2637](mozilla/sccache#2637)), Windows `Win32_Security` feature ([#&#8203;2627](mozilla/sccache#2627)), and retries for dist docker image builds ([#&#8203;2677](mozilla/sccache#2677)).

This release also includes a large round of clippy-driven cleanups and several CI fixes. Welcome to 7 new contributors!

##### Features

- Avoid double-caching when ccache is installed in PATH by [@&#8203;avikivity](https://github.com/avikivity) in [#&#8203;2524](mozilla/sccache#2524)
- partial c++20 module support by [@&#8203;TroyKomodo](https://github.com/TroyKomodo) in [#&#8203;2516](mozilla/sccache#2516)
- Add support for `d1nodatetime` & `await:strict` MSVC flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2617](mozilla/sccache#2617)
- msvc: Append the default .pdb extension for the /Fd argument by [@&#8203;ikolomiko](https://github.com/ikolomiko) in [#&#8203;2621](mozilla/sccache#2621)
- msvc: add support for Y-, YI, Zf flags by [@&#8203;AJIOB](https://github.com/AJIOB) in [#&#8203;2663](mozilla/sccache#2663)
- Implement multiple tiers caching with fallback and backfilling by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2581](mozilla/sccache#2581)
- feat: Add loongarch64 support by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2669](mozilla/sccache#2669)
- Add cargo-binstall metadata for prebuilt binary installation by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2647](mozilla/sccache#2647)

##### Fixes

- fix: add Win32\_Security feature to windows-sys dependency by [@&#8203;JulienCote](https://github.com/JulienCote) in [#&#8203;2627](mozilla/sccache#2627)
- Fix GCS initialization by [@&#8203;msuozzo](https://github.com/msuozzo) in [#&#8203;2637](mozilla/sccache#2637)
- fix: exclude `CARGO_ENCODED_RUSTFLAGS` from env var hash by [@&#8203;weihanglo](https://github.com/weihanglo) in [#&#8203;2651](mozilla/sccache#2651)
- fix: handle directories in dep-info source file hashing by [@&#8203;mmastrac](https://github.com/mmastrac) in [#&#8203;2676](mozilla/sccache#2676)

##### CI

- Revert "actions: add security audit workflow" by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2603](mozilla/sccache#2603)
- ci: fix artifact\_failure action when target dir does not exist by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2635](mozilla/sccache#2635)
- ci: set crt-static for riscv64 musl targets by [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) in [#&#8203;2683](mozilla/sccache#2683)
- Add retry for dists docker image build by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2677](mozilla/sccache#2677)

##### Clippy & cleanup

- clippy: fix cloned\_ref\_to\_slice\_refs lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2602](mozilla/sccache#2602)
- clippy: fix semicolon\_if\_nothing\_returned lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2601](mozilla/sccache#2601)
- clippy: fix cloned\_instead\_of\_copied lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2605](mozilla/sccache#2605)
- clippy: fix explicit\_into\_iter\_loop lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2616](mozilla/sccache#2616)
- clippy: fix unnecessary\_semicolon lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2615](mozilla/sccache#2615)
- clippy: fix manual\_string\_new lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2609](mozilla/sccache#2609)
- clippy: fix ptr\_as\_ptr lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2611](mozilla/sccache#2611)
- clippy: fix ref\_option lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2608](mozilla/sccache#2608)
- clippy: fix from\_iter\_instead\_of\_collect lint by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2614](mozilla/sccache#2614)
- Move PreprocessorCacheModeConfig to src/config.rs by [@&#8203;xis19](https://github.com/xis19) in [#&#8203;2604](mozilla/sccache#2604)
- Remove benchmark normalize\_win\_path\_utf8 by [@&#8203;sylvestre](https://github.com/sylvestre) in [#&#8203;2634](mozilla/sccache#2634)
- Move cmake-modules to integration tests by [@&#8203;Felixoid](https://github.com/Felixoid) in [#&#8203;2649](mozilla/sccache#2649)

##### Docs

- docs(Rust.md): Add caveats from README by [@&#8203;TheJanzap](https://github.com/TheJanzap) in [#&#8203;2684](mozilla/sccache#2684)

##### Dependencies

- chore: switch thirtyfour\_sync to thirtyfour by [@&#8203;tottoto](https://github.com/tottoto) in [#&#8203;2613](mozilla/sccache#2613)
- build(deps): bump actions/upload-artifact from 4 to 7 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2632](mozilla/sccache#2632)
- build(deps): bump actions/download-artifact from 5 to 8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2631](mozilla/sccache#2631)
- chore(deps): update rust crate quinn-proto to v0.11.14 by [@&#8203;xtqqczze](https://github.com/xtqqczze) in [#&#8203;2645](mozilla/sccache#2645)

##### New Contributors

- [@&#8203;ikolomiko](https://github.com/ikolomiko) made their first contribution in [#&#8203;2621](mozilla/sccache#2621)
- [@&#8203;JulienCote](https://github.com/JulienCote) made their first contribution in [#&#8203;2627](mozilla/sccache#2627)
- [@&#8203;msuozzo](https://github.com/msuozzo) made their first contribution in [#&#8203;2637](mozilla/sccache#2637)
- [@&#8203;weihanglo](https://github.com/weihanglo) made their first contribution in [#&#8203;2651](mozilla/sccache#2651)
- [@&#8203;wojiushixiaobai](https://github.com/wojiushixiaobai) made their first contribution in [#&#8203;2669](mozilla/sccache#2669)
- [@&#8203;TheJanzap](https://github.com/TheJanzap) made their first contribution in [#&#8203;2684](mozilla/sccache#2684)
- [@&#8203;mmastrac](https://github.com/mmastrac) made their first contribution in [#&#8203;2676](mozilla/sccache#2676)

**Full Changelog**: <mozilla/sccache@v0.14.0...v0.15.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fatal error "Is a directory" when dep-info contains subdirectory paths from proc_macro::tracked::path()

3 participants