Skip to content

fix(source): incorrect duplicate package warning#17204

Merged
weihanglo merged 2 commits into
rust-lang:masterfrom
hirehamir:fix/incorrect-duplicate-package-warnings
Jul 12, 2026
Merged

fix(source): incorrect duplicate package warning#17204
weihanglo merged 2 commits into
rust-lang:masterfrom
hirehamir:fix/incorrect-duplicate-package-warnings

Conversation

@hirehamir

Copy link
Copy Markdown
Contributor

What Does This PR Try to Resolve?

Fixes #15981

How to Test and Review This PR?

Reverting the change to

src/cargo/sources/path.rs

makes the added regression test fail

cargo test --test testsuite no_duplicate_package_warning_with_dotdot_cargo_home

@rustbot rustbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 12, 2026
@rustbot

rustbot commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

Thanks for the pull request, and welcome! The Rust Project is excited to review your changes, and you should hear from @epage (or someone else) some time within the next two weeks.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate:

  • @rustbot author: the review is finished, PR author should check the comments and take action accordingly
  • @rustbot review: the author is ready for a review, this PR will be queued again in the reviewer's queue
Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: @ehuss, @epage, @weihanglo
  • @ehuss, @epage, @weihanglo expanded to ehuss, epage, weihanglo
  • Random selection from ehuss, epage, weihanglo

Comment thread tests/testsuite/git.rs
@hirehamir
hirehamir force-pushed the fix/incorrect-duplicate-package-warnings branch from 8f6821d to d833d00 Compare July 12, 2026 06:41
@hirehamir
hirehamir requested a review from weihanglo July 12, 2026 06:47

@weihanglo weihanglo 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.

@weihanglo
weihanglo added this pull request to the merge queue Jul 12, 2026
Merged via the queue into rust-lang:master with commit 5bf4c0c Jul 12, 2026
29 checks passed
@rustbot rustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 12, 2026
@hirehamir
hirehamir deleted the fix/incorrect-duplicate-package-warnings branch July 13, 2026 00:04
@hirehamir

Copy link
Copy Markdown
Contributor Author

You're welcome!

@epage

epage commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Thanks for the fix!

Something we had overlooked is that we tend to use normalize_paths on our exteriors and then assume things are fine inside. So in this case, we could move the call normalize_paths to

  • when we create the recursive path source:
    let checkout_path = self
    .gctx
    .git_checkouts_path()
    .join(&self.ident)
    .join(short_id.as_str());
    let checkout_path = checkout_path.into_path_unlocked();
    db.copy_to(actual_rev, &checkout_path, self.gctx, self.quiet)?;
    let source_id = self
    .source_id
    .borrow()
    .with_git_precise(Some(actual_rev.to_string()));
    let path_source = RecursivePathSource::new(&checkout_path, source_id, self.gctx);
  • inside the call of git_checkouts_path
  • our creation of homedir

Granted, with that last one, the fact that it doesn't seem to already be done has me wondering if there is a reason.

@weihanglo

Copy link
Copy Markdown
Member

BTW, I remembered there was a hack that people want to force cargo not to canonicalize two different git source sharing the same URL in [patch]. Path normalization here might close a door for some variants of that hack I feel like.

@epage

epage commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

At least the areas of code I looked at for normalization would be independent of the git soucce URL. At these stages, we are dealing with the homedir, our fixed directory names, and our hashed directory names.

@hirehamir

Copy link
Copy Markdown
Contributor Author

That makes sense. I'll see if I can open up a follow-up pull request that moves this to homedir.

pull Bot pushed a commit to weiyilai/cargo that referenced this pull request Jul 18, 2026
# What Does This PR Try to Resolve?

This is a follow-up to rust-lang#17204.

That fix normalized inside `read_packages`.

As noted in review, Cargo prefers to normalize at the exterior and
assume interiors are clean.

This change moves the `normalize_path` to `homedir`, and removes the
interior normalization.

# How to Test and Review This PR?

