Skip to content

refactor(backend): use file util for removals#9206

Merged
jdx merged 1 commit intojdx:mainfrom
risu729:refactor/backend-remove-rmdir
Apr 18, 2026
Merged

refactor(backend): use file util for removals#9206
jdx merged 1 commit intojdx:mainfrom
risu729:refactor/backend-remove-rmdir

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented Apr 17, 2026

Summary

  • add a progress-aware remove helper in src/file.rs
  • use it for backend purge, version uninstall removal, and plugin uninstall removal paths
  • remove duplicate local rmdir closures and now-unused imports

Tests

  • cargo fmt --check
  • git diff --check
  • mise run test:e2e e2e/plugins/test_purge

This PR was generated by an AI coding assistant.

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 introduces a new utility function, remove_all_with_progress, in src/file.rs to standardize directory removal with progress reporting. It refactors src/backend/mod.rs to utilize this utility, removing the local rmdir helper and cleaning up unused imports. The review feedback highlights an opportunity to consolidate logic duplication within the dry-run path and suggests using remove_all instead of remove_all_with_warning to prevent redundant error logging during propagation.

Comment thread src/backend/mod.rs
Comment thread src/file.rs
@risu729 risu729 force-pushed the refactor/backend-remove-rmdir branch from 126a97c to e9a16d9 Compare April 17, 2026 19:43
@risu729 risu729 marked this pull request as ready for review April 17, 2026 19:46
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 17, 2026

Greptile Summary

This PR introduces a remove_all_with_progress utility function in src/file.rs that encapsulates the repeated pattern of "check existence → set progress message → call remove_all_with_warning", then applies it to the purge method, the uninstall_version closure (non-dryrun branch), and the plugin uninstall methods in both asdf_plugin.rs and vfox_plugin.rs, removing the previously inline closures and now-unused display_path imports. The refactoring is functionally equivalent to the code it replaces.

Confidence Score: 5/5

Safe to merge — pure refactoring with no behavioral changes.

All findings are P2 or lower. The new helper is functionally equivalent to the closures it replaces: existence check, progress message, and remove_all_with_warning delegation are preserved in all call sites. No new error-handling differences, no changed imports that affect correctness.

No files require special attention.

Important Files Changed

Filename Overview
src/file.rs Adds remove_all_with_progress: checks path existence, sets the progress message, then delegates to remove_all_with_warning. Clean and correct.
src/backend/mod.rs Replaces inline removal logic in purge with direct remove_all_with_progress calls; uninstall_version keeps its local closure for the dryrun branch and delegates the live path to the new helper. Semantically equivalent.
src/plugins/asdf_plugin.rs Plugin uninstall now calls remove_all_with_progress directly; previously unused display_path import removed. Behavior unchanged.
src/plugins/vfox_plugin.rs Same as asdf_plugin.rs: uninstall delegates to remove_all_with_progress, and previously unused imports are removed.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["purge / uninstall / uninstall_version (live path)"]
    -->|calls| B["remove_all_with_progress(path, pr)"]
    B --> C{path.exists?}
    C -- No --> D["return Ok(())"]
    C -- Yes --> E["pr.set_message('remove {path}')"]
    E --> F["remove_all_with_warning(path)"]
    F --> G{remove_all ok?}
    G -- Yes --> H["return Ok(())"]
    G -- No --> I["warn!('failed to remove...')"]
    I --> J["return Err(e) — propagated via ?"]
Loading

Reviews (1): Last reviewed commit: "refactor(backend): use file util for rem..." | Re-trigger Greptile

@jdx jdx merged commit 9bb4122 into jdx:main Apr 18, 2026
34 of 35 checks passed
@risu729 risu729 deleted the refactor/backend-remove-rmdir branch April 18, 2026 01:33
jdx pushed a commit that referenced this pull request Apr 18, 2026
### 🐛 Bug Fixes

