fix(task): resolve hanging issue with multiple depends_post#6206
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR fixes a hanging issue that occurred when tasks have multiple depends_post entries by correcting the dependency resolution logic in the task execution system.
Key changes:
- Fixed
resolve_dependsmethod to use only the current task's dependencies instead of iterating through all tasks - Added comprehensive e2e and unit tests to prevent regression
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/task/mod.rs | Fixed dependency resolution logic and added unit test for the fix |
| e2e/tasks/test_task_depends_post_multiple | Added e2e test to verify multiple depends_post entries work correctly |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| let depends_post = self | ||
| .depends_post | ||
| .iter() | ||
| .flat_map(|t| t.depends_post.iter().map(|td| match_tasks(&tasks, td))) | ||
| .map(|td| match_tasks(&tasks, td)) |
There was a problem hiding this comment.
[nitpick] The variable name depends_post is misleading here. Since this is now using self.depends_post instead of iterating through all tasks, consider renaming it to self_depends_post or current_task_depends_post to clarify that it only contains dependencies for the current task.
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 x -- echo |
18.7 ± 0.6 | 18.2 | 27.9 | 1.00 |
mise x -- echo |
18.7 ± 0.2 | 18.2 | 20.0 | 1.00 ± 0.03 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 env |
18.2 ± 0.3 | 17.6 | 21.3 | 1.00 |
mise env |
18.3 ± 0.7 | 17.5 | 24.9 | 1.01 ± 0.04 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 hook-env |
17.9 ± 0.3 | 17.4 | 21.9 | 1.01 ± 0.02 |
mise hook-env |
17.8 ± 0.3 | 17.3 | 21.4 | 1.00 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2025.9.2 ls |
16.5 ± 0.8 | 15.8 | 27.2 | 1.00 |
mise ls |
16.6 ± 0.7 | 15.8 | 25.1 | 1.00 ± 0.07 |
xtasks/test/perf
| Command | mise-2025.9.2 | mise | Variance |
|---|---|---|---|
| install (cached) | 167ms | ✅ 102ms | +63% |
| ls (cached) | 63ms | 63ms | +0% |
| bin-paths (cached) | 67ms | 68ms | -1% |
| task-ls (cached) | 495ms | 473ms | +4% |
✅ Performance improvement: install cached is 63%
070f7a6 to
c7c0238
Compare
Previously, resolve_depends incorrectly iterated through ALL tasks in tasks_to_run to collect post-dependencies, instead of using only the current task's depends_post. This created circular dependencies when multiple depends_post were specified, causing infinite loops. The fix ensures each task only uses its own depends_post configuration, preventing the circular dependencies that caused the hanging behavior. Fixes: #4398 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
c7c0238 to
e500f9b
Compare
### 🚀 Features - **(backend)** improve http error when platform url missing; list available platforms by @jdx in [#6200](#6200) ### 🐛 Bug Fixes - **(backend)** preserve arch underscores in platform keys by @jdx in [#6202](#6202) - **(task)** resolve hanging issue with multiple depends_post by @jdx in [#6206](#6206) - couldn't download node binary in Alpine, even if it exists in the mirror url by @Hazer in [#5972](#5972) - **breaking** use config_root for env._.path by @jdx in [#6204](#6204) - bugfix for paths that include spaces by @karim-elkholy in [#6210](#6210) ### 📚 Documentation - improve release notes generation by @jdx in [#6197](#6197) - fix release changelog contributor reporting by @jdx in [#6201](#6201) ### Chore - use fine-grained gh token by @jdx in [#6208](#6208) - use settings.local.json for claude config by @jdx in [fd0fba9](fd0fba9) ### New Contributors - @karim-elkholy made their first contribution in [#6210](#6210) - @Hazer made their first contribution in [#5972](#5972)
## [2025.9.5](https://github.com/jdx/mise/compare/v2025.9.4..v2025.9.5) - 2025-09-06 ### 🚀 Features - **(task)** add timeout support for task execution by @jdx in [#6216](jdx/mise#6216) - **(task)** sub-tasks in run lists by @jdx in [#6212](jdx/mise#6212) ### Chore - fix npm publish action by @jdx in [14f4b09](jdx/mise@14f4b09) - fix cloudflare release action by @jdx in [00afa25](jdx/mise@00afa25) - fix git-cliff for release notes by @jdx in [15a9aed](jdx/mise@15a9aed) ## [2025.9.4](https://github.com/jdx/mise/compare/v2025.9.3..v2025.9.4) - 2025-09-06 ### Chore - fix git-cliff on release by @jdx in [3c388f2](jdx/mise@3c388f2) ## [2025.9.3](https://github.com/jdx/mise/compare/v2025.9.2..v2025.9.3) - 2025-09-06 ### 🚀 Features - **(backend)** improve http error when platform url missing; list available platforms by @jdx in [#6200](jdx/mise#6200) - **(cli)** support scoped packages for all backend types by @earlgray283 in [#6213](jdx/mise#6213) - **(http)** add URL replacement feature for HTTP requests by @ThomasSteinbach in [#6207](jdx/mise#6207) ### 🐛 Bug Fixes - **(backend)** preserve arch underscores in platform keys by @jdx in [#6202](jdx/mise#6202) - **(task)** resolve hanging issue with multiple depends_post by @jdx in [#6206](jdx/mise#6206) - couldn't download node binary in Alpine, even if it exists in the mirror url by @Hazer in [#5972](jdx/mise#5972) - **breaking** use config_root for env._.path by @jdx in [#6204](jdx/mise#6204) - bugfix for paths that include spaces by @karim-elkholy in [#6210](jdx/mise#6210) ### 📚 Documentation - improve release notes generation by @jdx in [#6197](jdx/mise#6197) - fix release changelog contributor reporting by @jdx in [#6201](jdx/mise#6201) ### Chore - use fine-grained gh token by @jdx in [#6208](jdx/mise#6208) - use settings.local.json for claude config by @jdx in [fd0fba9](jdx/mise@fd0fba9) ### New Contributors - @ThomasSteinbach made their first contribution in [#6207](jdx/mise#6207) - @earlgray283 made their first contribution in [#6213](jdx/mise#6213) - @karim-elkholy made their first contribution in [#6210](jdx/mise#6210) - @Hazer made their first contribution in [#5972](jdx/mise#5972) ## [2025.9.2](https://github.com/jdx/mise/compare/v2025.9.1..v2025.9.2) - 2025-09-05 ### 🐛 Bug Fixes - **(ci)** set required environment variables for npm publishing by @jdx in [#6189](jdx/mise#6189) - **(release)** clean up extra newlines in release notes formatting by @jdx in [#6190](jdx/mise#6190) - **(release)** add proper newline after New Contributors section in cliff template by @jdx in [#6194](jdx/mise#6194) - **(release)** fix changelog formatting to remove extra blank lines by @jdx in [#6195](jdx/mise#6195) - **(release)** restore proper newline after New Contributors section by @jdx in [#6196](jdx/mise#6196) ### 🚜 Refactor - **(ci)** split release workflow into separate specialized workflows by @jdx in [#6193](jdx/mise#6193) ### Chore - **(release)** require GitHub Actions environment for release-plz script by @jdx in [#6191](jdx/mise#6191) ## [2025.9.1](https://github.com/jdx/mise/compare/v2025.9.0..v2025.9.1) - 2025-09-05 ### 🐛 Bug Fixes - python nested venv path order by @elvismacak in [#6124](jdx/mise#6124) - resolve immutable release workflow and VERSION file timing issues by @jdx in [#6187](jdx/mise#6187) ### New Contributors - @elvismacak made their first contribution in [#6124](jdx/mise#6124) ## [2025.9.0](https://github.com/jdx/mise/compare/v2025.8.21..v2025.9.0) - 2025-09-05 ### 🚀 Features - allow set/unset backend aliases by @roele in [#6172](jdx/mise#6172) ### 🐛 Bug Fixes - **(aqua)** respect order of asset_strs by @risu729 in [#6143](jdx/mise#6143) - **(java)** treat freebsd as linux (assuming linux compatability) by @roele in [#6161](jdx/mise#6161) - **(nushell/windows)** Fix $env.PATH getting converted to a string by @zackyancey in [#6157](jdx/mise#6157) - **(sync)** create uv_versions_path dir if it doesn't exist by @risu729 in [#6142](jdx/mise#6142) - **(ubi)** show relevent error messages for v-prefixed tags by @risu729 in [#6183](jdx/mise#6183) - remove nodejs/golang alias migrate code by @risu729 in [#6141](jdx/mise#6141) - mise activate not working on powershell v5 by @L0RD-ZER0 in [#6168](jdx/mise#6168) ### 📚 Documentation - **(task)** remove word "additional" to avoid confusions by @risu729 in [#6159](jdx/mise#6159) ### Chore - update Cargo.lock by @risu729 in [#6184](jdx/mise#6184) ### New Contributors - @zackyancey made their first contribution in [#6157](jdx/mise#6157)
Summary
depends_postentriesresolve_dependsincorrectly iterating through ALL tasks instead of just using the current task's dependenciesThe Problem
Previously, when a task had multiple
depends_postentries like:The task would hang indefinitely due to circular dependencies being created in the dependency graph.
The Fix
Changed
resolve_dependsinsrc/task/mod.rsto use onlyself.depends_postinstead of iterating through alltasks_to_run. This ensures each task only uses its own post-dependencies, preventing circular dependencies.Test plan
test_task_depends_post_multiplethat reproduces the issuetest_task_depends_posttest still passesFixes: #4398
🤖 Generated with Claude Code