Skip to content

fix: stop deleting $CARGO_HOME during uninstall#4861

Open
Cloud0310 wants to merge 9 commits into
rust-lang:mainfrom
Cloud0310:main
Open

fix: stop deleting $CARGO_HOME during uninstall#4861
Cloud0310 wants to merge 9 commits into
rust-lang:mainfrom
Cloud0310:main

Conversation

@Cloud0310

Copy link
Copy Markdown
Contributor

fix #285
This PR fix the cargo bin nuke and the path removing possilble toutoc issue.
Here's the implementation details:

  • compare cargo bin dir content to rustup binary, if it's a link, remove it
  • then, we remove the rustup binary, on success, we then remove the cargo bin from path

This prevents rustup self uninstall from nuking out the $CARGO_HOME/bin and possible toctou problem of removing up the path.

Comment thread tests/suite/cli_self_upd.rs
@Cloud0310 Cloud0310 marked this pull request as ready for review May 19, 2026 10:37
@Cloud0310

Cloud0310 commented May 19, 2026

Copy link
Copy Markdown
Contributor Author

I think I may need more tests against this PR, this includes:

  • $CARGO_HOME/bin with unrelated files
  • empty bin cleanup test

Should there be more tests? Please let me know @FranciscoTGouveia @rami3l .

Comment thread src/cli/self_update/unix.rs Outdated
Comment thread src/cli/self_update/unix.rs Outdated
Comment thread tests/suite/cli_self_upd.rs Outdated
Comment thread src/cli/self_update.rs Outdated
Comment thread src/cli/self_update/unix.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update.rs Outdated
Comment thread src/cli/self_update.rs Outdated
@Cloud0310

Copy link
Copy Markdown
Contributor Author

I've add more tests about the PR here. Please review.

Comment thread src/cli/self_update/unix.rs Outdated

@rami3l rami3l left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM modulo some tiny nits, nice work :D

View changes since this review

Comment thread src/cli/self_update.rs Outdated
Comment thread tests/suite/cli_self_upd.rs Outdated
Comment thread tests/suite/cli_self_upd.rs
@Cloud0310 Cloud0310 force-pushed the main branch 2 times, most recently from 4a4880a to 971dffa Compare May 22, 2026 08:13
Cloud0310 added a commit to Cloud0310/rustup that referenced this pull request May 22, 2026
Avoid removing $CARGO_HOME when running uninstall cleanup.

Combine all follow-up work for PR rust-lang#4861:

- keep $CARGO_HOME/bin when it is non-empty

- cover cargo bin cleanup behavior in uninstall tests

- update uninstall cleanup comments and related docs

- rename cleanup internals for clearer intent
Cloud0310 added a commit to Cloud0310/rustup that referenced this pull request May 22, 2026
Avoid removing $CARGO_HOME when running uninstall cleanup.

Combine all follow-up work for PR rust-lang#4861:

- keep $CARGO_HOME/bin when it is non-empty

- cover cargo bin cleanup behavior in uninstall tests

- update uninstall cleanup comments and related docs

- rename cleanup internals for clearer intent
@rustbot

This comment has been minimized.

Cloud0310 added a commit to Cloud0310/rustup that referenced this pull request May 22, 2026
Avoid removing $CARGO_HOME when running uninstall cleanup.

Combine all follow-up work for PR rust-lang#4861:

- keep $CARGO_HOME/bin when it is non-empty

- cover cargo bin cleanup behavior in uninstall tests

- update uninstall cleanup comments and related docs

- rename cleanup internals for clearer intent

@djc djc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think this PR needs a bunch of work, it seems to have a lot of changes together in a single commit that are pretty messy. It would be good if the commit history made it clear that there are a sequence of smaller changes being made.

View changes since this review

Comment thread src/cli/self_update/unix.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update/windows.rs Outdated
Comment thread src/cli/self_update/windows.rs
Cloud0310 added a commit to Cloud0310/rustup that referenced this pull request May 22, 2026
Avoid removing $CARGO_HOME when running uninstall cleanup.

Combine all follow-up work for PR rust-lang#4861:

- keep $CARGO_HOME/bin when it is non-empty

- cover cargo bin cleanup behavior in uninstall tests

- update uninstall cleanup comments and related docs

- rename cleanup internals for clearer intent
Cloud0310 added a commit to Cloud0310/rustup that referenced this pull request May 22, 2026
Avoid removing $CARGO_HOME when running uninstall cleanup.

Combine all follow-up work for PR rust-lang#4861:

- keep $CARGO_HOME/bin when it is non-empty

- cover cargo bin cleanup behavior in uninstall tests

- update uninstall cleanup comments and related docs

- rename cleanup internals for clearer intent
@rami3l

rami3l commented Jun 1, 2026

Copy link
Copy Markdown
Member

@Cloud0310 Since your PR needs more work, I've marked this PR as draft.

Please address or at least respond to all open threads before marking this PR as "ready for review" again, at which point the team will return for another round of review, thanks 🙏

@Cloud0310 Cloud0310 force-pushed the main branch 7 times, most recently from 2acb9ec to 1c41abe Compare June 5, 2026 16:09
@Cloud0310 Cloud0310 force-pushed the main branch 2 times, most recently from 781981d to 197f611 Compare June 6, 2026 17:04

@rami3l rami3l left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is looking much better than before! I have a few final nits; address them in addition to the remaining ones and we should be good to go 🙏

View changes since this review

Comment thread src/cli/self_update.rs Outdated
Comment thread src/cli/self_update/unix.rs Outdated
@Cloud0310 Cloud0310 force-pushed the main branch 4 times, most recently from dac53d8 to 3c0d7e4 Compare June 7, 2026 15:43
@Cloud0310 Cloud0310 force-pushed the main branch 2 times, most recently from af1c3ac to 60c433c Compare June 8, 2026 18:02
@Cloud0310 Cloud0310 marked this pull request as ready for review June 8, 2026 18:04
@Cloud0310 Cloud0310 changed the title fix!: stop deleting $CARGO_HOME during uninstall fix: stop deleting $CARGO_HOME during uninstall Jun 8, 2026
Comment thread src/cli/self_update.rs
// the running executable and on Windows can't be unlinked until the process exits.
// see: windows::{complete_windows_uninstall,clean_cargo_bin}
#[cfg(windows)]
windows::clean_cargo_bin(no_modify_path, process)?;

@rami3l rami3l Jun 8, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I have the impression that we are first adding this line in a previous commit, then removing and re-adding it here?

View changes since the review

Comment thread src/cli/self_update.rs Outdated
/// 2. Remove cargo home except $CARGO_HOME/bin
/// 3. Remove other tools in $CARGO_HOME/bin.
/// 4. Remove rustup binary file and links to rustup.
/// 5. Upon successfully removing $CARGO_HOME/bin, clean up $PATH.

@rami3l rami3l Jun 8, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You didn't mention the fact that it also removes $CARGO_HOME as the final step (in this commit).

View changes since the review

.filter_map(|entry| {
let path = entry.unwrap().path();
let name = path.file_name()?.to_str()?;
// On Windows, this binary is cleaned up on exit

@rami3l rami3l Jun 8, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This part should also be absorbed to the commit where the next line is introduced.

View changes since the review

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.

Stop nuking $CARGO_HOME (~/.cargo) on rustup self uninstall

5 participants