fix: failing rebuild of runtime symlinks for shared tools#8647
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses a critical issue where installing tools with the Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
Greptile SummaryThis PR fixes a bug where installing a tool with The fix introduces an Key observations:
Confidence Score: 4/5
Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[init_tools scans install dirs] --> B{User-level dir?}
B -- yes --> C[Create InstallStateTool\ninstalls_path = Some user_dir]
B -- no --> D{Shared/system dir?}
D -- yes, tool not yet seen --> E[Create InstallStateTool\ninstalls_path = Some shared_dir]
D -- yes, tool already seen --> F[Merge versions only\ninstalls_path unchanged]
D -- no, plugin only --> G[Create InstallStateTool\ninstalls_path = None]
C --> H[From InstallStateTool for BackendArg]
E --> H
F --> H
G --> H
H --> I[new_raw sets installs_path\n= dirs::INSTALLS default user path]
I --> J{ist.installs_path Some?}
J -- yes --> K[Override installs_path\nwith stored path]
J -- no --> L[Keep default user path]
K --> M[BackendArg.installs_path\n= actual on-disk path]
L --> N[BackendArg.installs_path\n= default user path]
style E fill:#90EE90
style K fill:#90EE90
style M fill:#90EE90
Last reviewed commit: "fix: failing rebuild..." |
There was a problem hiding this comment.
Code Review
The pull request effectively addresses the issue of failing runtime symlink rebuilds by correctly propagating the installs_path from InstallStateTool to BackendArg. The changes involve adding a new field to the InstallStateTool struct and ensuring its proper initialization and usage during the conversion to BackendArg. The modifications are clear, concise, and directly resolve the described bug.
There was a problem hiding this comment.
Pull request overview
Fixes runtime symlink rebuild failures for tools installed via --system/--shared by ensuring the resolved backend uses the correct installs directory (instead of falling back to the default user installs dir).
Changes:
- Track the concrete installs directory for each discovered installed tool in
InstallStateTool. - Propagate
InstallStateTool.installs_pathintoBackendArgso runtime symlink rebuild targets the correct directory.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
src/toolset/install_state.rs |
Adds installs_path to InstallStateTool and populates it for tools discovered in local and shared installs directories. |
src/cli/args/backend_arg.rs |
Updates From<InstallStateTool> to override BackendArg.installs_path when install state provides a concrete installs directory. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let mut tool = Self::new_raw( | ||
| short, | ||
| ist.full, | ||
| tool_name, | ||
| opts, | ||
| BackendResolution::new(ist.explicit_backend), | ||
| ) | ||
| ); | ||
| if let Some(install_path) = ist.installs_path { | ||
| tool.installs_path = install_path; | ||
| } | ||
| tool |
### 🐛 Bug Fixes - **(config)** resolve trust hash collision for same-name directories by @tdragon in [#8628](#8628) - **(docs)** fix width of tools table by @himkt in [#8625](#8625) - **(docs)** prevent homepage hero atmosphere overflow by @nygmaaa in [#8642](#8642) - **(doctor)** detect PATH ordering issues when mise is activated by @jdx in [#8585](#8585) - **(git)** use origin as remote name by @bentinata in [#8626](#8626) - **(installer)** normalize current version before comparison by @tak848 in [#8649](#8649) - **(lockfile)** Resolve symlink when updating lockfiles by @chancez in [#8589](#8589) - **(python)** verify checksums for precompiled binary downloads by @malept in [#8593](#8593) - **(rust)** resolve relative CARGO_HOME/RUSTUP_HOME to absolute paths by @simonepri in [#8604](#8604) - **(task)** correctly resolve task name for _default files with extensions by @youta1119 in [#8646](#8646) - **(tasks)** global file tasks not properly marked as such by @roele in [#8618](#8618) - **(tasks)** handle broken pipe in table print and task completion output by @vmaleze in [#8608](#8608) - use dark/light logo variants in README for GitHub dark mode by @jdx in [#8656](#8656) - failing rebuild of runtime symlinks for shared tools by @roele in [#8647](#8647) - add spaces around current element operator in flutter version_expr by @roele in [#8616](#8616) - complete task arguments correctly by @KevSlashNull in [#8601](#8601) ### 📚 Documentation - switch body font to DM Sans and darken dark mode background by @jdx in [6e3ad34](6e3ad34) - use Cormorant Garamond for headers and Roc Grotesk for body text by @jdx in [010812a](010812a) - resolve chaotic heading hierarchy in task-arguments.md by @muzimuzhi in [#8644](#8644) ### 🧪 Testing - fix test_java and mark as slow by @roele in [#8634](#8634) ### 📦️ Dependency Updates - update docker/dockerfile:1 docker digest to 4a43a54 by @renovate[bot] in [#8657](#8657) - update ghcr.io/jdx/mise:alpine docker digest to 2584470 by @renovate[bot] in [#8658](#8658) ### 📦 Registry - add viteplus (npm:vite-plus) by @risu729 in [#8594](#8594) - remove backend.options for podman by @roele in [#8633](#8633) - add pi.dev coding agent by @dector in [#8635](#8635) - add ormolu ([github:tweag/ormolu](https://github.com/tweag/ormolu)) by @3w36zj6 in [#8617](#8617) - use version_expr for dart and sort versions by @roele in [#8631](#8631) ### New Contributors - @bentinata made their first contribution in [#8626](#8626) - @tdragon made their first contribution in [#8628](#8628) - @nygmaaa made their first contribution in [#8642](#8642) - @youta1119 made their first contribution in [#8646](#8646) - @chancez made their first contribution in [#8589](#8589) - @dector made their first contribution in [#8635](#8635) - @tak848 made their first contribution in [#8649](#8649) ## 📦 Aqua Registry Updates #### New Packages (5) - [`acsandmann/rift`](https://github.com/acsandmann/rift) - [`alltuner/mise-completions-sync`](https://github.com/alltuner/mise-completions-sync) - [`berbicanes/apiark`](https://github.com/berbicanes/apiark) - [`gitlab.com/graphviz/graphviz`](https://github.com/gitlab.com/graphviz/graphviz) - [`jorgelbg/pinentry-touchid`](https://github.com/jorgelbg/pinentry-touchid) #### Updated Packages (7) - [`UpCloudLtd/upcloud-cli`](https://github.com/UpCloudLtd/upcloud-cli) - [`aquaproj/registry-tool`](https://github.com/aquaproj/registry-tool) - [`go-swagger/go-swagger`](https://github.com/go-swagger/go-swagger) - [`gopinath-langote/1build`](https://github.com/gopinath-langote/1build) - [`sassman/t-rec-rs`](https://github.com/sassman/t-rec-rs) - [`sharkdp/fd`](https://github.com/sharkdp/fd) - [`temporalio/cli`](https://github.com/temporalio/cli)
Currently installing a tool with
--systemfails at rebuilding the runtime symlinks because the installs path is pointing to a wrong directory. The install state reads the tools from the shared directory but does not contain an install path which leads to aBackendArgusing the default (user) install directory.