Skip to content

fix(aqua): preserve configured file extensions#9611

Merged
jdx merged 4 commits intojdx:mainfrom
risu729:fix/aqua-jena
May 5, 2026
Merged

fix(aqua): preserve configured file extensions#9611
jdx merged 4 commits intojdx:mainfrom
risu729:fix/aqua-jena

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented May 5, 2026

Summary

  • preserve existing Windows file extensions when aqua package files point at .bat scripts
  • use the source file extension for generated Windows destination names instead of always appending .exe
  • avoid doubling version_prefix when rendering aqua file source templates

Notes

  • I checked upstream aqua behavior with mise x aqua -- aqua: apache/jena@jena-5.6.0 installs and runs, while apache/jena@latest is rejected by aqua for this HTTP package.
  • I removed the HTTP HEAD availability workaround. The aqua-registry update PRs for jena-6.0.0 and jena-6.1.0 are still open, so the PR now leaves those unsupported versions alone.

Verification

  • cargo fmt --all -- --check
  • cargo test -q backend::aqua::tests
  • cargo build -q --bin mise
  • mise x aqua -- aqua -c aqua.yaml install with apache/jena@jena-5.6.0, then arq --version => Apache Jena version 5.6.0
  • ./target/debug/mise install aqua:apache/jena@jena-5.6.0, then ./target/debug/mise exec aqua:apache/jena@jena-5.6.0 -- arq --version => Apache Jena version 5.6.0

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 5, 2026

Greptile Summary

This PR fixes three related bugs in the aqua backend's Windows file-extension and version-prefix handling. The changes extract the extension logic into two small helper functions (complete_windows_ext, complete_windows_dst_ext) and add an idempotent version_with_prefix helper to prevent double-prefixing when a stored version string already includes the configured prefix.

  • Extension preservation: complete_windows_ext now guards with path.extension().is_none() before appending .exe, preventing .bat scripts from being renamed to .bat.exe; complete_windows_dst_ext copies the source extension to the destination instead of always forcing .exe.
  • Version-prefix idempotency: version_with_prefix skips prepending the prefix when version.starts_with(prefix), fixing the jena-jena-5.6.0 double-prefix regression for packages like apache/jena.
  • Test coverage: Three focused unit tests are added for each new helper, and the PR description documents manual end-to-end verification with the apache/jena package.

Confidence Score: 5/5

Safe to merge — all three changed behaviours are narrowly scoped, well-tested, and verified end-to-end by the author.

The helpers are straightforward and correct: complete_windows_ext guards on extension().is_none() so existing extensions are preserved; complete_windows_dst_ext mirrors the updated src extension to dst; version_with_prefix is idempotent. The ordering in the closure ensures src already has its final extension when dst is derived, so edge cases like bat/arq.bat → arq.bat and bin/tool → tool.exe are both handled correctly. Unit tests cover the key scenarios and the PR includes manual install verification.

No files require special attention.

Reviews (4): Last reviewed commit: "Merge branch 'main' into fix/aqua-jena" | Re-trigger Greptile

Comment thread src/http.rs Outdated
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request enhances the Aqua backend by adding availability checks for HTTP package versions and refactoring Windows file extension logic into helper functions. It also introduces a head_status method to the HTTP client. The reviewer suggests refactoring head_status to reuse existing client methods to avoid logic duplication and benefit from built-in features like retries and HTTPS fallback.

Comment thread src/http.rs Outdated
@risu729
Copy link
Copy Markdown
Contributor Author

risu729 commented May 5, 2026

CI finished on the latest commit (2775bfe6e). The remaining failures appear unrelated to this aqua/Jena change:

  • benchmark failed before benchmarking because it could not install aqua:sharkdp/hyperfine@latest; the log shows GitHub API 403 rate-limit errors.
  • Linux e2e-0 through e2e-7 failed broadly with GitHub API 403 rate-limit errors across many unrelated installs (ripgrep, pandoc, uv, goreleaser, hyperfine, etc.). The logs also show repeated temp-dir cleanup permission errors (rm: cannot remove ... Permission denied).
  • test-ci failed only as the aggregate result of the failed Linux e2e shards.

The passing checks include build, lint, unit tests, Windows e2e, release/registry checks, Socket checks, and the refreshed Greptile review. The valid head_status review suggestion was addressed in 2775bfe6e and the review threads are resolved.

This comment was generated by an AI coding assistant.

@risu729 risu729 changed the title fix(aqua): handle missing HTTP versions and Windows file extensions fix(aqua): preserve configured file extensions May 5, 2026
@risu729

This comment was marked as outdated.

@risu729 risu729 marked this pull request as ready for review May 5, 2026 19:34
@jdx jdx merged commit 6c3309c into jdx:main May 5, 2026
34 checks passed
@risu729 risu729 deleted the fix/aqua-jena branch May 5, 2026 20:25
mise-en-dev added a commit that referenced this pull request May 7, 2026
### 🚀 Features

