Exclude CARGO_HOME from generate-copyright in-tree determination

This commit is contained in:
Ana Hobden 2025-05-30 12:52:50 -07:00
parent a8e4c68dcb
commit f886925ed3
No known key found for this signature in database
3 changed files with 19 additions and 6 deletions

View file

@ -5,7 +5,6 @@
use std::path::PathBuf;
use crate::Mode;
use crate::core::build_steps::dist::distdir;
use crate::core::build_steps::test;
use crate::core::build_steps::tool::{self, SourceType, Tool};
@ -14,6 +13,7 @@ use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
use crate::core::config::TargetSelection;
use crate::core::config::flags::get_completion;
use crate::utils::exec::command;
use crate::{Mode, t};
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
pub struct BuildManifest;
@ -243,6 +243,7 @@ impl Step for GenerateCopyright {
cmd.env("SRC_DIR", &builder.src);
cmd.env("VENDOR_DIR", &vendored_sources);
cmd.env("CARGO", &builder.initial_cargo);
cmd.env("CARGO_HOME", t!(home::cargo_home()));
// it is important that generate-copyright runs from the root of the
// source tree, because it uses relative paths
cmd.current_dir(&builder.src);

View file

@ -46,11 +46,12 @@ pub struct PackageMetadata {
/// covered it already.
pub fn get_metadata_and_notices(
cargo: &Path,
cargo_home_path: &Path,
vendor_path: &Path,
root_path: &Path,
manifest_paths: &[PathBuf],
) -> Result<BTreeMap<Package, PackageMetadata>, Error> {
let mut output = get_metadata(cargo, root_path, manifest_paths)?;
let mut output = get_metadata(cargo, cargo_home_path, root_path, manifest_paths)?;
// Now for each dependency we found, go and grab any important looking files
for (package, metadata) in output.iter_mut() {
@ -66,6 +67,7 @@ pub fn get_metadata_and_notices(
/// assume `reuse` has covered it already.
pub fn get_metadata(
cargo: &Path,
cargo_home_path: &Path,
root_path: &Path,
manifest_paths: &[PathBuf],
) -> Result<BTreeMap<Package, PackageMetadata>, Error> {
@ -81,8 +83,11 @@ pub fn get_metadata(
.manifest_path(manifest_path)
.exec()?;
for package in metadata.packages {
let manifest_path = package.manifest_path.as_path();
if manifest_path.starts_with(root_path) {
let package_manifest_path = package.manifest_path.as_path();
if package_manifest_path.starts_with(root_path)
&& !package_manifest_path.starts_with(cargo_home_path)
{
// it's an in-tree dependency and reuse covers it
continue;
}

View file

@ -15,6 +15,7 @@ mod cargo_metadata;
///
/// Run `x.py run generate-copyright`
fn main() -> Result<(), Error> {
let cargo_home = env_path("CARGO_HOME")?;
let dest_file = env_path("DEST")?;
let libstd_dest_file = env_path("DEST_LIBSTD")?;
let src_dir = env_path("SRC_DIR")?;
@ -39,11 +40,17 @@ fn main() -> Result<(), Error> {
.collect::<Vec<_>>();
// Scan Cargo dependencies
let mut collected_cargo_metadata =
cargo_metadata::get_metadata_and_notices(&cargo, &vendor_dir, &src_dir, &cargo_manifests)?;
let mut collected_cargo_metadata = cargo_metadata::get_metadata_and_notices(
&cargo,
&cargo_home,
&vendor_dir,
&src_dir,
&cargo_manifests,
)?;
let library_collected_cargo_metadata = cargo_metadata::get_metadata_and_notices(
&cargo,
&cargo_home,
&vendor_dir,
&src_dir,
&library_manifests,