Skip to content

Commit 9c78c3a

Browse files
committed
Auto merge of #5576 - matklad:revert-deps, r=alexcrichton
Revert "Auto merge of #5461 - matklad:meta-rename, r=alexcrichton" This reverts commit d0d3cb5, reversing changes made to 757112c. It is unclear if the design is right, see #5558 (comment)
2 parents 4c8b8ac + bce5ab5 commit 9c78c3a

File tree

5 files changed

+39
-316
lines changed

5 files changed

+39
-316
lines changed

src/cargo/core/compiler/context/unit_dependencies.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ fn compute_deps<'a, 'b, 'cfg>(
122122
true
123123
})
124124
}).filter_map(|(id, _)| match bcx.get_package(id) {
125-
Ok(pkg) => pkg.lib_target().map(|t| {
125+
Ok(pkg) => pkg.targets().iter().find(|t| t.is_lib()).map(|t| {
126126
let mode = check_or_build_mode(&unit.mode, t);
127127
let unit = new_unit(bcx, pkg, t, profile_for, unit.kind.for_target(t), mode);
128128
Ok((unit, profile_for))
@@ -256,7 +256,7 @@ fn compute_deps_doc<'a, 'cfg>(
256256
let mut ret = Vec::new();
257257
for dep in deps {
258258
let dep = dep?;
259-
let lib = match dep.lib_target() {
259+
let lib = match dep.targets().iter().find(|t| t.is_lib()) {
260260
Some(lib) => lib,
261261
None => continue,
262262
};

src/cargo/core/package.rs

-4
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,6 @@ impl Package {
129129
pub fn targets(&self) -> &[Target] {
130130
self.manifest.targets()
131131
}
132-
/// Get the library target for the package
133-
pub fn lib_target(&self) -> Option<&Target> {
134-
self.targets().iter().find(|t| t.is_lib())
135-
}
136132
/// Get the current package version
137133
pub fn version(&self) -> &Version {
138134
self.package_id().version()

src/cargo/ops/cargo_compile.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -542,11 +542,8 @@ fn generate_targets<'a>(
542542
proposals.extend(default_units);
543543
if build_config.mode == CompileMode::Test {
544544
// Include the lib as it will be required for doctests.
545-
match pkg.lib_target() {
546-
Some(t) if t.doctested() => {
547-
proposals.push((new_unit(pkg, t, CompileMode::Build), false));
548-
}
549-
_ => {}
545+
if let Some(t) = pkg.targets().iter().find(|t| t.is_lib() && t.doctested()) {
546+
proposals.push((new_unit(pkg, t, CompileMode::Build), false));
550547
}
551548
}
552549
}
@@ -559,7 +556,7 @@ fn generate_targets<'a>(
559556
ref benches,
560557
} => {
561558
if lib {
562-
if let Some(target) = pkg.lib_target() {
559+
if let Some(target) = pkg.targets().iter().find(|t| t.is_lib()) {
563560
proposals.push((new_unit(pkg, target, build_config.mode), false));
564561
} else if !all_targets {
565562
bail!("no library targets found")
+32-81
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use serde::ser::{self, Serialize};
2+
13
use core::resolver::Resolve;
2-
use core::{Package, PackageId, PackageSet, Workspace};
3-
use core::dependency;
4+
use core::{Package, PackageId, Workspace};
45
use ops::{self, Packages};
56
use util::CargoResult;
67

@@ -55,19 +56,18 @@ fn metadata_full(ws: &Workspace, opt: &OutputMetadataOptions) -> CargoResult<Exp
5556
)?;
5657
let (packages, resolve) = deps;
5758

58-
let resolve = MetadataResolve::new(
59-
&packages,
60-
&resolve,
61-
ws.current_opt().map(|pkg| pkg.package_id().clone()),
62-
);
6359
let packages = packages
6460
.package_ids()
6561
.map(|i| packages.get(i).map(|p| p.clone()))
6662
.collect::<CargoResult<Vec<_>>>()?;
63+
6764
Ok(ExportInfo {
6865
packages,
6966
workspace_members: ws.members().map(|pkg| pkg.package_id().clone()).collect(),
70-
resolve: Some(resolve),
67+
resolve: Some(MetadataResolve {
68+
resolve,
69+
root: ws.current_opt().map(|pkg| pkg.package_id().clone()),
70+
}),
7171
target_directory: ws.target_dir().display().to_string(),
7272
version: VERSION,
7373
workspace_root: ws.root().display().to_string(),
@@ -76,91 +76,42 @@ fn metadata_full(ws: &Workspace, opt: &OutputMetadataOptions) -> CargoResult<Exp
7676

7777
#[derive(Serialize)]
7878
pub struct ExportInfo {
79-
/// All packages for this project, with dependencies.
8079
packages: Vec<Package>,
81-
/// Packages which are direct members of the current project.
8280
workspace_members: Vec<PackageId>,
83-
/// A graph of the dependencies between packages.
8481
resolve: Option<MetadataResolve>,
85-
/// The directory where intermediate build artifacts will be stored.
8682
target_directory: String,
87-
/// Version of this JSON format
8883
version: u32,
89-
/// Path to the directory with the project.
9084
workspace_root: String,
9185
}
9286

93-
// The serialization format is different from lockfile, because
94-
// here we use different format for `PackageId`s, and give more
95-
// information about dependencies.
87+
/// Newtype wrapper to provide a custom `Serialize` implementation.
88+
/// The one from lockfile does not fit because it uses a non-standard
89+
/// format for `PackageId`s
9690
#[derive(Serialize)]
9791
struct MetadataResolve {
98-
/// Dependencies for each package from `ExportInfo::package`.
99-
nodes: Vec<Node>,
100-
/// Deprecated, use `ExportInfo::workspace_members`.
92+
#[serde(rename = "nodes", serialize_with = "serialize_resolve")]
93+
resolve: Resolve,
10194
root: Option<PackageId>,
10295
}
10396

104-
/// Describes dependencies of a single package.
105-
#[derive(Serialize)]
106-
struct Node {
107-
/// The id of the package.
108-
id: PackageId,
109-
/// Deprecated, use `deps` field.
110-
dependencies: Vec<PackageId>,
111-
/// Dependencies of this package.
112-
deps: Vec<Dependency>,
113-
/// Features, enabled for this package.
114-
features: Vec<String>,
115-
}
116-
117-
/// Describes a single dependency.
118-
#[derive(Serialize)]
119-
struct Dependency {
120-
/// The id of the dependency.
121-
id: PackageId,
122-
/// The name used for `extern crate` declaration of this dependency.
123-
name: String,
124-
/// Is this normal, dev or build dependency
125-
kind: dependency::Kind,
126-
}
127-
128-
impl MetadataResolve {
129-
pub fn new(
130-
packages: &PackageSet,
131-
resolve: &Resolve,
132-
root: Option<PackageId>,
133-
) -> MetadataResolve {
134-
let nodes = resolve
135-
.iter()
136-
.map(|pkg| {
137-
Node {
138-
id: pkg.clone(),
139-
dependencies: resolve.deps(pkg).map(|(dep, _)| dep.clone()).collect(),
140-
deps: resolve
141-
.deps(pkg)
142-
.flat_map(|(id, deps)| {
143-
let dep_name = packages.get(id).unwrap()
144-
.lib_target().unwrap()
145-
.crate_name();
146-
deps.iter().map(|dep| {
147-
Dependency {
148-
id: id.clone(),
149-
name: dep.rename().unwrap_or(&dep_name)
150-
.to_owned(),
151-
kind: dep.kind(),
152-
}
153-
}).collect::<Vec<_>>().into_iter()
154-
})
155-
.collect(),
156-
features: resolve
157-
.features_sorted(pkg)
158-
.into_iter()
159-
.map(|s| s.to_string())
160-
.collect(),
161-
}
162-
})
163-
.collect();
164-
MetadataResolve { nodes, root }
97+
fn serialize_resolve<S>(resolve: &Resolve, s: S) -> Result<S::Ok, S::Error>
98+
where
99+
S: ser::Serializer,
100+
{
101+
#[derive(Serialize)]
102+
struct Node<'a> {
103+
id: &'a PackageId,
104+
dependencies: Vec<&'a PackageId>,
105+
features: Vec<&'a str>,
165106
}
107+
108+
resolve
109+
.iter()
110+
.map(|id| Node {
111+
id,
112+
dependencies: resolve.deps(id).map(|p| p.0).collect(),
113+
features: resolve.features_sorted(id),
114+
})
115+
.collect::<Vec<_>>()
116+
.serialize(s)
166117
}

0 commit comments

Comments
 (0)