From ac0e4faf3b5be32d5d95503298bd559421c7c6d6 Mon Sep 17 00:00:00 2001 From: elchc Date: Tue, 8 Oct 2024 16:42:42 -0400 Subject: [PATCH] Add bin/cdylib/staticlib suffix for artifact deps --- src/cargo/core/package.rs | 10 +++++++++- src/cargo/ops/tree/format/mod.rs | 13 +++++++++++-- tests/testsuite/artifact_dep.rs | 14 +++++++------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/cargo/core/package.rs b/src/cargo/core/package.rs index ac1bcdc5cb7..1e67b75efa4 100644 --- a/src/cargo/core/package.rs +++ b/src/cargo/core/package.rs @@ -19,7 +19,7 @@ use serde::Serialize; use tracing::debug; use crate::core::compiler::{CompileKind, RustcTargetData}; -use crate::core::dependency::DepKind; +use crate::core::dependency::{ArtifactKind, DepKind}; use crate::core::resolver::features::ForceAllTargets; use crate::core::resolver::{HasDevUnits, Resolve}; use crate::core::{ @@ -167,6 +167,14 @@ impl Package { pub fn proc_macro(&self) -> bool { self.targets().iter().any(|target| target.proc_macro()) } + // TODO fix this. For now, just wanted it to return a plausible value. Must figure out why .kinds() returns a Vec. + /// Gets crate-type in { .., artifact = } of this package + pub fn artifact_kind(&self) -> Option<&ArtifactKind> { + let found = self.dependencies().iter().find_map(|dep| dep.artifact()); + + // TODO for now just returns the first ArtifactKind in the Vec + found?.kinds().iter().next() + } /// Gets the package's minimum Rust version. pub fn rust_version(&self) -> Option<&RustVersion> { self.manifest().rust_version() diff --git a/src/cargo/ops/tree/format/mod.rs b/src/cargo/ops/tree/format/mod.rs index d0b55b74d3e..a96c8642762 100644 --- a/src/cargo/ops/tree/format/mod.rs +++ b/src/cargo/ops/tree/format/mod.rs @@ -75,12 +75,21 @@ impl<'a> fmt::Display for Display<'a> { } else { "" }; + // TODO this is probably NOT the right way to get the ArtifactKind + // + let artifact_suffix = + if let Some(artifact_kind) = package.artifact_kind() { + format!(" ({})", artifact_kind.crate_type()) + } else { + "".to_string() + }; write!( fmt, - "{} v{}{}", + "{} v{}{}{}", package.name(), package.version(), - proc_macro_suffix + proc_macro_suffix, + artifact_suffix, )?; let source_id = package.package_id().source_id(); diff --git a/tests/testsuite/artifact_dep.rs b/tests/testsuite/artifact_dep.rs index f0b32ebb229..6c5ad8977ed 100644 --- a/tests/testsuite/artifact_dep.rs +++ b/tests/testsuite/artifact_dep.rs @@ -1521,7 +1521,7 @@ fn dependencies_of_dependencies_work_in_artifacts() { .with_stdout_data(str![[r#" foo v0.0.0 ([ROOT]/foo) [build-dependencies] -└── bar v0.5.0 ([ROOT]/foo/bar) +└── bar v0.5.0 (bin) ([ROOT]/foo/bar) └── baz v1.0.0 "#]]) @@ -1571,12 +1571,12 @@ fn artifact_dep_target_specified() { // TODO: This command currently fails due to a bug in cargo but it should be fixed so that it succeeds in the future. p.cargo("tree -Z bindeps") .masquerade_as_nightly_cargo(&["bindeps"]) - .with_stdout_data("") - .with_stderr_data(r#"... -[..]did not find features for (PackageId { name: "bindep", version: "0.0.0", source: "[..]" }, NormalOrDev) within activated_features:[..] -... -"#) - .with_status(101) + .with_stdout_data(str![[r#" +foo v0.0.0 ([ROOT]/foo) +└── bindep v0.0.0 (bin) ([ROOT]/foo/bindep) + +"#]]) + .with_status(0) .run(); }