From 312e2aab7fb9f1ecf3aa6dd5bc8051c1cabc6061 Mon Sep 17 00:00:00 2001 From: Arlo Siemsen Date: Wed, 3 Apr 2024 12:59:49 -0500 Subject: [PATCH] Use strip_path_canonical for getting the relative path This resolve an issue where the package path contains a symlink that's resolved by git --- src/cargo/ops/cargo_package.rs | 5 +++-- tests/testsuite/package.rs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cargo/ops/cargo_package.rs b/src/cargo/ops/cargo_package.rs index 99f1d4fdd..a699e58a6 100644 --- a/src/cargo/ops/cargo_package.rs +++ b/src/cargo/ops/cargo_package.rs @@ -533,8 +533,9 @@ fn check_repo_state( if let Some(workdir) = repo.workdir() { debug!("found a git repo at {:?}", workdir); let path = p.manifest_path(); - let path = path.strip_prefix(workdir).unwrap_or(path); - if let Ok(status) = repo.status_file(path) { + let path = + paths::strip_prefix_canonical(path, workdir).unwrap_or_else(|_| path.to_path_buf()); + if let Ok(status) = repo.status_file(&path) { if (status & git2::Status::IGNORED).is_empty() { debug!( "found (git) Cargo.toml at {:?} in workdir {:?}", diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index ab7cf99e8..8f3ab93ad 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -3538,7 +3538,7 @@ fn symlink_manifest_path() { warning: manifest has no description, license, license-file, documentation, homepage or repository. See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info. [PACKAGING] foo v1.0.0 ([..]foo-symlink) -[PACKAGED] 5 files[..] +[PACKAGED] 6 files[..] ", ) .run()