Skip to content

fix(task): resolve hanging issue with multiple depends_post#6206

Merged
jdx merged 3 commits intomainfrom
fix/task-depends-post-multiple
Sep 6, 2025
Merged

fix(task): resolve hanging issue with multiple depends_post#6206
jdx merged 3 commits intomainfrom
fix/task-depends-post-multiple

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Sep 6, 2025

Summary

  • Fixed hanging/infinite loop when tasks have multiple depends_post entries
  • The bug was caused by resolve_depends incorrectly iterating through ALL tasks instead of just using the current task's dependencies
  • Added comprehensive e2e test and unit test to prevent regression

The Problem

Previously, when a task had multiple depends_post entries like:

[tasks.baz]
run = "echo baz"
depends_post = ["foo", "bar"]

The task would hang indefinitely due to circular dependencies being created in the dependency graph.

The Fix

Changed resolve_depends in src/task/mod.rs to use only self.depends_post instead of iterating through all tasks_to_run. This ensures each task only uses its own post-dependencies, preventing circular dependencies.

Test plan

  • Added e2e test test_task_depends_post_multiple that reproduces the issue
  • Added unit test to verify the fix
  • Verified existing test_task_depends_post test still passes
  • All task-related tests pass

Fixes: #4398

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings September 6, 2025 12:48
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_depends method 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.

Comment on lines +330 to +333
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))
Copy link

Copilot AI Sep 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link

github-actions bot commented Sep 6, 2025

Hyperfine Performance

mise x -- echo

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%

@jdx jdx force-pushed the fix/task-depends-post-multiple branch from 070f7a6 to c7c0238 Compare September 6, 2025 13:50
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>
@jdx jdx force-pushed the fix/task-depends-post-multiple branch from c7c0238 to e500f9b Compare September 6, 2025 13:50
@jdx jdx merged commit c770cfd into main Sep 6, 2025
10 of 11 checks passed
@jdx jdx deleted the fix/task-depends-post-multiple branch September 6, 2025 14:01
@jdx jdx mentioned this pull request Sep 6, 2025
jdx pushed a commit that referenced this pull request Sep 6, 2025
### 🚀 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)
@jdx jdx mentioned this pull request Sep 6, 2025
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Sep 8, 2025
## [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)
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.

2 participants