- **(backend)** respect install_before in latest lookup by @risu729 in
[#9193](#9193)
- **(backend)** route explicit latest through stable lookup by @risu729
in [#9228](#9228)
- **(backends)** deprecate b shorthand by @risu729 in
[#9234](#9234)
- **(config)** warn for deprecated env keys by @risu729 in
[#9205](#9205)
- **(config)** treat enable_tools empty as disable-all by @risu729 in
[#9108](#9108)
- **(github)** avoid auth on release asset downloads by @risu729 in
[#9060](#9060)
- **(gitlab)** warn when glab OAuth2 token is expired by @stanhu in
[#9195](#9195)
- **(npm)** honor install_before without day drift by @risu729 in
[#9157](#9157)
- **(npm)** warn on old bun and pnpm for install_before by @risu729 in
[#9232](#9232)
- **(pipx)** honor install_before for uv and pipx installs by @risu729
in [#9190](#9190)
- **(registry)** allow shfmt on Windows by @zeitlinger in
[#9191](#9191)

### 🚜 Refactor

- **(backend)** remove unused rolling release helper by @risu729 in
[#9175](#9175)
- **(backend)** use file util for removals by @risu729 in
[#9206](#9206)

### 📚 Documentation

- **(config)** clarify always_keep_download behavior by @risu729 in
[#9235](#9235)
- **(configuration)** add rust to idiomatic version files by @jjt in
[#9233](#9233)
- **(contributing)** expand contribution guide introduction by
@marianwolf in [#9208](#9208)
- **(github)** document multiple release assets workaround by @risu729
in [#9236](#9236)

### 📦️ Dependency Updates

- update actions/setup-node action to v6 by @renovate[bot] in
[#9183](#9183)
- update dependency @types/node to v25 by @renovate[bot] in
[#9187](#9187)
- update crazy-max/ghaction-import-gpg action to v7 by @renovate[bot] in
[#9186](#9186)
- update actions/cache action to v5 by @renovate[bot] in
[#9181](#9181)
- update amannn/action-semantic-pull-request action to v6 by
@renovate[bot] in [#9184](#9184)
- update apple-actions/import-codesign-certs action to v6 by
@renovate[bot] in [#9185](#9185)
- update dependency eslint to v10 by @renovate[bot] in
[#9200](#9200)
- update dependency toml to v4 by @renovate[bot] in
[#9201](#9201)
- update rust crate reqwest to 0.13 by @renovate[bot] in
[#9171](#9171)
- update ghcr.io/jdx/mise:deb docker digest to 523d826 by @renovate[bot]
in [#9198](#9198)
- update ghcr.io/jdx/mise:alpine docker digest to 05617e0 by
@renovate[bot] in [#9196](#9196)
- update ghcr.io/jdx/mise:rpm docker digest to c1992f9 by @renovate[bot]
in [#9199](#9199)
- update ghcr.io/jdx/mise:copr docker digest to 90db6cd by
@renovate[bot] in [#9197](#9197)
- update taiki-e/install-action digest to 58e8625 by @renovate[bot] in
[#9209](#9209)
- update fedora docker tag to v45 by @renovate[bot] in
[#9213](#9213)
- update docker/setup-buildx-action action to v4 by @renovate[bot] in
[#9212](#9212)
- update docker/metadata-action action to v6 by @renovate[bot] in
[#9211](#9211)
- update docker/login-action action to v4 by @renovate[bot] in
[#9210](#9210)
- update dependency typescript to v6 by @renovate[bot] in
[#9202](#9202)
- update docker/build-push-action action to v7 by @renovate[bot] in
[#9203](#9203)
- update github artifact actions (major) by @renovate[bot] in
[#9215](#9215)
- update rust crate duct to v1 by @renovate[bot] in
[#9220](#9220)
- update rust crate demand to v2 by @renovate[bot] in
[#9219](#9219)
- update rust crate clx to v2 by @renovate[bot] in
[#9218](#9218)
- update nick-fields/retry action to v4 by @renovate[bot] in
[#9217](#9217)
- update jdx/mise-action action to v4 by @renovate[bot] in
[#9216](#9216)
- update rust crate self_update to 0.44 by @renovate[bot] in
[#9174](#9174)
- migrate eslint config to flat format for v10 compat by @jdx in
[#9222](#9222)
- update actions/checkout action to v6 by @renovate[bot] in
[#9182](#9182)
- update rust crate toml to v1 by @renovate[bot] in
[#9225](#9225)
- update rust crate versions to v7 by @renovate[bot] in
[#9226](#9226)
- update rust crate which to v8 by @renovate[bot] in
[#9227](#9227)
- update rust crate rmcp to v1 by @renovate[bot] in
[#9221](#9221)

### 📦 Registry

- add sheldon by @3w36zj6 in
[#9104](#9104)
- add pocketbase by @ranfdev in
[#9123](#9123)
- add worktrunk ([aqua:max-sixty/worktrunk,
cargo:worktrunk](https://github.com/max-sixty/worktrunk,
cargo:worktrunk))#1 by @edouardr in
[#8796](#8796)
- add dependency-check
([aqua:dependency-check/DependencyCheck](https://github.com/dependency-check/DependencyCheck))
by @kapitoshka438 in [#9204](#9204)
- add janet by @ranfdev in
[#9241](#9241)

### New Contributors

- @ranfdev made their first contribution in
[#9241](#9241)
- @jjt made their first contribution in
[#9233](#9233)
- @marianwolf made their first contribution in
[#9208](#9208)
- @edouardr made their first contribution in
[#8796](#8796)

## 📦 Aqua Registry Updates

#### New Packages (3)

- [`LargeModGames/spotatui`](https://github.com/LargeModGames/spotatui)
-
[`android-sms-gateway/cli`](https://github.com/android-sms-gateway/cli)
- [`velero-io/velero`](https://github.com/velero-io/velero)

#### Updated Packages (1)

- [`skim-rs/skim`](https://github.com/skim-rs/skim)
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