- `config_symlink_home_duplicate_load` and
`install_git_with_symlink_home` pass. Symlink handling appears
undisturbed.
- `no_duplicate_package_warning_with_dotdot_cargo_home` (added in
rust-lang#17204) still passes. The exterior placement fixes the same issue.

```
cargo test --test testsuite -- no_duplicate_package_warning_with_dotdot_cargo_home config_symlink_home_duplicate_load install_git_with_symlink_home
```
rust-bors Bot pushed a commit to rust-lang/rust that referenced this pull request Jul 18, 2026
Update cargo submodule

29 commits in 59800466c5c41c444d264b1010b4d57e85a7117f..3efb1f477e99b42974b982d939fd100303cdf7db
2026-07-07 15:52:22 +0000 to 2026-07-17 23:53:19 +0000
- refactor(context): normalize in `homedir` instead (rust-lang/cargo#17222)
- chore(ci): reflect doc folder move in book deployment (rust-lang/cargo#17235)
- refactor(ops): Have cargo-metadata's ops match the command name (rust-lang/cargo#17233)
- chore: Flatten src (rust-lang/cargo#17231)
- chore: Flatten `src` (rust-lang/cargo#17230)
- chore(ci): remove stale libsecret packages (rust-lang/cargo#17229)
- perf: Lazily initialize git2 fetch transports  (rust-lang/cargo#17226)
- test(trim-paths): re-enable lldb debugger tests  (rust-lang/cargo#17223)
- Include SBOM outputs in fingerprints (rust-lang/cargo#17216)
- Update cfg_aliases to 0.2.2 (rust-lang/cargo#17225)
- test(trim-paths): exercise GDB on windows-gnu (rust-lang/cargo#17221)
- feat(profile): Disable incremental compilation under CI by default (rust-lang/cargo#17220)
- Remove myself from review rotation (rust-lang/cargo#17219)
- Fix typo in comment in sync (rust-lang/cargo#17217)
- docs(ref): Improve handing of built-in profiles (rust-lang/cargo#17213)
- fix: dont apply host-config gating to stable behavior (rust-lang/cargo#17198)
- chore(deps): update msrv (rust-lang/cargo#17192)
- test: fix race in cargo_compile_with_invalid_code_in_deps (rust-lang/cargo#17203)
- Rename `-Zno-embed-metadata` to `-Zembed-metadata=no` (rust-lang/cargo#17149)
- fix(source): incorrect duplicate package warning (rust-lang/cargo#17204)
- Fix manifest schema generation: `TomlDebugInfo` enum-variants doesn't renamed (rust-lang/cargo#17202)
- Reduce library search path length in new build dir layout (rust-lang/cargo#17191)
- fix(install): Move --debug to Compilation options (rust-lang/cargo#17199)
- chore(ci): dogfood `build.warnings` (rust-lang/cargo#17195)
- docs(lints): Better match clippy in lint section titles (rust-lang/cargo#17190)
- chore: bump to 0.100.0; update changelog (rust-lang/cargo#17189)
- docs(ref): Clarify MSRV for lints (rust-lang/cargo#17184)
- docs(report): add missing entry for `cargo report future-incompatibilities` (rust-lang/cargo#17188)
- Reduce rustc `-L` args used in the new `build-dir` layout (rust-lang/cargo#17168)
rust-bors Bot pushed a commit to rust-lang/rust that referenced this pull request Jul 18, 2026
Update cargo submodule

29 commits in 59800466c5c41c444d264b1010b4d57e85a7117f..3efb1f477e99b42974b982d939fd100303cdf7db
2026-07-07 15:52:22 +0000 to 2026-07-17 23:53:19 +0000
- refactor(context): normalize in `homedir` instead (rust-lang/cargo#17222)
- chore(ci): reflect doc folder move in book deployment (rust-lang/cargo#17235)
- refactor(ops): Have cargo-metadata's ops match the command name (rust-lang/cargo#17233)
- chore: Flatten src (rust-lang/cargo#17231)
- chore: Flatten `src` (rust-lang/cargo#17230)
- chore(ci): remove stale libsecret packages (rust-lang/cargo#17229)
- perf: Lazily initialize git2 fetch transports  (rust-lang/cargo#17226)
- test(trim-paths): re-enable lldb debugger tests  (rust-lang/cargo#17223)
- Include SBOM outputs in fingerprints (rust-lang/cargo#17216)
- Update cfg_aliases to 0.2.2 (rust-lang/cargo#17225)
- test(trim-paths): exercise GDB on windows-gnu (rust-lang/cargo#17221)
- feat(profile): Disable incremental compilation under CI by default (rust-lang/cargo#17220)
- Remove myself from review rotation (rust-lang/cargo#17219)
- Fix typo in comment in sync (rust-lang/cargo#17217)
- docs(ref): Improve handing of built-in profiles (rust-lang/cargo#17213)
- fix: dont apply host-config gating to stable behavior (rust-lang/cargo#17198)
- chore(deps): update msrv (rust-lang/cargo#17192)
- test: fix race in cargo_compile_with_invalid_code_in_deps (rust-lang/cargo#17203)
- Rename `-Zno-embed-metadata` to `-Zembed-metadata=no` (rust-lang/cargo#17149)
- fix(source): incorrect duplicate package warning (rust-lang/cargo#17204)
- Fix manifest schema generation: `TomlDebugInfo` enum-variants doesn't renamed (rust-lang/cargo#17202)
- Reduce library search path length in new build dir layout (rust-lang/cargo#17191)
- fix(install): Move --debug to Compilation options (rust-lang/cargo#17199)
- chore(ci): dogfood `build.warnings` (rust-lang/cargo#17195)
- docs(lints): Better match clippy in lint section titles (rust-lang/cargo#17190)
- chore: bump to 0.100.0; update changelog (rust-lang/cargo#17189)
- docs(ref): Clarify MSRV for lints (rust-lang/cargo#17184)
- docs(report): add missing entry for `cargo report future-incompatibilities` (rust-lang/cargo#17188)
- Reduce rustc `-L` args used in the new `build-dir` layout (rust-lang/cargo#17168)
@rustbot rustbot added this to the 1.99.0 milestone Jul 18, 2026
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.

CARGO_HOME with .. + git dependency issue warning: skipping duplicate package

4 participants