- **(aqua)** support registry libc variants by @jdx in
[#9652](#9652)
- **(bin-paths)** add executable names output by @risu729 in
[#9617](#9617)

### 🐛 Bug Fixes

- **(aqua)** preserve configured file extensions by @risu729 in
[#9611](#9611)
- **(aqua)** support registry file links by @risu729 in
[#9610](#9610)
- **(backend)** reject bare package backend names by @risu729 in
[#9608](#9608)
- **(backend)** apply inline tool option overrides by @risu729 in
[#9306](#9306)
- **(backend)** skip versions host for local tool opts by @risu729 in
[#9568](#9568)
- **(github)** chmod explicit archive bin by @risu729 in
[#9609](#9609)
- **(install)** skip remote-versions refresh in prefer-offline mode by
@jdx in [#9627](#9627)
- **(lock)** scope targets to active project root by @risu729 in
[#9319](#9319)
- **(lockfile)** respect existing platforms during auto-lock by @jdx in
[#9621](#9621)
- **(pipx)** filter yanked pypi releases by @risu729 in
[#9607](#9607)
- **(pipx)** declare python as a backend dependency by @jdx in
[#9678](#9678)
- **(schema)** update refs to $defs in mise-registry-tool.json by
@risu729 in [#9671](#9671)
- **(task)** terminate parallel siblings on failure via process groups
by @jdx in [#9655](#9655)
- **(task)** stable MISE_PROJECT_ROOT for monorepo tasks, add
MISE_MONOREPO_ROOT by @jdx in
[#9657](#9657)
- **(trust)** run enter hooks after trusting config by @risu729 in
[#9634](#9634)
- **(ui)** stop clearing screen for prompts by @jdx in
[#9619](#9619)
- use /bin/cp on macos by @pdehlke in
[#9656](#9656)

### 🚜 Refactor

- **(aqua)** store aqua var defaults as strings by @risu729 in
[#9645](#9645)
- **(config)** support structured TOML values in registry backend
options by @risu729 in [#9584](#9584)
- **(deps)** remove serde_derive dependency by @risu729 in
[#9670](#9670)
- **(deps)** remove anyhow dependency by @risu729 in
[#9661](#9661)
- **(deps)** use std::sync::LazyLock instead of once_cell::Lazy by
@risu729 in [#9668](#9668)
- **(schema)** generate task schema from mise schema by @risu729 in
[#9581](#9581)
- **(schema)** reuse task props with unevaluatedProperties by @risu729
in [#9582](#9582)
- **(schema)** reuse registry common types by @risu729 in
[#9648](#9648)
- **(schema)** reuse plugin script config by @risu729 in
[#9647](#9647)
- **(schema)** use $defs in schema files by @risu729 in
[#9646](#9646)

### 📚 Documentation

- **(node)** add tips for enabling node idiomatic by @fu050409 in
[#9675](#9675)

### 🧪 Testing

- **(cli)** remove nondeterministic tool depends assertion by @risu729
in [#9633](#9633)
- **(e2e)** pin uv to 0.11.8 around astral-sh/uv#19278 by @jdx in
[#9618](#9618)
- **(e2e)** wait for docker env cleanup by @risu729 in
[#9631](#9631)
- **(zig)** use official zig instead of mach mirror by @jdx in
[#9659](#9659)

### 📦️ Dependency Updates

- fall through to hash check when providers have no outputs by @jdx in
[#9622](#9622)
- bump Cargo.lock by @jdx in
[#9625](#9625)

### 📦 Registry

- remove registry depends by @risu729 in
[#9571](#9571)
- add code-review-graph (pipx:code-review-graph) by @chautruonglong in
[#9673](#9673)

### Chore

- **(ci)** split large registry test-tool changes by @risu729 in
[#9628](#9628)
- **(ci)** make perf script robust to runner noise by @jdx in
[#9635](#9635)
- **(ci)** skip hyperfine comments without permission by @risu729 in
[#9629](#9629)

### New Contributors

- @chautruonglong made their first contribution in
[#9673](#9673)
- @pdehlke made their first contribution in
[#9656](#9656)

## 📦 Aqua Registry Updates

### New Packages (5)

-
[`anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli)
- [`crates.io/wasmi_cli`](https://github.com/wasmi-labs/wasmi)
- [`openclaw/gogcli`](https://github.com/openclaw/gogcli)
- `racket-lang.org/racket-minimal`
- [`runs-on/cli`](https://github.com/runs-on/cli)

### Updated Packages (13)

- [`UpCloudLtd/upcloud-cli`](https://github.com/UpCloudLtd/upcloud-cli)
- [`aristocratos/btop`](https://github.com/aristocratos/btop)
- [`dprint/dprint`](https://github.com/dprint/dprint)
- [`j178/prek`](https://github.com/j178/prek)
- [`jdx/hk`](https://github.com/jdx/hk)
- [`jdx/mise`](https://github.com/jdx/mise)
- [`jdx/usage`](https://github.com/jdx/usage)
- [`jreleaser/jreleaser`](https://github.com/jreleaser/jreleaser)
-
[`jreleaser/jreleaser/standalone`](https://github.com/jreleaser/jreleaser)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`suzuki-shunsuke/cmdx`](https://github.com/suzuki-shunsuke/cmdx)
- [`suzuki-shunsuke/ghir`](https://github.com/suzuki-shunsuke/ghir)
- [`twpayne/chezmoi`](https://github.com/twpayne/chezmoi)
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